View source
<?php
define('TOP_N_LIMIT', 100);
function recommender_purge($recommenders) {
if (func_num_args() > 1) {
$recommenders = func_get_args();
}
else {
if (!is_array($recommenders)) {
$recommenders = array(
$recommenders,
);
}
}
foreach ($recommenders as $recommender) {
db_query("DELETE FROM {recommender_preference} WHERE recommender=:recommender", array(
':recommender' => $recommender,
));
db_query("DELETE FROM {recommender_similarity} WHERE recommender=:recommender", array(
':recommender' => $recommender,
));
db_query("DELETE FROM {recommender_prediction} WHERE recommender=:recommender", array(
':recommender' => $recommender,
));
}
}
function recommender_create_record($recommender, $description = NULL, $override = array()) {
$all_recommender_info = module_invoke_all('recommender_info');
if (isset($all_recommender_info[$recommender])) {
$recommender_info = $all_recommender_info[$recommender];
}
else {
return FALSE;
}
if (!isset($recommender_info['title']) || !isset($recommender_info['algorithm'])) {
return FALSE;
}
if ($description == NULL) {
$description = t('Compute recommendations: !recommender', array(
'!recommender' => $recommender_info['title'],
));
}
if (!empty($override)) {
$recommender_info = array_merge($recommender_info, $override);
}
return computing_create_record('recommender', $recommender_info['algorithm'], $description, array(
'ids1' => $recommender,
'inputjson' => drupal_json_encode($recommender_info),
));
}
function recommender_insert_rows($type, $recommender, $rows) {
$table_name = "recommender_{$type}";
$insert = db_insert($table_name)
->fields(array(
'recommender',
'source_id',
'target_id',
'score',
'updated',
));
foreach ($rows as $row) {
$insert
->values(array(
'recommender' => $recommender,
'source_id' => $row[0],
'target_id' => $row[1],
'score' => isset($row[2]) ? $row[2] : 1,
'updated' => isset($row[3]) ? $row[3] : time(),
));
}
$insert
->execute();
}
function recommender_precompute_mlt($mlt_delta, $nid_list) {
if (!module_exists('apachesolr_search')) {
return FALSE;
}
$block = apachesolr_search_mlt_block_load($mlt_delta);
if ($block) {
$env_id = !empty($block['mlt_env_id']) ? $block['mlt_env_id'] : '';
try {
$solr = apachesolr_get_solr($env_id);
foreach ($nid_list as $nid) {
$docs = apachesolr_search_mlt_suggestions($block, apachesolr_document_id($nid), $solr);
if (!empty($docs)) {
db_delete('recommender_similarity')
->condition('source_id', $nid)
->condition('recommender', $mlt_delta)
->execute();
$rows = array();
foreach ($docs as $doc) {
$rows[] = array(
$nid,
$doc->entity_id,
);
}
recommender_insert_rows('similarity', $mlt_delta, $rows);
}
}
} catch (Exception $e) {
watchdog('Apache Solr', nl2br(check_plain($e
->getMessage())), NULL, WATCHDOG_ERROR);
}
}
}
function recommender_permission() {
return array(
"administer recommender" => array(
'title' => t('Administer recommender'),
'description' => t('You need this permission for any Recommender API related operations.'),
),
);
}
function recommender_menu() {
$items = array();
$items['admin/config/search/recommender'] = array(
'title' => 'Recommender',
'description' => 'Configuration and trigger recommender modules',
'page callback' => 'system_admin_menu_block_page',
'access arguments' => array(
'administer site configuration',
),
'file' => 'system.admin.inc',
'file path' => drupal_get_path('module', 'system'),
);
$items['admin/config/search/recommender/admin'] = array(
'title' => 'Admin',
'description' => 'Configuration and trigger recommender modules',
'page callback' => 'drupal_get_form',
'page arguments' => array(
'recommender_settings_form',
),
'access arguments' => array(
'administer recommender',
),
'file' => 'recommender.admin.inc',
);
return $items;
}
function recommender_cron() {
}
function recommender_views_api() {
return array(
'api' => 3,
);
}
function recommender_default_view_template($view_name, $view_human_name, $view_description, $base_table, $base_entity_type, $base_entity_field, $argument_type, $app_name) {
$view = new view();
$view->name = $view_name;
$view->description = $view_description;
$view->tag = 'recommendation';
$view->base_table = $base_table;
$view->human_name = $view_human_name;
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = TRUE;
$handler = $view
->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = $view_human_name;
$handler->display->display_options['access']['type'] = 'none';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '5';
$handler->display->display_options['style_plugin'] = 'list';
$handler->display->display_options['row_plugin'] = 'fields';
$handler->display->display_options['relationships']['target_id']['id'] = 'target_id';
$handler->display->display_options['relationships']['target_id']['table'] = $base_table;
$handler->display->display_options['relationships']['target_id']['field'] = 'target_id';
$handler->display->display_options['relationships']['target_id']['required'] = 1;
$handler->display->display_options['relationships']['target_id']['base_entity_type'] = $base_entity_type;
$handler->display->display_options['fields'][$base_entity_field]['id'] = $base_entity_field;
$handler->display->display_options['fields'][$base_entity_field]['table'] = $base_entity_type;
$handler->display->display_options['fields'][$base_entity_field]['field'] = $base_entity_field;
$handler->display->display_options['fields'][$base_entity_field]['relationship'] = 'target_id';
$handler->display->display_options['fields'][$base_entity_field]['label'] = '';
$handler->display->display_options['fields'][$base_entity_field]['alter']['alter_text'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['alter']['make_link'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['alter']['absolute'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['alter']['external'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['alter']['replace_spaces'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['alter']['trim'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['alter']['nl2br'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['alter']['word_boundary'] = 1;
$handler->display->display_options['fields'][$base_entity_field]['alter']['ellipsis'] = 1;
$handler->display->display_options['fields'][$base_entity_field]['alter']['strip_tags'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['alter']['html'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['element_label_colon'] = 0;
$handler->display->display_options['fields'][$base_entity_field]['element_default_classes'] = 1;
$handler->display->display_options['fields'][$base_entity_field]['hide_empty'] = 1;
$handler->display->display_options['fields'][$base_entity_field]['empty_zero'] = 0;
if ($base_entity_type == 'node') {
$handler->display->display_options['fields']['title']['link_to_node'] = 1;
}
elseif ($base_entity_type == 'users') {
$handler->display->display_options['fields']['name']['link_to_user'] = 1;
$handler->display->display_options['fields']['name']['overwrite_anonymous'] = 0;
}
$handler->display->display_options['sorts']['score']['id'] = 'score';
$handler->display->display_options['sorts']['score']['table'] = $base_table;
$handler->display->display_options['sorts']['score']['field'] = 'score';
$handler->display->display_options['sorts']['score']['order'] = 'DESC';
$handler->display->display_options['arguments']['source_id']['id'] = 'source_id';
$handler->display->display_options['arguments']['source_id']['table'] = $base_table;
$handler->display->display_options['arguments']['source_id']['field'] = 'source_id';
$handler->display->display_options['arguments']['source_id']['default_action'] = 'default';
$handler->display->display_options['arguments']['source_id']['default_argument_type'] = $argument_type;
$handler->display->display_options['arguments']['source_id']['default_argument_skip_url'] = 0;
$handler->display->display_options['arguments']['source_id']['summary']['number_of_records'] = '0';
$handler->display->display_options['arguments']['source_id']['summary']['format'] = 'default_summary';
$handler->display->display_options['arguments']['source_id']['summary_options']['items_per_page'] = '25';
$handler->display->display_options['arguments']['source_id']['break_phrase'] = 0;
$handler->display->display_options['arguments']['source_id']['not'] = 0;
$handler->display->display_options['filters']['name']['id'] = 'name';
$handler->display->display_options['filters']['name']['table'] = 'recommender_app';
$handler->display->display_options['filters']['name']['field'] = 'name';
$handler->display->display_options['filters']['name']['value'] = array(
$app_name => $app_name,
);
$handler->display->display_options['filters']['score']['id'] = 'score';
$handler->display->display_options['filters']['score']['table'] = $base_table;
$handler->display->display_options['filters']['score']['field'] = 'score';
$handler->display->display_options['filters']['score']['operator'] = '>';
$handler->display->display_options['filters']['score']['value']['value'] = '0';
$handler = $view
->new_display('block', 'Block', 'block');
return $view;
}