allow control ports list by port status
This commit is contained in:
		| @@ -55,12 +55,37 @@ ajax '/ajax/content/device/ports' => require_login sub { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     # filter for free ports if asked | ||||
|     my $free_filter = (param('free') ? 'only_free_ports' : 'with_is_free'); | ||||
|     $set = $set->$free_filter({ | ||||
|       age_num => (param('age_num') || 3), | ||||
|       age_unit => (param('age_unit') || 'months') | ||||
|     }); | ||||
|     # filter for port status if asked | ||||
|     my %port_state = map {$_ => 1} (param('port_state') || ()); | ||||
|  | ||||
|     if (exists $port_state{free}) { | ||||
|         if (scalar keys %port_state == 1) { | ||||
|             $set = $set->only_free_ports({ | ||||
|               age_num => (param('age_num') || 3), | ||||
|               age_unit => (param('age_unit') || 'months') | ||||
|             }); | ||||
|         } | ||||
|         else { | ||||
|             $set = $set->with_is_free({ | ||||
|               age_num => (param('age_num') || 3), | ||||
|               age_unit => (param('age_unit') || 'months') | ||||
|             }); | ||||
|         } | ||||
|         delete $port_state{free}; | ||||
|     } | ||||
|  | ||||
|     if (scalar keys %port_state < 3) { | ||||
|         my @combi = (); | ||||
|  | ||||
|         push @combi, {'me.up' => 'up'} | ||||
|           if exists $port_state{up}; | ||||
|         push @combi, {'me.up_admin' => 'up', 'me.up' => { '!=' => 'up'}} | ||||
|           if exists $port_state{down}; | ||||
|         push @combi, {'me.up_admin' => { '!=' => 'up'}} | ||||
|           if exists $port_state{shut}; | ||||
|  | ||||
|         $set = $set->search({-or => \@combi}); | ||||
|     } | ||||
|  | ||||
|     # make sure query asks for formatted timestamps when needed | ||||
|     $set = $set->with_times if param('c_lastchange'); | ||||
|   | ||||
| @@ -22,7 +22,7 @@ | ||||
|         <i class="icon-remove"></i> | ||||
|         [% ELSIF row.stp == 'blocking' %] | ||||
|         <i class="icon-fullscreen text-info"></i> | ||||
|         [% ELSIF params.free OR row.is_free %] | ||||
|         [% ELSIF row.has_column('is_free') AND row.is_free %] | ||||
|         <i class="icon-arrow-down text-success"></i> | ||||
|         [% ELSIF row.up_admin == 'up' AND row.up == 'down' %] | ||||
|         <i class="icon-arrow-down text-error"></i> | ||||
|   | ||||
| @@ -75,11 +75,15 @@ | ||||
|                     </select> | ||||
|                   </li> | ||||
|                   <li> | ||||
|                     <label class="checkbox"> | ||||
|                       <input type="checkbox" id="free" | ||||
|                         name="free"[% ' checked="checked"' IF params.free %]/> | ||||
|                       Only show Free Ports | ||||
|                     </label> | ||||
|                     <em class="muted">Show Ports with Status:</em><br/> | ||||
|                     <div class="clearfix"> | ||||
|                       <select class="nd_side-select" size="4" multiple="on" name="port_state"/> | ||||
|                         <option selected="selected" value="up">Link Up</option> | ||||
|                         <option selected="selected" value="free">Port Free</option> | ||||
|                         <option selected="selected" value="down">Link Down</option> | ||||
|                         <option selected="selected" value="shut">Admin Disabled</option> | ||||
|                       </select> | ||||
|                     </div> | ||||
|                   </li> | ||||
|                 </ul> | ||||
|               </div> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user