235 lines
6.4 KiB
PHP
Executable File
235 lines
6.4 KiB
PHP
Executable File
<?php
|
|
|
|
|
|
function materio_search_api_ajax_search($page = 0){
|
|
$debug = false;
|
|
global $user, $base_url;
|
|
// TODO: set research path configurable
|
|
$search_path = "explore";
|
|
|
|
# execute search
|
|
$_GET['page'] = $page;
|
|
|
|
$keys = rawurldecode($_GET['keys']);
|
|
|
|
foreach(explode(' ', $keys) as $word){
|
|
$words[] = rawurlencode($word);
|
|
}
|
|
$keys_encoded = implode(' ', $words);
|
|
// dsm($words, 'words');
|
|
|
|
$path = $search_path . '/' . $keys;//. ($page ? '?page='.$page : '');
|
|
|
|
// check if request is ajax, if not rediret to search_api_page page with right keys
|
|
if (!$debug && (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) {
|
|
drupal_goto($path, array(), 301);
|
|
exit ;
|
|
}
|
|
|
|
// TODO: if no permission, redirect to home
|
|
|
|
# content type filter s
|
|
// $types = $_GET['types'];
|
|
if(isset($_GET['types'])){
|
|
# if user have access to filters;
|
|
|
|
foreach($_GET['types'] as $type => $value)
|
|
if($value == 'true')
|
|
$active_types[] = $type;
|
|
|
|
// if no filter checked we checked them all by default
|
|
if(!isset($active_types))
|
|
foreach($_GET['types'] as $type => $value)
|
|
$active_types[] = $type;
|
|
}else{
|
|
# if user have no access to filters
|
|
$index = search_api_index_load(variable_get('mainsearchindex', -1));
|
|
$indexed_bundles = $index->options['data_alter_callbacks']['search_api_alter_bundle_filter']['settings']['bundles'];
|
|
foreach ($indexed_bundles as $bundle) {
|
|
$active_types[] = $bundle;
|
|
}
|
|
}
|
|
|
|
user_save($user, array("data"=>array('materiosearchapi_bundlesfilter' => $active_types)));
|
|
|
|
if(isset($_GET['current_path'])){
|
|
// dsm($_GET['current_path'], '$_GET[current_path]');
|
|
// url() generates the prefix using hook_url_outbound_alter(). Instead of
|
|
// running the hook_url_outbound_alter() again here, extract the prefix
|
|
// from url().
|
|
url('', array('prefix' => &$prefix));
|
|
|
|
$cur_path = str_replace($base_url.base_path().$prefix, '', $_GET['current_path']);
|
|
// dsm($cur_path, 'cur_path');
|
|
|
|
$cur_is_search_path = strpos($cur_path, $search_path);
|
|
// dsm($matches, '$matches');
|
|
if($cur_is_search_path === false){
|
|
$rep = array(
|
|
"redirect" => $base_url.base_path().$prefix.$path,
|
|
);
|
|
drupal_json_output($rep);
|
|
exit;
|
|
}
|
|
}
|
|
|
|
// dsm($path, 'path');
|
|
// get results
|
|
menu_set_active_item($path);
|
|
$return = menu_execute_active_handler($path, FALSE);
|
|
|
|
//dsm($return, '$return');
|
|
|
|
if (is_int($return)) {
|
|
switch ($return) {
|
|
case MENU_NOT_FOUND :
|
|
drupal_add_http_header('Status', '404 Not Found');
|
|
break;
|
|
case MENU_ACCESS_DENIED :
|
|
drupal_add_http_header('Status', '403 Forbidden');
|
|
break;
|
|
case MENU_SITE_OFFLINE :
|
|
drupal_add_http_header('Status', '503 Service unavailable');
|
|
break;
|
|
}
|
|
} elseif (isset($return)) {
|
|
|
|
if (is_array($return)) {
|
|
$count = $return['results']['#results']['result count'];
|
|
$return = drupal_render($return);
|
|
// $return = theme($return['#theme'], $return);
|
|
}
|
|
|
|
$rep = array(
|
|
'path'=>$search_path.'/'.$keys_encoded,
|
|
'keys'=>$keys,
|
|
'keys_encoded'=>$keys_encoded,
|
|
'search_path'=>$search_path,
|
|
'return'=>$return,
|
|
'active_types'=>$active_types,
|
|
'title' => drupal_get_title(),
|
|
);
|
|
|
|
if(isset($count))
|
|
$rep['count'] = $count;
|
|
|
|
if ($debug) {
|
|
//dsm($rep, 'rep');
|
|
return "debug display";
|
|
}else{
|
|
drupal_json_output($rep);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
function materio_search_api_ajax_viewmode_change($vm){
|
|
// dsm($vm);
|
|
|
|
// global $user;
|
|
// // dsm($user, 'user');
|
|
|
|
// $entity_infos = entity_get_info();
|
|
// // dsm($entity_infos, 'entity_infos');
|
|
|
|
// if (in_array($vm, variable_get('availableviewmodes', array()))) {
|
|
// user_save($user, array("data"=>array('materiosearchapi_viewmode' => $vm)));
|
|
// $rep = array('statut'=>'saved');
|
|
// }else{
|
|
// $rep = array('statut'=>'viewmode not allowed');
|
|
// }
|
|
$_GET['page'] = 0;
|
|
$rep = _materio_search_api_change_viewmode($vm);
|
|
|
|
drupal_json_output($rep);
|
|
}
|
|
|
|
|
|
function materio_search_api_ajax_actuality($page = 0){
|
|
$debug = false;
|
|
|
|
$_GET['page'] = $page;
|
|
|
|
$path = 'actuality';
|
|
|
|
// check if request is ajax, if not rediret to search_api_page page with right keys
|
|
if (!$debug && (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')) {
|
|
drupal_goto($path, array(), 301);
|
|
exit ;
|
|
}
|
|
|
|
// if(isset($_GET['current_path'])){
|
|
// // dsm($_GET['current_path'], '$_GET[current_path]');
|
|
// // url() generates the prefix using hook_url_outbound_alter(). Instead of
|
|
// // running the hook_url_outbound_alter() again here, extract the prefix
|
|
// // from url().
|
|
// url('', array('prefix' => &$prefix));
|
|
|
|
// $cur_path = str_replace($base_url.base_path().$prefix, '', $_GET['current_path']);
|
|
// // dsm($cur_path, 'cur_path');
|
|
|
|
// $cur_is_search_path = strpos($cur_path, $search_path);
|
|
// // dsm($matches, '$matches');
|
|
// if($cur_is_search_path === false){
|
|
// $rep = array(
|
|
// "redirect" => $base_url.base_path().$prefix.$path,
|
|
// );
|
|
// drupal_json_output($rep);
|
|
// exit;
|
|
// }
|
|
// }
|
|
|
|
|
|
// get results
|
|
menu_set_active_item($path);
|
|
$return = menu_execute_active_handler($path, FALSE);
|
|
|
|
//dsm($return, '$return');
|
|
|
|
if (is_int($return)) {
|
|
switch ($return) {
|
|
case MENU_NOT_FOUND :
|
|
drupal_add_http_header('Status', '404 Not Found');
|
|
break;
|
|
case MENU_ACCESS_DENIED :
|
|
drupal_add_http_header('Status', '403 Forbidden');
|
|
break;
|
|
case MENU_SITE_OFFLINE :
|
|
drupal_add_http_header('Status', '503 Service unavailable');
|
|
break;
|
|
}
|
|
} elseif (isset($return)) {
|
|
|
|
if (is_array($return)) {
|
|
$return = drupal_render($return);
|
|
}
|
|
|
|
$rep = array(
|
|
'path' => $path,
|
|
'return'=>$return,
|
|
'title' => drupal_get_title(),
|
|
);
|
|
|
|
if ($debug) {
|
|
//dsm($rep, 'rep');
|
|
return "debug display";
|
|
}else{
|
|
drupal_json_output($rep);
|
|
}
|
|
}
|
|
}
|
|
|
|
function materio_search_api_ajax_node($nid){
|
|
global $user;
|
|
$viewmode = isset($user->data['materiosearchapi_viewmode']) ? $user->data['materiosearchapi_viewmode'] : variable_get('defaultviewmode', 'full');
|
|
|
|
if($nodeview = node_view(node_load($nid),$viewmode)){
|
|
$rep = array(
|
|
'nid'=>$nid,
|
|
'node' => drupal_render($nodeview),
|
|
);
|
|
drupal_json_output($rep);
|
|
}
|
|
} |