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 .= '
'; } 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 = '
Login to write a review
'; } $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 .= '
' . htmlentities($insurge_review[rev_title]) . '
'; $result_page .= '
A review of ' . $title . '
'; $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 = '
'; foreach ($rate_options as $val) { $checked_flag = ''; if ((float) $val == (float) $ratings_info_arr[value]) { $checked_flag = ' checked="checked"'; } $star_code .= '\n"; } $star_code .= ''; if ($show_label) { if (!$ratings_info_arr[count]) { $count_msg = 'No votes yet'; } else if ($ratings_info_arr[count] == 1) { $count_msg = '1 vote'; } else { $count_msg = $ratings_info_arr[count] . ' votes'; } $count_msg .= $login_string; $star_code .= '(' . $count_msg . ')'; } $star_code .= '
'; return $star_code; }