Ignore:
Timestamp:
Aug 17, 2010, 5:47:14 PM (14 years ago)
Author:
plg
Message:

feature 1802 added: filtering system. Only 3 filters available, more to come
later. Ability to add/remove filters on the fly.

When an administrator displays the "caddie" content, it means bulk manager
with a single filter "prefilter=caddie". Same principle for the photos of a
given album.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extensions/bulk_manager/element_set.php

    r6756 r6772  
    4444
    4545// +-----------------------------------------------------------------------+
    46 // |                    initialize info about category                     |
    47 // +-----------------------------------------------------------------------+
    48 
    49 if (!isset($_GET['cat']))
    50 {
    51   $_GET['cat'] = 'caddie';
    52 }
    53 
    54 // To element_set_(global|unit).php, we must provide the elements id of the
    55 // managed category in $page['cat_elements_id'] array.
    56 $page['cat_elements_id'] = array();
    57 if (is_numeric($_GET['cat']))
    58 {
    59   $page['title'] =
    60     get_cat_display_name_from_id(
    61       $_GET['cat'],
    62       PHPWG_ROOT_PATH.'admin.php?page=cat_modify&cat_id=',
    63       false
     46// |                      initialize current set                           |
     47// +-----------------------------------------------------------------------+
     48
     49if (isset($_POST['submitFilter']))
     50{
     51  // echo '<pre>'; print_r($_POST); echo '</pre>';
     52 
     53  $_SESSION['bulk_manager_filter'] = array();
     54
     55  if (isset($_POST['filter_prefilter_use']))
     56  {
     57    $prefilters = array('caddie', 'last import', 'with no album', 'with no tag');
     58    if (in_array($_POST['filter_prefilter'], $prefilters))
     59    {
     60      $_SESSION['bulk_manager_filter']['prefilter'] = $_POST['filter_prefilter'];
     61    }   
     62  }
     63
     64  if (isset($_POST['filter_category_use']))
     65  {
     66    $_SESSION['bulk_manager_filter']['category'] = $_POST['filter_category'];
     67
     68    if (isset($_POST['filter_category_recursive']))
     69    {
     70      $_SESSION['bulk_manager_filter']['category_recursive'] = true;
     71    }
     72  }
     73
     74  if (isset($_POST['filter_level_use']))
     75  {
     76    if (in_array($_POST['filter_level'], $conf['available_permission_levels']))
     77    {
     78      $_SESSION['bulk_manager_filter']['level'] = $_POST['filter_level'];
     79    }
     80  }
     81}
     82
     83if (isset($_GET['cat']))
     84{
     85  if ('caddie' == $_GET['cat'])
     86  {
     87    $_SESSION['bulk_manager_filter'] = array(
     88      'prefilter' => 'caddie'
    6489      );
    65 
    66   $query = '
    67 SELECT image_id
    68   FROM '.IMAGE_CATEGORY_TABLE.'
    69   WHERE category_id = '.$_GET['cat'].'
    70 ;';
    71   $page['cat_elements_id'] = array_from_query($query, 'image_id');
    72 }
    73 else if ('caddie' == $_GET['cat'])
    74 {
    75   $page['title'] = l10n('caddie');
    76 
    77   $query = '
     90  }
     91
     92  if (is_numeric($_GET['cat']))
     93  {
     94    $_SESSION['bulk_manager_filter'] = array(
     95      'category' => $_GET['cat']
     96      );
     97  }
     98}
     99
     100if (!isset($_SESSION['bulk_manager_filter']))
     101{
     102  $_SESSION['bulk_manager_filter'] = array(
     103    'prefilter' => 'caddie'
     104    );
     105}
     106
     107// echo '<pre>'; print_r($_SESSION['bulk_manager_filter']); echo '</pre>';
     108
     109// depending on the current filter (in session), we find the appropriate
     110// photos
     111$filter_sets = array();
     112if (isset($_SESSION['bulk_manager_filter']['prefilter']))
     113{
     114  if ('caddie' == $_SESSION['bulk_manager_filter']['prefilter'])
     115  {
     116    $query = '
    78117SELECT element_id
    79118  FROM '.CADDIE_TABLE.'
    80119  WHERE user_id = '.$user['id'].'
    81120;';
    82   $page['cat_elements_id'] = array_from_query($query, 'element_id');
    83 }
    84 else if ('not_linked' == $_GET['cat'])
    85 {
    86   $page['title'] = l10n('Not linked elements');
    87   $template->assign(array('U_ACTIVE_MENU' => 5 ));
    88 
    89   // we are searching elements not linked to any virtual category
     121    array_push(
     122      $filter_sets,
     123      array_from_query($query, 'element_id')
     124      );
     125  }
     126
     127  if ('last import'== $_SESSION['bulk_manager_filter']['prefilter'])
     128  {
     129    $query = '
     130SELECT MAX(date_available) AS date
     131  FROM '.IMAGES_TABLE.'
     132;';
     133    $row = pwg_db_fetch_assoc(pwg_query($query));
     134    if (!empty($row['date']))
     135    {
     136      $query = '
     137SELECT id
     138  FROM '.IMAGES_TABLE.'
     139  WHERE date_available BETWEEN '.pwg_db_get_recent_period_expression(1, $row['date']).' AND \''.$row['date'].'\'
     140;';
     141      array_push(
     142        $filter_sets,
     143        array_from_query($query, 'id')
     144        );
     145    }
     146  }
     147}
     148
     149if (isset($_SESSION['bulk_manager_filter']['category']))
     150{
     151  $categories = array();
     152 
     153  if (isset($_SESSION['bulk_manager_filter']['category_recursive']))
     154  {
     155    $categories = get_subcat_ids(array($_SESSION['bulk_manager_filter']['category']));
     156  }
     157  else
     158  {
     159    $categories = array($_SESSION['bulk_manager_filter']['category']);
     160  }
     161 
     162  $query = '
     163 SELECT DISTINCT(image_id)
     164   FROM '.IMAGE_CATEGORY_TABLE.'
     165   WHERE category_id IN ('.implode(',', $categories).')
     166 ;';
     167  array_push(
     168    $filter_sets,
     169    array_from_query($query, 'image_id')
     170    );
     171}
     172
     173if (isset($_SESSION['bulk_manager_filter']['level']))
     174{
    90175  $query = '
    91176SELECT id
    92177  FROM '.IMAGES_TABLE.'
     178  WHERE level >= '.$_SESSION['bulk_manager_filter']['level'].'
    93179;';
    94   $all_elements = array_from_query($query, 'id');
    95 
    96   $linked_to_virtual = array();
    97 
    98   $query = '
    99 SELECT id
    100   FROM '.CATEGORIES_TABLE.'
    101   WHERE dir IS NULL
    102 ;';
    103   $virtual_categories = array_from_query($query, 'id');
    104   if (!empty($virtual_categories))
    105   {
    106     $query = '
    107 SELECT DISTINCT(image_id)
    108   FROM '.IMAGE_CATEGORY_TABLE.'
    109   WHERE category_id IN ('.implode(',', $virtual_categories).')
    110 ;';
    111     $linked_to_virtual = array_from_query($query, 'image_id');
    112   }
    113 
    114   $page['cat_elements_id'] = array_diff($all_elements, $linked_to_virtual);
    115 }
    116 else if ('duplicates' == $_GET['cat'])
    117 {
    118   $page['title'] = l10n('Files with same name in more than one physical category');
    119   $template->assign(array('U_ACTIVE_MENU' => 5 ));
    120 
    121   // we are searching related elements twice or more to physical categories
    122   // 1 - Retrieve Files
    123   $query = '
    124 SELECT DISTINCT(file)
    125   FROM '.IMAGES_TABLE.'
    126  GROUP BY file
    127 HAVING COUNT(DISTINCT storage_category_id) > 1
    128 ;';
    129 
    130   $duplicate_files = array_from_query($query, 'file');
    131   $duplicate_files[]='Nofiles';
    132   // 2 - Retrives related picture ids
    133   $query = '
    134 SELECT id, file
    135   FROM '.IMAGES_TABLE.'
    136 WHERE file IN (\''.implode("','", $duplicate_files).'\')
    137 ORDER BY file, id
    138 ;';
    139 
    140   $page['cat_elements_id'] = array_from_query($query, 'id');
    141 }
    142 elseif ('recent'== $_GET['cat'])
    143 {
    144   $page['title'] = l10n('Recent pictures');
    145   $query = 'SELECT MAX(date_available) AS date
    146   FROM '.IMAGES_TABLE;
    147   $row = pwg_db_fetch_assoc(pwg_query($query));
    148   if (!empty($row['date']))
    149   {
    150     $query = 'SELECT id
    151   FROM '.IMAGES_TABLE.'
    152   WHERE date_available BETWEEN '.pwg_db_get_recent_period_expression(1, $row['date']).' AND \''.$row['date'].'\'';
    153     $page['cat_elements_id'] = array_from_query($query, 'id');
    154   }
    155 }
     180  array_push(
     181    $filter_sets,
     182    array_from_query($query, 'id')
     183    );
     184}
     185
     186$current_set = array_shift($filter_sets);
     187foreach ($filter_sets as $set)
     188{
     189  $current_set = array_intersect($current_set, $set);
     190}
     191$page['cat_elements_id'] = $current_set;
     192
     193//  // To element_set_(global|unit).php, we must provide the elements id of the
     194//  // managed category in $page['cat_elements_id'] array.
     195//  $page['cat_elements_id'] = array();
     196//  if (is_numeric($_GET['cat']))
     197//  {
     198//    $page['title'] =
     199//      get_cat_display_name_from_id(
     200//        $_GET['cat'],
     201//        PHPWG_ROOT_PATH.'admin.php?page=cat_modify&amp;cat_id=',
     202//        false
     203//        );
     204// 
     205//    $query = '
     206//  SELECT image_id
     207//    FROM '.IMAGE_CATEGORY_TABLE.'
     208//    WHERE category_id = '.$_GET['cat'].'
     209//  ;';
     210//    $page['cat_elements_id'] = array_from_query($query, 'image_id');
     211//  }
     212//  else if ('caddie' == $_GET['cat'])
     213//  {
     214//    $page['title'] = l10n('caddie');
     215// 
     216//    $query = '
     217//  SELECT element_id
     218//    FROM '.CADDIE_TABLE.'
     219//    WHERE user_id = '.$user['id'].'
     220//  ;';
     221//    $page['cat_elements_id'] = array_from_query($query, 'element_id');
     222//  }
     223//  else if ('not_linked' == $_GET['cat'])
     224//  {
     225//    $page['title'] = l10n('Not linked elements');
     226//    $template->assign(array('U_ACTIVE_MENU' => 5 ));
     227// 
     228//    // we are searching elements not linked to any virtual category
     229//    $query = '
     230//  SELECT id
     231//    FROM '.IMAGES_TABLE.'
     232//  ;';
     233//    $all_elements = array_from_query($query, 'id');
     234// 
     235//    $linked_to_virtual = array();
     236// 
     237//    $query = '
     238//  SELECT id
     239//    FROM '.CATEGORIES_TABLE.'
     240//    WHERE dir IS NULL
     241//  ;';
     242//    $virtual_categories = array_from_query($query, 'id');
     243//    if (!empty($virtual_categories))
     244//    {
     245//      $query = '
     246//  SELECT DISTINCT(image_id)
     247//    FROM '.IMAGE_CATEGORY_TABLE.'
     248//    WHERE category_id IN ('.implode(',', $virtual_categories).')
     249//  ;';
     250//      $linked_to_virtual = array_from_query($query, 'image_id');
     251//    }
     252// 
     253//    $page['cat_elements_id'] = array_diff($all_elements, $linked_to_virtual);
     254//  }
     255//  else if ('duplicates' == $_GET['cat'])
     256//  {
     257//    $page['title'] = l10n('Files with same name in more than one physical category');
     258//    $template->assign(array('U_ACTIVE_MENU' => 5 ));
     259// 
     260//    // we are searching related elements twice or more to physical categories
     261//    // 1 - Retrieve Files
     262//    $query = '
     263//  SELECT DISTINCT(file)
     264//    FROM '.IMAGES_TABLE.'
     265//   GROUP BY file
     266//  HAVING COUNT(DISTINCT storage_category_id) > 1
     267//  ;';
     268// 
     269//    $duplicate_files = array_from_query($query, 'file');
     270//    $duplicate_files[]='Nofiles';
     271//    // 2 - Retrives related picture ids
     272//    $query = '
     273//  SELECT id, file
     274//    FROM '.IMAGES_TABLE.'
     275//  WHERE file IN (\''.implode("','", $duplicate_files).'\')
     276//  ORDER BY file, id
     277//  ;';
     278// 
     279//    $page['cat_elements_id'] = array_from_query($query, 'id');
     280//  }
     281//  elseif ('recent'== $_GET['cat'])
     282//  {
     283//    $page['title'] = l10n('Recent pictures');
     284//    $query = 'SELECT MAX(date_available) AS date
     285//    FROM '.IMAGES_TABLE;
     286//    $row = pwg_db_fetch_assoc(pwg_query($query));
     287//    if (!empty($row['date']))
     288//    {
     289//      $query = 'SELECT id
     290//    FROM '.IMAGES_TABLE.'
     291//    WHERE date_available BETWEEN '.pwg_db_get_recent_period_expression(1, $row['date']).' AND \''.$row['date'].'\'';
     292//      $page['cat_elements_id'] = array_from_query($query, 'id');
     293//    }
     294//  }
    156295
    157296// +-----------------------------------------------------------------------+
Note: See TracChangeset for help on using the changeset viewer.