| 1 |
<?php |
<?php |
| 2 |
// $Id: nodequeue.module,v 1.76 2009/04/30 23:54:30 ezrag Exp $ |
// $Id: nodequeue.module,v 1.77 2009/05/01 00:00:05 ezrag Exp $ |
| 3 |
|
|
| 4 |
// -------------------------------------------------------------------------- |
// -------------------------------------------------------------------------- |
| 5 |
// Drupal Hooks |
// Drupal Hooks |
| 294 |
/** |
/** |
| 295 |
* Implementation of hook_views_api() |
* Implementation of hook_views_api() |
| 296 |
*/ |
*/ |
|
|
|
| 297 |
function nodequeue_views_api() { |
function nodequeue_views_api() { |
| 298 |
return array( |
return array( |
| 299 |
'api' => 2, |
'api' => 2, |
| 300 |
'path' => drupal_get_path('module', 'nodequeue') .'/includes/views', |
'path' => drupal_get_path('module', 'nodequeue') .'/includes/views', |
| 301 |
); |
); |
| 302 |
} |
} |
| 303 |
|
|
| 304 |
|
/** |
| 305 |
|
* Implementation of hook_form_$form-id_alter(). |
| 306 |
|
*/ |
| 307 |
|
function nodequeue_form_apachesolr_search_bias_form_alter(&$form, $form_state) { |
| 308 |
|
// setup for the form building |
| 309 |
|
$weights = drupal_map_assoc(array('21.0', '13.0', '8.0', '5.0', '3.0', '2.0', '1.0', '0.8', '0.5', '0.3', '0.2', '0.1')); |
| 310 |
|
$weights['0'] = t('Normal'); |
| 311 |
|
$queues = nodequeue_load_subqueues_by_queue(array_keys(nodequeue_get_all_qids())); |
| 312 |
|
|
| 313 |
|
// build the form |
| 314 |
|
$form['biasing']['nodequeue_boost'] = array( |
| 315 |
|
'#type' => 'fieldset', |
| 316 |
|
'#title' => t('Nodequeue Biasing'), |
| 317 |
|
'#weight' => -5, |
| 318 |
|
'#collapsible' => TRUE, |
| 319 |
|
'#collapsed' => TRUE, |
| 320 |
|
); |
| 321 |
|
$form['biasing']['nodequeue_boost']['nodequeue_apachesolr_boost'] = array( |
| 322 |
|
'#type' => 'item', |
| 323 |
|
'#description' => t("Specify to bias the search result when a node is in a queue. Any value except <em>Normal</em> will increase the socre for the given queue in the search results"), |
| 324 |
|
); |
| 325 |
|
foreach ($queues as $sqid => $queue) { |
| 326 |
|
$boost = variable_get("nodequeue_apachesolr_boost_$sqid", 0); |
| 327 |
|
// add in setting for each queue |
| 328 |
|
$form['biasing']['nodequeue_boost']['nodequeue_apachesolr_boost']["nodequeue_apachesolr_boost_$sqid"] = array( |
| 329 |
|
'#type' => 'select', |
| 330 |
|
'#title' => t('Weight for %title nodequeue', array('%title' => $queue->title)), |
| 331 |
|
'#options' => $weights, |
| 332 |
|
'#default_value' => $boost, |
| 333 |
|
); |
| 334 |
|
} |
| 335 |
|
} |
| 336 |
|
|
| 337 |
|
/** |
| 338 |
|
* Implementation of hook_apachesolr_update_index(). |
| 339 |
|
*/ |
| 340 |
|
function nodequeue_apachesolr_update_index(&$document, $node) { |
| 341 |
|
$queues = nodequeue_load_queues(array_keys(nodequeue_get_all_qids())); |
| 342 |
|
$subqueues = nodequeue_get_subqueues_by_node($queues, $node); |
| 343 |
|
|
| 344 |
|
nodequeue_set_subqueue_positions($subqueues, $node->nid); |
| 345 |
|
foreach ($subqueues as $sqid => $subqueue) { |
| 346 |
|
if (!empty($subqueue->position)) { |
| 347 |
|
$key = _nodequeue_solr_qid_key(); |
| 348 |
|
$document->$key = $sqid; |
| 349 |
|
} |
| 350 |
|
} |
| 351 |
|
} |
| 352 |
|
|
| 353 |
|
/** |
| 354 |
|
* return the apachesolr index key for group id |
| 355 |
|
*/ |
| 356 |
|
function _nodequeue_solr_qid_key() { |
| 357 |
|
$qid_key = array( |
| 358 |
|
'index_type' => 'sint', |
| 359 |
|
'multiple' => TRUE, |
| 360 |
|
'name' => "nodequeue", |
| 361 |
|
); |
| 362 |
|
|
| 363 |
|
return apachesolr_index_key($qid_key); |
| 364 |
|
} |
| 365 |
|
|
| 366 |
|
/** |
| 367 |
|
* Implementation of hook_apachesolr_modify_query(). |
| 368 |
|
*/ |
| 369 |
|
function nodequeue_apachesolr_modify_query($query, &$params, $caller) { |
| 370 |
|
$queues = nodequeue_load_subqueues_by_queue(array_keys(nodequeue_get_all_qids())); |
| 371 |
|
foreach ($queues as $sqid => $queue) { |
| 372 |
|
$boost = variable_get("nodequeue_apachesolr_boost_$sqid", 0); |
| 373 |
|
if (!empty($boost)) { |
| 374 |
|
$params['bq'][] = _nodequeue_solr_qid_key() . ":$sqid^$boost"; |
| 375 |
|
$params['facet.field'][] = _nodequeue_solr_qid_key(); |
| 376 |
|
} |
| 377 |
|
} |
| 378 |
|
} |
| 379 |
|
|
| 380 |
// -------------------------------------------------------------------------- |
// -------------------------------------------------------------------------- |
| 381 |
// Nodequeue Admin operations |
// Nodequeue Admin operations |
| 382 |
|
|
| 1999 |
* A keyed array of references to load. The key is the $qid and each value |
* A keyed array of references to load. The key is the $qid and each value |
| 2000 |
* is another array of references. |
* is another array of references. |
| 2001 |
*/ |
*/ |
| 2002 |
function nodequeue_load_subqueues_by_reference($references) { |
function nodequeue_load_subqueues_by_reference($references, $bypass_cache = FALSE) { |
| 2003 |
static $cache = array(); |
static $cache = array(); |
| 2004 |
$subqueues = array(); |
$subqueues = array(); |
| 2005 |
|
if ($bypass_cache) { |
| 2006 |
|
$cache = array(); |
| 2007 |
|
} |
| 2008 |
|
|
| 2009 |
// build strings for the query based upon the qids and references. |
// build strings for the query based upon the qids and references. |
| 2010 |
$keys = $values = array(); |
$keys = $values = array(); |
| 2187 |
|
|
| 2188 |
db_query("INSERT INTO {nodequeue_nodes} (sqid, qid, nid, position, timestamp) VALUES (%d, %d, %d, %d, %d)", $subqueue->sqid, $queue->qid, $nid, $subqueue->count + 1, time()); |
db_query("INSERT INTO {nodequeue_nodes} (sqid, qid, nid, position, timestamp) VALUES (%d, %d, %d, %d, %d)", $subqueue->sqid, $queue->qid, $nid, $subqueue->count + 1, time()); |
| 2189 |
$subqueue->count++; |
$subqueue->count++; |
| 2190 |
|
if (module_exists('apachesolr')) { |
| 2191 |
|
apachesolr_mark_node($nid); |
| 2192 |
|
} |
| 2193 |
} |
} |
| 2194 |
|
|
| 2195 |
/** |
/** |
| 2205 |
function nodequeue_subqueue_remove_node($sqid, $nid) { |
function nodequeue_subqueue_remove_node($sqid, $nid) { |
| 2206 |
if ($pos = nodequeue_get_subqueue_position($sqid, $nid)) { |
if ($pos = nodequeue_get_subqueue_position($sqid, $nid)) { |
| 2207 |
nodequeue_subqueue_remove($sqid, $pos); |
nodequeue_subqueue_remove($sqid, $pos); |
| 2208 |
|
if (module_exists('apachesolr')) { |
| 2209 |
|
apachesolr_mark_node($nid); |
| 2210 |
|
} |
| 2211 |
} |
} |
| 2212 |
} |
} |
| 2213 |
/** |
/** |
| 2376 |
function nodequeue_get_subqueues_by_node($queues, $node) { |
function nodequeue_get_subqueues_by_node($queues, $node) { |
| 2377 |
// Determine which subqueues are valid for each queue. |
// Determine which subqueues are valid for each queue. |
| 2378 |
$references= array(); |
$references= array(); |
| 2379 |
|
static $last_nid = 0; |
| 2380 |
foreach ($queues as $queue) { |
foreach ($queues as $queue) { |
| 2381 |
if ($result = nodequeue_api_subqueues($queue, $node)) { |
if ($result = nodequeue_api_subqueues($queue, $node)) { |
| 2382 |
$references[$queue->qid] = is_array($result) ? $result : array($result); |
$references[$queue->qid] = is_array($result) ? $result : array($result); |
| 2386 |
if (empty($references)) { |
if (empty($references)) { |
| 2387 |
return; |
return; |
| 2388 |
} |
} |
| 2389 |
|
// only allow the static cache to be used if the nid is the same as the last |
| 2390 |
return nodequeue_load_subqueues_by_reference($references); |
$subqueues = nodequeue_load_subqueues_by_reference($references, ($last_nid != $node->nid)); |
| 2391 |
|
$last_nid = $node->nid; |
| 2392 |
|
|
| 2393 |
|
return $subqueues; |
| 2394 |
} |
} |
| 2395 |
|
|
| 2396 |
/** |
/** |