| 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'); |
| 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 |
} |
} |
| 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(); |
| 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 |
} |
} |
| 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 |
} |
} |
| 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 |
} |
} |
| 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) { |