/[drupal]/contributions/modules/flexifilter/flexifilter.module
ViewVC logotype

Diff of /contributions/modules/flexifilter/flexifilter.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.16.2.4, Mon Jun 16 23:51:45 2008 UTC revision 1.16.2.5, Tue Jun 17 01:44:26 2008 UTC
# Line 1  Line 1 
1  <?php  <?php
2  // $Id: flexifilter.module,v 1.16.2.3 2008/05/12 19:59:15 cwgordon7 Exp $  // $Id: flexifilter.module,v 1.16.2.4 2008/06/16 23:51:45 cwgordon7 Exp $
3    
4  $path = drupal_get_path('module', 'flexifilter');  $path = drupal_get_path('module', 'flexifilter');
5  include_once ($path .'/flexifilter.components.inc');  include_once ($path .'/flexifilter.components.inc');
# Line 421  function flexifilter_filter_tips($delta, Line 421  function flexifilter_filter_tips($delta,
421   *   *
422   * @param $fid   * @param $fid
423   *   The uniqe flexifilter id of the flexifilter to load.   *   The uniqe flexifilter id of the flexifilter to load.
424     * @param $delta
425     *   The fitler delta to load.
426   * @param $refresh   * @param $refresh
427   *   If TRUE, refreshes the static cache. Defaults to FALSE.   *   If TRUE, refreshes the static cache. Defaults to FALSE.
428   * @return   * @return
429   *   The flexifilter upon success; FALSE upon failure.   *   The flexifilter upon success; FALSE upon failure.
430   */   */
431  function flexifilter_load($fid, $refresh = FALSE) {  function flexifilter_load($fid, $delta = NULL, $refresh = FALSE) {
432    if (!is_numeric($fid) && !is_null($fid)) {    if (!is_numeric($fid) && !is_null($fid)) {
433      return FALSE;      return FALSE;
434    }    }
# Line 436  function flexifilter_load($fid, $refresh Line 438  function flexifilter_load($fid, $refresh
438    }    }
439    if (!isset($flexifilters[$fid])) {    if (!isset($flexifilters[$fid])) {
440      if (!is_null($fid)) {      if (!is_null($fid)) {
441        $result = db_query('SELECT * FROM {flexifilters} f LEFT JOIN {flexifilters_parts} fp ON f.fid = fp.fid WHERE f.fid = %d ORDER BY fp.weight DESC', $fid);        if (is_null($delta)) {
442            $result = db_query('SELECT * FROM {flexifilters} f LEFT JOIN {flexifilters_parts} fp ON f.fid = fp.fid WHERE f.fid = %d ORDER BY fp.weight DESC', $fid);
443          }
444          else {
445            $result = db_query('SELECT * FROM {flexifilters} f LEFT JOIN {flexifilters_parts} fp ON f.fid = fp.fid WHERE f.fid = %d AND f.delta = %d ORDER BY fp.weight DESC', $fid, $delta);
446          }
447      }      }
448      else {      else {
449        $result = db_query('SELECT * FROM {flexifilters} f LEFT JOIN {flexifilters_parts} fp ON f.fid = fp.fid ORDER BY fp.weight DESC');        if (is_null($delta)) {
450            $result = db_query('SELECT * FROM {flexifilters} f LEFT JOIN {flexifilters_parts} fp ON f.fid = fp.fid ORDER BY fp.weight DESC');
451          }
452          else {
453            $result = db_query('SELECT * FROM {flexifilters} f LEFT JOIN {flexifilters_parts} fp ON f.fid = fp.fid WHERE f.delta = %d ORDER BY fp.weight DESC', $delta);
454          }
455      }      }
456      $parts = array();      $parts = array();
457      $structure = array();      $structure = array();
# Line 478  function flexifilter_load($fid, $refresh Line 490  function flexifilter_load($fid, $refresh
490        //_flexifilter_arrange_parts($flexifilter, $parts, $structure);        //_flexifilter_arrange_parts($flexifilter, $parts, $structure);
491      }      }
492      $flexifilters[$fid] = $flexifilter;      $flexifilters[$fid] = $flexifilter;
     print_r($flexifilter);  
493    }    }
494    return $flexifilters[$fid];    return $flexifilters[$fid];
495  }  }
# Line 568  function flexifilter_save_filter($filter Line 579  function flexifilter_save_filter($filter
579    $description = $filter['description'];    $description = $filter['description'];
580    $advanced    = $filter['advanced'];    $advanced    = $filter['advanced'];
581    $cache       = isset($filter['cache']) ? $filter['cache'] : 1;    $cache       = isset($filter['cache']) ? $filter['cache'] : 1;
582      $delta       = $filter['delta'];
583      $enabled     = $filter['enabled'];
584      if ($enabled && empty($delta)) {
585        $delta = flexifilter_get_unused_delta();
586      }
587    if ($fid === 'new') {    if ($fid === 'new') {
588      db_query("INSERT INTO {flexifilters} (label, description, enabled, delta, advanced, cache) VALUES ('%s', '%s', 0, 0, %d, %d)", $label, $description, $advanced, $cache);      db_query("INSERT INTO {flexifilters} (label, description, enabled, delta, advanced, cache) VALUES ('%s', '%s', %d, %d, %d, %d)", $label, $description, $enabled, $delta, $advanced, $cache);
589      $fid = db_last_insert_id('flexifilters');      $fid = db_last_insert_id('flexifilters');
590      _flexifilter_save_filter_components($filter['components'], $fid);      _flexifilter_save_filter_components($filter['components'], $fid);
591    }    }
592    else {    else {
593      $pids_to_reuse = array();      db_query("UPDATE {flexifilters} SET label = '%s', description = '%s', enabled = %d, delta = %d, advanced = %d, cache = %d WHERE fid = %d", $label, $description, $enabled, $delta, $advanced, $cache, $fid);
594      $result = db_query('SELECT pid FROM {flexifilters_parts} WHERE fid = %d', $fid);      _flexifilter_save_filter_components($filter['components'], $fid, $pids_to_reuse);
     while ($row = db_fetch_object($result)) {  
       $pids_to_reuse[] = $row->pid;  
     }  
     sort($pids_to_reuse, SORT_NUMERIC);  
     $pid_root = _flexifilter_save_filter_components($filter['components'], $fid, $pids_to_reuse);  
     if (count($pids_to_reuse) > 0) {  
       db_query('DELETE FROM {flexifilters_parts} WHERE pid = '. implode($pids_to_reuse, ' OR pid = '), $fid);  
     }  
     db_query("UPDATE {flexifilters} SET label = '%s', description = '%s', pid_root = %d, advanced = %d, cache = %d WHERE fid = %d",  
       $label, $description, $pid_root, $advanced, $cache, $fid);  
   }  
   $existing_filters = flexifilter_get_filters(FALSE, TRUE);  
   if (isset($existing_filters[$fid]['enabled']) && isset($filter['enabled'])) {  
     if ($existing_filters[$fid]['enabled'] != $filter['enabled']) {  
       if ($filter['enabled']) {  
         if (flexifilter_get_number_enabled_filters() < FLEXIFILTER_MAX_FILTERS) {  
           $delta = flexifilter_get_unused_delta();  
           if ($delta !== FALSE) {  
             db_query('UPDATE {flexifilters} SET enabled = 1, delta = %d WHERE fid = %d', $delta, $fid);  
           }  
         }  
       }  
       else {  
         db_query('UPDATE {flexifilters} SET enabled = 0 WHERE fid = %d', $fid);  
       }  
     }  
595    }    }
596    return $fid;    return $fid;
597  }  }
# Line 679  function flexifilter_get_filter_by_delta Line 669  function flexifilter_get_filter_by_delta
669      $cache = array();      $cache = array();
670    }    }
671    if (!isset($cache[$delta]) || $reset) {    if (!isset($cache[$delta]) || $reset) {
672      $result = db_query('SELECT * FROM {flexifilters} WHERE enabled = 1 AND delta = %d', $delta);      $result = flexifilter_load(NULL, $delta);
673      if ($row = db_fetch_object($result)) {      if ($row = db_fetch_object($result)) {
674        $cache[$delta] = _flexifilter_filter_from_db_row($row, TRUE);        $cache[$delta] = _flexifilter_filter_from_db_row($row, TRUE);
675      }      }
# Line 691  function flexifilter_get_filter_by_delta Line 681  function flexifilter_get_filter_by_delta
681  }  }
682    
683  /**  /**
  * Helper function for _flexifilter_filter_from_db_row; recursively collects the component  
  * children of a flexifilter part.  
  */  
 function _flexifilter_reconstruct_components($root, &$components_flat, &$component_children) {  
   $component_list = flexifilter_get_component_list();  
   $components = array();  
   if (isset($component_children[$root])) {  
     foreach ($component_children[$root] as $child_pid) {  
       $child = $components_flat[$child_pid];  
       if ($child['type'] == FLEXIFILTER_PART_TYPE_COMPONENT) {  
         $class = $component_list[$child['class']];  
         $child_reconstructed = array(  
           'class' => $child['class'],  
           'settings' => unserialize($child['settings']),  
           'id' => $child['pid'],  
         );  
         if ($class['contains_components']) {  
           $child_reconstructed['settings']['components'] = _flexifilter_reconstruct_components($child_pid, $components_flat, $component_children);  
         }  
         if ($class['contains_condition']) {  
           $conditions = _flexifilter_reconstruct_conditions($child_pid, $components_flat, $component_children);  
           $child_reconstructed['settings']['condition'] = $conditions[0];  
         }  
         $components[] = $child_reconstructed;  
       }  
     }  
   }  
   return $components;  
 }  
   
 /**  
  * Helper function for _flexifilter_filter_from_db_row; recursively collects the condition  
  * children of a flexifilter part.  
  */  
 function _flexifilter_reconstruct_conditions($root, &$conditions_flat, &$condition_children) {  
   $condition_list = flexifilter_get_condition_list();  
   $conditions = array();  
   if (isset($condition_children[$root])) {  
     foreach ($condition_children[$root] as $child_pid) {  
       $child = $conditions_flat[$child_pid];  
       if ($child['type'] == FLEXIFILTER_PART_TYPE_CONDITION) {  
         if ($child['class'] == '') {  
           $child_reconstructed = array(  
             'class' => '',  
             'settings' => array(),  
           );  
         }  
         else {  
           $class = $condition_list[$child['class']];  
           $child_reconstructed = array(  
             'class' => $child['class'],  
             'settings' => unserialize($child['settings']),  
           );  
           if ($class['contains_conditions']) {  
             $child_reconstructed['settings']['conditions'] = _flexifilter_reconstruct_conditions($child_pid, $conditions_flat, $condition_children);  
           }  
         }  
         $conditions[] = $child_reconstructed;  
       }  
     }  
   }  
   return $conditions;  
 }  
   
 /**  
684   * Returns the number of enabled flexifilters. This is useful because only 128 are allowed to be enabled at one time.   * Returns the number of enabled flexifilters. This is useful because only 128 are allowed to be enabled at one time.
685   */   */
686  function flexifilter_get_number_enabled_filters($reset = FALSE) {  function flexifilter_get_number_enabled_filters($reset = FALSE) {

Legend:
Removed from v.1.16.2.4  
changed lines
  Added in v.1.16.2.5

  ViewVC Help
Powered by ViewVC 1.1.2