get_reviews($user->uid, NULL, NULL, $num_reviews);
if ($reviews[total]) {
$i = 0;
$rev_bnums = array();
foreach ($reviews[reviews] as $insurge_review) {
$rev_arr[$i][rev_id] = $insurge_review[rev_id];
$rev_arr[$i][bnum] = $insurge_review[bnum];
$rev_arr[$i][uid] = $user->uid;
$rev_arr[$i][timestamp] = $insurge_review[rev_create_date];
$rev_arr[$i][rev_title] = $insurge_review[rev_title];
$rev_arr[$i][rev_body] = $insurge_review[rev_body];
if (!in_array($insurge_review[bnum], $rev_bnums)) { $rev_bnums[] = $insurge_review[bnum]; }
$i++;
}
}
$review_norev = '
You have not written any reviews yet.
';
$rev_bib_info = $locum->get_bib_items_arr($rev_bnums);
$review_display = theme('sopac_review', $user, NULL, $rev_arr, NULL, NULL, NULL, $review_norev, $rev_bib_info);
// Pull together the ratings
$ratings_arr_top = $insurge->get_rating_list($user->uid, NULL, $num_ratings, NULL, 'ORDER BY rating DESC, rate_date DESC');
$ratings_arr_new = $insurge->get_rating_list($user->uid, NULL, $num_ratings, NULL, 'ORDER BY rate_date DESC');
$ratings_chunk[nodata] = 'You have not rated any items yet.
';
$ratings_chunk[top][total] = $ratings_arr_top[total];
$ratings_chunk[top][ratings] = $ratings_arr_top[ratings];
$ratings_chunk[latest][total] = $ratings_arr_new[total];
$ratings_chunk[latest][ratings] = $ratings_arr_new[ratings];
$rate_bnums = array();
foreach ($ratings_arr_top[ratings] as $rate_arr) {
if (!in_array($rate_arr[bnum], $rate_bnums)) { $rate_bnums[] = $rate_arr[bnum]; }
}
foreach ($ratings_arr_new[ratings] as $rate_arr) {
if (!in_array($rate_arr[bnum], $rate_bnums)) { $rate_bnums[] = $rate_arr[bnum]; }
}
$ratings_chunk[bibs] = $locum->get_bib_items_arr($rate_bnums);
// Pull together the tags
$tag_arr = $insurge->get_tag_totals($user->uid, NULL, NULL, TRUE, $num_tags);
if (count($tag_arr)) {
foreach ($tag_arr as $tag_pair) {
$tags[$tag_pair[tag]] = $tag_pair[count];
}
$tag_cloud = theme_sopac_tag_cloud($tags, 'personal');
} else {
$tag_cloud = 'You have not tagged any items yet.
';
}
$result_page = theme('sopac_pat_overview', $review_display, $ratings_chunk, $tag_cloud);
return $result_page;
}
function sopac_ratings_page() {
global $user;
$insurge = new insurge_client;
$locum = new locum_client;
$page_limit = 15; // TODO make this configurable
$page = isset($_GET['page']) ? $_GET['page'] : 0;
$offset = ($page_limit * $page);
// Pull together the ratings
$ratings_arr = $insurge->get_rating_list($user->uid, NULL, $page_limit, $offset, 'ORDER BY rate_date DESC');
sopac_pager_init($ratings_arr[total], 0, $page_limit);
$rate_bnums = array();
foreach ($ratings_arr[ratings] as $rate_arr) {
if (!in_array($rate_arr[bnum], $rate_bnums)) { $rate_bnums[] = $rate_arr[bnum]; }
}
$ratings_arr[bibs] = $locum->get_bib_items_arr($rate_bnums);
$result_page = theme('sopac_ratings_page', $ratings_arr);
$result_page .= theme('pager', NULL, $page_limit, 0, NULL, 6);
return $result_page;
}
function sopac_tags_page_cloud() {
global $user;
$insurge = new insurge_client;
$tag_arr = $insurge->get_tag_totals($user->uid, NULL, NULL, TRUE, NULL);
foreach ($tag_arr as $tag_pair) {
$tags[$tag_pair[tag]] = $tag_pair[count];
}
if (count($tags)) {
$cloud = theme_sopac_tag_cloud($tags);
} else {
$cloud = 'You have not tagged any items yet.
';
}
return $cloud;
}
function sopac_tags_page_list() {
global $user;
$insurge = new insurge_client;
$tags_res = $insurge->get_tag_totals($user->uid, NULL, NULL, FALSE, NULL, NULL, 'ORDER BY tag ASC');
foreach ($tags_res as $tag_arr) {
$tags[$tag_arr[tag][0]][$tag_arr[tag]] = $tag_arr[count];
}
if (count($tags)) {
$result_page = theme('sopac_tags_page', $tags);
} else {
$result_page = 'You have not tagged any items yet.
';
}
return $result_page;
}
function theme_sopac_tag_block($block_type) {
global $user;
$insurge = new insurge_client();
switch($block_type) {
case 'overview':
$tag_arr = $insurge->get_tag_totals(NULL, NULL, NULL, TRUE, 100); // TODO make this amount configurable.
break;
case 'record':
$uri_arr = sopac_parse_uri();
$bnum = $uri_arr[1];
$bnum_arr[] = $bnum;
if ($_POST[tag_submit] == '1' && $user->uid && $bnum) {
if (trim($_POST[tags])) {
$insurge->submit_tags($user->uid, $bnum, trim($_POST[tags]));
}
}
if ($_GET[deltag] && $bnum && $user->uid) {
$insurge->delete_user_tag($user->uid, $_GET[deltag], $bnum);
$new_link = 'http://' . $_SERVER[HTTP_HOST] . '/' . $_GET[q];
header("Location: $new_link");
}
$tag_arr = $insurge->get_tag_totals(NULL, $bnum_arr);
$tag_arr_user = $insurge->get_tag_totals($user->uid, $bnum_arr, NULL, FALSE, NULL, NULL, 'ORDER BY tag ASC');
static $put_tag_form = 1;
static $put_personal_tag_list = 1;
break;
case 'personal':
$tag_arr = $insurge->get_tag_totals($user->uid, NULL, NULL, TRUE, 100); // TODO make this amount configurable.
break;
}
if ($user->uid){
if ($put_tag_form) {
$block_suffix = '
' . drupal_get_form('sopac_tag_form');
}
} else {
if ($put_tag_form) {
$block_suffix = '
Login to add tags.';
}
}
if ($user->uid && $put_personal_tag_list && count($tag_arr_user)) {
$block_suffix .= 'Your tags
';
$block_suffix .= '';
foreach ($tag_arr_user as $tag_user) {
$block_suffix .= '- ' . $tag_user[tag] . ' [x]
';
}
$block_suffix .= '
';
}
if (count($tag_arr)) {
foreach ($tag_arr as $tag_pair) {
$tags[$tag_pair[tag]] = $tag_pair[count];
}
$cloud = theme_sopac_tag_cloud($tags, $block_type);
} else {
$cloud = 'No tags, currently.';
}
$cloud .= $block_suffix;
return $cloud;
}
function sopac_user_tag_edit() {
global $user;
$pathinfo = explode('/', trim($_GET[q]));
$tag = $pathinfo[3];
if ($_GET[ref]) {
$form['#redirect'] = substr(urldecode($_GET[ref]), 1);
}
$form['tagform'] = array(
'#type' => 'fieldset',
'#title' => t('Change your tag "' . $tag . '" to something else'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
);
$form['tagform']['newtag'] = array(
'#type' => 'textfield',
'#title' => t('Enter new tag'),
'#size' => 42,
'#maxlength' => 255,
'#default_value' => $tag,
'#required' => TRUE,
);
$form['tagform']['submit'] = array(
'#type' => 'submit',
'#value' => t('Edit Tag'),
);
$form['tagform']['oldtag'] = array(
'#type' => 'hidden',
'#value' => $tag,
);
return $form;
}
function sopac_user_tag_edit_submit($form, &$form_state) {
global $user;
if ($user->uid) {
$insurge = new insurge_client;
$insurge->update_tag($form_state[values][oldtag], $form_state[values][newtag], $user->uid);
}
}
function sopac_user_tag_delete() {
global $user;
$insurge = new insurge_client;
$pathinfo = explode('/', trim($_GET[q]));
$tag = $pathinfo[3];
$tag_total_arr = $insurge->get_tag_totals($user->uid, NULL, $tag);
$tag_total = $tag_total_arr[0][count];
$tag_total_str = ($tag_total > 1) ? $tag_total . ' things' : $tag_total . ' thing';
drupal_set_message('You have tagged ' . $tag_total_str . ' with "' . $tag . '". If you delete this tag, it will be removed completely.', 'warning');
if ($_GET[ref]) {
$form['#redirect'] = substr(urldecode($_GET[ref]), 1);
}
$form['tagform'] = array(
'#type' => 'fieldset',
'#title' => t('Really delete "' . $tag . '" from your collection?'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
);
$form['tagform']['submit_y'] = array(
'#type' => 'submit',
'#value' => t('Yes'),
);
$form['tagform']['submit_n'] = array(
'#type' => 'submit',
'#value' => t('No'),
);
$form['tagform']['oldtag'] = array(
'#type' => 'hidden',
'#value' => $tag,
);
return $form;
}
function sopac_user_tag_delete_submit($form, &$form_state) {
global $user;
if (strtolower($form_state[values][op]) == 'yes') {
if ($user->uid && $form_state[values][oldtag]) {
$insurge = new insurge_client;
$insurge->delete_user_tag($user->uid, $form_state[values][oldtag]);
}
}
}
function sopac_user_tag_hitlist() {
global $user;
require_once('sopac_catalog.php');
$locum = new locum_client;
$insurge = new insurge_client;
$page_limit = variable_get('sopac_results_per_page', 20);
$page = isset($_GET['page']) ? $_GET['page'] : 0;
$offset = ($page_limit * $page);
$no_circ = $locum->csv_parser($locum_cfg[location_limits][no_request]);
$actions = sopac_parse_uri();
$tag = $actions[2];
$result_body = 'Items tagged with "' . $tag . '"
';
$bnum_arr = $insurge->get_tagged_items($user->uid, $tag, $page_limit, $offset);
sopac_pager_init($bnum_arr[total], 0, $page_limit);
$result_body .= $result_page .= theme('pager', NULL, $page_limit, 0, NULL, 6) . '
';
$hitnum = $page_offset + 1;
foreach ($bnum_arr[bnums] as $bnum) {
$locum_result = $locum->get_bib_item($bnum);
$item_status = $locum->get_item_status($bnum);
$locum_result[copies] = $item_status[copies];
$locum_result[avail_details] = $item_status[details];
$cover_img_url = $locum_result[cover_img];
if (!$cover_img_url) {
$cover_img_url = '/' . drupal_get_path('module', 'sopac') . '/images/nocover.png';
}
$result_body .= theme('sopac_results_hitlist', $hitnum, $cover_img_url, $locum_result, $locum->locum_config, $no_circ);
$hitnum++;
}
$result_body .= theme('pager', NULL, $page_limit, 0, NULL, 6);
return $result_body;
}
/**
* Returns the tag-addition form for adding tags to the system.
*
* @return array Drupal form array.
*/
function sopac_tag_form() {
$form['tagform'] = array(
'#type' => 'fieldset',
'#title' => t('Add tags '),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['tagform']['tags'] = array(
'#type' => 'textfield',
'#title' => t('Enter your tags'),
'#size' => 15,
'#maxlength' => 255,
);
$form['tagform']['submit'] = array(
'#type' => 'submit',
'#value' => t('Add Tags'),
'#attributes' => array('class' => 'tagsubmit'),
);
$form['tagform']['tag_submit'] = array(
'#type' => 'hidden',
'#value' => 1,
);
return $form;
}
function theme_sopac_tag_cloud($tags, $cloud_type = 'catalog', $min_size = 10, $max_size = 24, $wraplength = 19) {
if (!count($tags)) {
return 'No tags.';
}
// largest and smallest array values
$max_qty = max(array_values($tags));
$min_qty = min(array_values($tags));
// find the range of values
$spread = $max_qty - $min_qty;
if ($spread == 0) {
$spread = 1;
}
// set the font-size increment
$step = ($max_size - $min_size) / ($spread);
// loop through the tag array
foreach ($tags as $tag => $value) {
if ($cloud_type == 'personal') {
$link = '/user/tag/show/' . urlencode($tag);
} else {
$link = '/' . variable_get('sopac_url_prefix', 'cat/seek') . '/search/tags/' . urlencode($tag);
}
$size = round($min_size + (($value - $min_qty) * $step));
if ($spread == 1) { $size = $size + 2; }
// $disp_tag = htmlentities(wordwrap($tag, $wraplength, "-
-", 1));
$disp_tag = htmlentities($tag);
$cloud .= '' . $disp_tag . ' ';
}
return '' . $cloud . '
';
}
function sopac_review_page($page_type) {
global $user;
$locum = new locum_client;
$insurge = new insurge_client;
$page_limit = 5; // TODO make this configurable
$page = isset($_GET['page']) ? $_GET['page'] : 0;
$offset = ($page_limit * $page);
switch($page_type) {
case 'catalog':
$actions = sopac_parse_uri();
$bnum = $actions[1];
$bnum_arr[] = $bnum;
$item = $locum->get_bib_item($bnum);
$ratings = theme_sopac_get_rating_stars($bnum);
$reviews = $insurge->get_reviews(NULL, $bnum_arr, NULL, $page_limit, $offset);
sopac_pager_init($reviews[total], 0, $page_limit);
$title = 'Reviews for ' . ucwords($item[title]);
$no_rev_msg = 'No reviews have been written yet for ' . ucwords($item[title]) . '';
$i = 0;
foreach ($reviews[reviews] as $insurge_review) {
$rev_arr[$i][rev_id] = $insurge_review[rev_id];
$rev_arr[$i][bnum] = $insurge_review[bnum];
if ($insurge_review[uid]) { $rev_arr[$i][uid] = $insurge_review[uid]; }
$rev_arr[$i][timestamp] = $insurge_review[rev_create_date];
$rev_arr[$i][rev_title] = $insurge_review[rev_title];
$rev_arr[$i][rev_body] = $insurge_review[rev_body];
$i++;
}
if ($item[bnum]) {
if (!$insurge->check_reviewed($user->uid, $item[bnum]) && $user->uid) {
$rev_form = drupal_get_form('sopac_review_form', $item[bnum]);
} else if (!$user->uid) {
$rev_form = '';
}
$result_page = theme('sopac_review', $user, $title, $rev_arr, $page_type, $rev_form, $ratings, $no_rev_msg);
$result_page .= theme('pager', NULL, $page_limit, 0, NULL, 6);
} else {
$result_page = 'This record does not exist.';
}
break;
case 'personal':
$rev_uid = $user->uid;
$no_rev_msg = 'You have not submitted any reviews yet.';
$reviewer_name = $user->name;
case 'user':
$actions = sopac_parse_uri(FALSE);
$rev_uid = $rev_uid ? $rev_uid : $actions[2];
$rev_user = user_load(array('uid' => $rev_uid));
$no_rev_msg = $no_rev_msg ? $no_rev_msg : $rev_user->name . ' has not submitted any reviews yet.';
$reviewer_name = $reviewer_name ? $reviewer_name : $rev_user->name;
$reviews = $insurge->get_reviews($rev_uid, NULL, NULL, $page_limit, $offset);
sopac_pager_init($reviews[total], 0, $page_limit);
$title = 'Reviews by ' . $reviewer_name;
$i = 0;
$bib_item_arr = array();
foreach ($reviews[reviews] as $insurge_review) {
$locum_result = $locum->get_bib_items_arr(array($insurge_review[bnum]));
$bib_item_arr[(string) $insurge_review[bnum]] = $locum_result[$insurge_review[bnum]];
$rev_arr[$i][rev_id] = $insurge_review[rev_id];
$rev_arr[$i][bnum] = $insurge_review[bnum];
$rev_arr[$i][uid] = $rev_uid;
$rev_arr[$i][timestamp] = $insurge_review[rev_create_date];
$rev_arr[$i][rev_title] = $insurge_review[rev_title];
$rev_arr[$i][rev_body] = $insurge_review[rev_body];
$i++;
}
$result_page .= theme('sopac_review', $user, $title, $rev_arr, $page_type, $rev_form, $ratings, $no_rev_msg, $bib_item_arr);
$result_page .= theme('pager', NULL, $page_limit, 0, NULL, 6);
break;
case 'single':
$actions = sopac_parse_uri(FALSE);
$rev_id[] = $actions[2];
$reviews = $insurge->get_reviews(NULL, NULL, $rev_id);
sopac_pager_init($reviews[total], 0, $page_limit);
$no_rev_msg = 'This review does not exist.';
$i = 0;
foreach ($reviews[reviews] as $insurge_review) {
$bib_item_arr = $locum->get_bib_items_arr(array($insurge_review[bnum]));
$rev_arr[$i][rev_id] = $insurge_review[rev_id];
$rev_arr[$i][bnum] = $insurge_review[bnum];
$rev_arr[$i][uid] = $insurge_review[uid];
$rev_arr[$i][timestamp] = $insurge_review[rev_create_date];
$rev_arr[$i][rev_title] = $insurge_review[rev_title];
$rev_arr[$i][rev_body] = $insurge_review[rev_body];
$i++;
}
$result_page = theme('sopac_review', $user, $title, $rev_arr, $page_type, $rev_form, $ratings, $no_rev_msg, $bib_item_arr);
break;
}
return ''. t($result_page) .'
';
}
function sopac_review_form() {
global $user;
$pathinfo = explode('/', trim($_GET[q]));
if ($pathinfo[1] == 'edit') {
$title = 'Edit this Review';
$insurge = new insurge_client;
$rev_id = $pathinfo[2];
$insurge_review = $insurge->get_reviews($user->uid, NULL, array($rev_id));
$review = $insurge_review[reviews][0];
$collapsible = FALSE;
$collapsed = FALSE;
$form_type = 'edit';
$bnum = $review[bnum];
$form['#redirect'] = substr(urldecode($_GET[ref]), 1);
} else {
$title = 'Write a Review!';
$args = func_get_args();
$collapsible = TRUE;
$collapsed = TRUE;
$form_type = 'new';
$bnum = $args[1];
}
$form['revform'] = array(
'#type' => 'fieldset',
'#title' => t($title),
'#collapsible' => $collapsible,
'#collapsed' => $collapsed,
);
$form['revform']['rev_title'] = array(
'#type' => 'textfield',
'#title' => t('Enter a title for your review'),
'#size' => 30,
'#required' => TRUE,
'#maxlength' => 254,
'#default_value' => $review[rev_title],
);
$form['revform']['rev_body'] = array(
'#type' => 'textarea',
'#title' => t('Your review'),
'#default_value' => $review[rev_body],
'#required' => TRUE,
'#rows' => 15,
);
$form['revform']['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit your Review'),
);
$form['revform']['form_type'] = array(
'#type' => 'hidden',
'#value' => $form_type,
);
$form['revform']['rev_bnum'] = array(
'#type' => 'hidden',
'#value' => $bnum,
);
if ($rev_id) {
$form['revform']['rev_id'] = array(
'#type' => 'hidden',
'#value' => $rev_id,
);
}
return $form;
}
function sopac_review_form_submit($form, &$form_state) {
global $user;
if ($user->uid) {
$insurge = new insurge_client;
if ($form_state[values][form_type] == 'edit') {
$insurge->update_review($user->uid, $form_state[values][rev_id], $form_state[values][rev_title], $form_state[values][rev_body]);
} else if ($form_state[values][form_type] == 'new') {
$insurge->submit_review($user->uid, $form_state[values][rev_bnum], $form_state[values][rev_title], $form_state[values][rev_body]);
}
}
}
function theme_sopac_review_block($block_type) {
global $user;
$max_shown = 10; // TODO make this configurable
$uri = sopac_parse_uri();
// get_reviews($uid = NULL, $bnum_arr = NULL, $rev_id_arr = NULL, $limit = 10, $offset = 0, $order = 'ORDER BY rev_create_date DESC')
$insurge = new insurge_client;
$locum = new locum_client;
switch ($block_type) {
case 'personal':
$reviews = $insurge->get_reviews($user->uid, NULL, NULL, $max_shown);
$no_rev = 'You have not written any reviews yet.';
break;
case 'record':
$bnum_arr[] = $uri[1];
$locum_result = $locum->get_bib_item($uri[1]);
$reviews = $insurge->get_reviews(NULL, $bnum_arr, NULL, $max_shown);
$no_rev = 'No reviews have been written yet for ' . $locum_result[title] . '.';
break;
case 'overview':
default:
$reviews = $insurge->get_reviews(NULL, NULL, NULL, $max_shown);
$no_rev = 'No reviews have been written yet.';
break;
}
$result_page = '';
if (count($reviews[reviews])) {
foreach ($reviews[reviews] as $insurge_review) {
$locum_result = $locum->get_bib_item($insurge_review[bnum]);
$title_arr = explode(':', htmlentities($locum_result[title]));
$title = trim($title_arr[0]);
$review_link = '/review/view/' . $insurge_review[rev_id];
$item_link = '/' . variable_get('sopac_url_prefix', 'cat/seek') . '/record/' . $insurge_review[bnum];
$result_page .= '';
$result_page .= '
';
$result_page .= '
';
$result_page .= "
\n";
}
} else {
$result_page = $no_rev;
}
return $result_page;
}
function sopac_delete_review_form() {
global $user;
$pathinfo = explode('/', trim($_GET[q]));
$rev_id = $pathinfo[2];
$form['#redirect'] = substr(urldecode($_GET[ref]), 1);
$form['revform'] = array(
'#type' => 'fieldset',
'#title' => t('Do you really want to delete this review?'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
);
$form['revform']['submit_y'] = array(
'#type' => 'submit',
'#value' => t('Yes'),
);
$form['revform']['submit_n'] = array(
'#type' => 'submit',
'#value' => t('No'),
);
$form['revform']['rev_id'] = array(
'#type' => 'hidden',
'#value' => $rev_id,
);
return $form;
}
function sopac_delete_review_form_submit($form, &$form_state) {
global $user;
if (strtolower($form_state[values][op]) == 'yes') {
$insurge = new insurge_client;
$insurge->delete_review($user->uid, $form_state[values][rev_id]);
}
}
/**
* Returns the HTML and JS code for the ratings widget for $bnum
*
* @param object $user Drupal user object
* @param int $bnum Bib number
* @param float $rating Rating value override
* @param boolean $show_label Displays the vote count
* @param boolean $post_redirect Redirect the page back on itself after form submit. Useful for lists.
* @return string HTML/JS widget
*/
function theme_sopac_get_rating_stars($bnum, $rating = NULL, $show_label = TRUE, $post_redirect = FALSE, $id = 'default') {
global $user;
// Load Required JS libraries
drupal_add_js(drupal_get_path('module', 'sopac') .'/js/jquery.rating.js');
$insurge = new insurge_client;
$rate_options = array('0.5', '1.0', '1.5', '2.0', '2.5', '3.0', '3.5', '4.0', '4.5', '5.0');
if ($_POST[$id . '_rating_submit_' . $bnum] && $user->uid) {
$insurge = new insurge_client;
$insurge->submit_rating($user->uid, $bnum, $_POST[$id . '_bib_rating_' . $bnum]);
if ($post_redirect) { header('Location: ' . $_SERVER[REQUEST_URI]); }
}
if (!$user->uid) {
$disable_flag = ' disabled="disabled" ';
$login_string = ' - Login to add yours';
}
$ratings_info_arr = $insurge->get_rating($bnum);
if ($rating) {
$ratings_info_arr[value] = $rating;
}
$star_code =
'