Changeset 29238


Ignore:
Timestamp:
Aug 21, 2014, 7:10:15 PM (10 years ago)
Author:
plg
Message:

feature 2791: batch manager, filter by filesize

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/batch_manager.php

    r29237 r29238  
    133133  }
    134134
     135  if (isset($_POST['filter_filesize_use']))
     136  {
     137    foreach (array('min','max') as $type)
     138    {
     139      if ( preg_match('#^[0-9\.]+$#', $_POST['filter_filesize_'. $type ]) )
     140      {
     141        $_SESSION['bulk_manager_filter']['filesize'][$type] = $_POST['filter_filesize_'. $type ];
     142      }
     143    }
     144  }
     145
    135146  if (isset($_POST['filter_search_use']))
    136147  {
     
    402413    // max_ratio is a floor value, so must be a bit increased
    403414    $where_clause[] = 'width/height < '.($_SESSION['bulk_manager_filter']['dimension']['max_ratio']+0.01);
     415  }
     416
     417  $query = '
     418SELECT id
     419  FROM '.IMAGES_TABLE.'
     420  WHERE '.implode(' AND ',$where_clause).'
     421  '.$conf['order_by'];
     422
     423  $filter_sets[] = query2array($query, null, 'id');
     424}
     425
     426if (isset($_SESSION['bulk_manager_filter']['filesize']))
     427{
     428  $where_clauses = array();
     429 
     430  if (isset($_SESSION['bulk_manager_filter']['filesize']['min']))
     431  {
     432    $where_clause[] = 'filesize >= '.$_SESSION['bulk_manager_filter']['filesize']['min']*1024;
     433  }
     434 
     435  if (isset($_SESSION['bulk_manager_filter']['filesize']['max']))
     436  {
     437    $where_clause[] = 'filesize <= '.$_SESSION['bulk_manager_filter']['filesize']['max']*1024;
    404438  }
    405439
     
    580614$template->assign('dimensions', $dimensions);
    581615
     616// +-----------------------------------------------------------------------+
     617// | filesize                                                              |
     618// +-----------------------------------------------------------------------+
     619
     620$filesizes = array();
     621
     622$query = '
     623SELECT
     624  filesize
     625  FROM '.IMAGES_TABLE.'
     626  WHERE filesize IS NOT NULL
     627  GROUP BY filesize
     628;';
     629$result = pwg_query($query);
     630
     631while ($row = pwg_db_fetch_assoc($result))
     632{
     633  $filesizes[] = sprintf('%.1f', $row['filesize']/1024);
     634}
     635
     636if (empty($filesizes))
     637{ // arbitrary values, only used when no photos on the gallery
     638  $filesizes = array(0, 1, 2, 5, 8, 15);
     639}
     640
     641$filesizes = array_unique($filesizes);
     642sort($filesizes);
     643
     644// add 0.1MB to the last value, to make sure the heavier photo will be in
     645// the result
     646$filesizes[count($filesizes)-1]+= 0.1;
     647
     648$filesize['list'] = implode(',', $filesizes);
     649
     650$filesize['bounds'] = array(
     651  'min' => $filesizes[0],
     652  'max' => $filesizes[count($filesizes)-1],
     653  );
     654
     655// selected=bound if nothing selected
     656foreach (array_keys($filesize['bounds']) as $type)
     657{
     658  $filesize['selected'][$type] = isset($_SESSION['bulk_manager_filter']['filesize'][$type])
     659    ? $_SESSION['bulk_manager_filter']['filesize'][$type]
     660    : $filesize['bounds'][$type]
     661  ;
     662}
     663
     664$template->assign('filesize', $filesize);
    582665
    583666// +-----------------------------------------------------------------------+
  • trunk/admin/themes/default/template/batch_manager_global.tpl

    r29076 r29238  
    354354  });
    355355
     356  {* filesize, copied from dimensions filter and modified, to be moved in a plugin later *}
     357  var filesize_values = [{$filesize.list}];
     358
     359  function filesize_onSliderChange(ui, pattern) {
     360    $("input[name='filter_filesize_min']").val(filesize_values[ui.values[0]]);
     361    $("input[name='filter_filesize_max']").val(filesize_values[ui.values[1]]);
     362
     363    $("#filter_filesize_info").html(sprintf(
     364      pattern,
     365      filesize_values[ui.values[0]],
     366      filesize_values[ui.values[1]]
     367    ));
     368  }
     369       
     370  $("#filter_filesize_slider").slider({
     371    range: true,
     372    min: 0,
     373    max: filesize_values.length - 1,
     374    values: [
     375      getSliderKeyFromValue({$filesize.selected.min}, filesize_values),
     376      getSliderKeyFromValue({$filesize.selected.max}, filesize_values)
     377    ],
     378    slide: function(event, ui) {
     379      filesize_onSliderChange(ui, "{'between %s and %s MB'|translate|escape:'javascript'}");
     380    },
     381    change: function(event, ui) {
     382      filesize_onSliderChange(ui, "{'between %s and %s MB'|translate|escape:'javascript'}");
     383    }
     384  });
     385
     386  $("a.filesize-choice").click(function() {
     387    $("#filter_filesize_slider")
     388      .slider("values", 0, 0)
     389      .slider("values", 1, filesize_values.length - 1);
     390  });
     391
     392
    356393  jQuery("select[name=filter_prefilter]").change(function() {
    357394    jQuery("#empty_caddie").toggle(jQuery(this).val() == "caddie");
     
    461498                                <a href="admin/popuphelp.php?page=quick_search" onclick="popuphelp(this.href);return false;" title="{'Help'|@translate}"><span class="icon-help-circled"></span></a>
    462499                        </li>
     500
     501      <li id="filter_filesize" {if !isset($filter.filesize)}style="display:none"{/if}>
     502        <a href="#" class="removeFilter" title="remove this filter"><span>[x]</span></a>
     503        <input type="checkbox" name="filter_filesize_use" class="useFilterCheckbox" {if isset($filter.filesize)}checked="checked"{/if}>
     504        {'Filesize'|@translate}
     505
     506        <blockquote>
     507          <span id="filter_filesize_info">{'between %s and %s MB'|@translate:$filesize.selected.min:$filesize.selected.max}</span>
     508          | <a class="filesize-choice">{'Reset'|@translate}</a>
     509          <div id="filter_filesize_slider"></div>
     510        </blockquote>
     511
     512        <input type="hidden" name="filter_filesize_min" value="{$filesize.selected.min}">
     513        <input type="hidden" name="filter_filesize_max" value="{$filesize.selected.max}">
     514      </li>
    463515    </ul>
    464516
     
    472524        <option value="filter_level" {if isset($filter.level)}disabled="disabled"{/if}>{'Privacy level'|@translate}</option>
    473525        <option value="filter_dimension" {if isset($filter.dimension)}disabled="disabled"{/if}>{'Dimensions'|@translate}</option>
     526        <option value="filter_filesize" {if isset($filter.filesize)}disabled="disabled"{/if}>{'Filesize'|@translate}</option>
    474527                                <option value="filter_search"{if isset($filter.search)} disabled="disabled"{/if}>{'Search'|@translate}</option>
    475528      </select>
  • trunk/admin/themes/default/theme.css

    r28563 r29238  
    979979#batchManagerGlobal .useFilterCheckbox {display:none;}
    980980
    981 #batchManagerGlobal #filter_dimension blockquote {margin:5px 0 20px 15px;}
    982 #batchManagerGlobal #filter_dimension .ui-slider-horizontal {width:650px;margin:5px 0 10px 0;}
     981#batchManagerGlobal blockquote {margin:5px 0 20px 15px;}
     982#batchManagerGlobal .ui-slider-horizontal {width:650px;margin:5px 0 10px 0;}
    983983
    984984#order_filters a.addFilter {font-weight:normal;margin-left:20px;}
  • trunk/language/en_UK/admin.lang.php

    r29228 r29238  
    976976$lang['Close user details'] = 'Close user details';
    977977$lang['Empty caddie'] = 'Empty caddie';
     978$lang['between %s and %s MB'] = 'between %s and %s MB';
    978979?>
  • trunk/language/fr_FR/admin.lang.php

    r29230 r29238  
    978978$lang['Empty caddie'] = 'Vider le panier';
    979979$lang['The settings for the guest are from the %s user'] = 'Les préféreces des invités sont celles de l\'utilisateur %s';
     980$lang['between %s and %s MB'] = 'entre %s et %s Mo';
Note: See TracChangeset for help on using the changeset viewer.