예제 #1
0
 /**
  * getSuggestions
  *
  * This method returns an array of strings matching the user's query for
  * display in the autocomplete box.
  *
  * @param string $query The user query
  *
  * @return array        The suggestions for the provided query
  * @access public
  */
 public function getSuggestions($query)
 {
     $tagList = array();
     $tag = new Tags();
     $query = $tag->escape($query);
     $tag->whereadd("lower(\"tag\") LIKE lower('{$query}%')");
     $tag->whereadd('"id" IN (SELECT DISTINCT "tag_id" FROM "resource_tags")');
     $tag->find();
     if ($tag->N) {
         while ($tag->fetch()) {
             $tagList[] = $tag->tag;
         }
     }
     return $tagList;
 }
예제 #2
0
 /**
  * Get tags associated with the current resource.
  *
  * @param int $limit Max. number of tags to return (0 = no limit)
  *
  * @return array
  * @access public
  */
 public function getTags($limit = 0)
 {
     $tagList = array();
     $query = 'SELECT MIN("tags"."id"), "tags"."tag", COUNT(*) as cnt ' . 'FROM "tags", "resource_tags"  ' . 'WHERE "tags"."id" = "resource_tags"."tag_id" ' . 'AND "tags"."id" IN (SELECT "resource_tags"."tag_id" ' . 'FROM "resource", "resource_tags" ' . 'WHERE "resource"."id" = "resource_tags"."resource_id" ' . 'AND "resource"."record_id" = ' . "'" . $this->escape($this->record_id) . "' " . 'AND "resource"."source" = ' . "'" . $this->escape($this->source) . "' " . ')' . 'GROUP BY "tags"."tag" ORDER BY cnt DESC, "tags"."tag"';
     $tag = new Tags();
     $tag->query($query);
     if ($tag->N) {
         while ($tag->fetch()) {
             $tagList[] = clone $tag;
             // Return prematurely if we hit the tag limit:
             if ($limit > 0 && count($tagList) >= $limit) {
                 return $tagList;
             }
         }
     }
     return $tagList;
 }
예제 #3
0
파일: User.php 프로젝트: bharatm/NDL-VuFind
 /**
  * Get a list of all tags generated by the user in favorites lists.  Note that
  * the returned list WILL NOT include tags attached to records that are not
  * saved in favorites lists.
  *
  * @param int $resourceId Filter for tags tied to a specific resource (null
  * for no filter).
  * @param int $listId     Filter for tags tied to a specific list (null for no
  * filter).
  *
  * @return array
  * @access public
  */
 public function getTags($resourceId = null, $listId = null)
 {
     $tagList = array();
     $sql = 'SELECT MIN("tags"."id"), "tags"."tag", ' . 'COUNT("resource_tags"."id") AS cnt ' . 'FROM "tags", "resource_tags", "user_resource", "resource" ' . 'WHERE "tags"."id" = "resource_tags"."tag_id" ' . 'AND "user_resource"."user_id" = ' . "'" . $this->escape($this->id) . "' " . 'AND "user_resource"."resource_id" = "resource"."id" ' . 'AND "resource_tags"."user_id" = ' . "'" . $this->escape($this->id) . "' " . 'AND "resource"."id" = "resource_tags"."resource_id" ' . 'AND "user_resource"."list_id" = "resource_tags"."list_id" ';
     if (!is_null($resourceId)) {
         $sql .= 'AND "resource"."record_id" = ' . "'" . $this->escape($resourceId) . "' ";
     }
     if (!is_null($listId)) {
         $sql .= 'AND "resource_tags"."list_id" = ' . "'" . $this->escape($listId) . "' ";
     }
     $sql .= 'GROUP BY "tags"."tag" ORDER BY "tag"';
     $tag = new Tags();
     $tag->query($sql);
     if ($tag->N) {
         while ($tag->fetch()) {
             $tagList[] = clone $tag;
         }
     }
     return $tagList;
 }
예제 #4
0
 /**
  * Get tags associated with the current resource that the current user added.
  *
  * @access  public
  * @param   int     $limit          Max. number of tags to return (0 = no limit)
  * @return  array
  */
 function getTagsForList($listId, $limit = 10)
 {
     //Get a reference to the scope we are in.
     global $library;
     global $user;
     $tagList = array();
     $query = "SELECT tags.id as id, tags.tag " . "FROM tags inner join resource_tags on tags.id = resource_tags.tag_id " . "WHERE resource_id = '{$this->id}' and list_id = '{$listId}'" . "ORDER BY tags.tag LIMIT 0, {$limit}";
     $tag = new Tags();
     $tag->query($query);
     if ($tag->N) {
         //Load all bad words.
         require_once ROOT_DIR . '/Drivers/marmot_inc/BadWord.php';
         $badWords = new BadWord();
         $badWordsList = $badWords->getBadWordExpressions();
         while ($tag->fetch()) {
             //Determine if the current user added the tag
             $userAddedThis = false;
             if ($user) {
                 $rTag = new Resource_tags();
                 $rTag->tag_id = $tag->id;
                 $rTag->user_id = $user->id;
                 $rTag->find();
                 if ($rTag->N > 0) {
                     $userAddedThis = true;
                 }
             }
             $tag->userAddedThis = $userAddedThis;
             //Filter the tags prior to display to censor bad words
             $okToAdd = true;
             if (!$userAddedThis) {
                 //The user will always see their own tags no matter how filthy.
                 foreach ($badWordsList as $badWord) {
                     if (preg_match($badWord, trim($tag->tag))) {
                         $okToAdd = false;
                         break;
                     }
                 }
             }
             if ($okToAdd) {
                 $tagList[] = clone $tag;
                 // Return prematurely if we hit the tag limit:
                 if ($limit > 0 && count($tagList) >= $limit) {
                     return $tagList;
                 }
             }
         }
     }
     return $tagList;
 }
예제 #5
0
 /**
  * Build an array of tag cloud information.
  *
  * @return array
  * @access private
  */
 private function _getTagCloud()
 {
     //global $interface;
     global $configArray;
     $tags = new Tags();
     // Specify different font sizes in descending order here
     $fontSizes = array(5, 4, 3, 2, 1);
     $nFonts = count($fontSizes);
     // no of different tags to display
     $RecLimit = 50;
     // Query to retrieve tags and their counts
     $query = 'SELECT "tags"."tag", COUNT("tag") as cnt ' . 'FROM "tags", "resource_tags" ' . 'WHERE "tags"."id" = "resource_tags"."tag_id" ' . 'GROUP BY "tags"."tag" ORDER BY cnt DESC, "tag" ' . "LIMIT {$RecLimit}";
     $tags->query($query);
     $actualRecs = $tags->N;
     // Create data array as
     // key = tag_name and value = tag_count
     //from the results returned by query
     $data = array();
     if ($actualRecs) {
         while ($tags->fetch()) {
             $data["{$tags->tag}"] = $tags->cnt;
         }
     } else {
         return;
     }
     $temp = $data;
     // sort array in alphabetical
     // order of its keys
     uksort($data, "strnatcasecmp");
     // Create arry which contains only
     // count of all tags
     $onlyCnt = array();
     foreach ($temp as $item) {
         $onlyCnt[] = $item;
     }
     // create array which will contain only
     // uniqe tag counts
     $DistinctValues = array($onlyCnt[0]);
     for ($i = 1; $i < count($onlyCnt); $i++) {
         if ($onlyCnt[$i] != $onlyCnt[$i - 1]) {
             $DistinctValues[] = $onlyCnt[$i];
         }
     }
     $cntDistinct = count($DistinctValues);
     // set step which will
     // decide when to change font size
     $step = 1;
     $mod = 0;
     if ($cntDistinct > $nFonts) {
         $step = (int) ($cntDistinct / $nFonts);
         $mod = $cntDistinct % $nFonts;
     }
     $distinctToFont = array();
     $fontIndex = 0;
     $stepCnt = 0;
     for ($i = 0; $i < $cntDistinct; $i++) {
         $distinctToFont["{$DistinctValues[$i]}"] = $fontSizes[$fontIndex];
         $stepCnt++;
         if ($mod && $nFonts - ($fontIndex + 1) == $mod) {
             $step++;
             $fontIndex++;
             $stepCnt = 0;
         }
         if ($stepCnt == $step) {
             $fontIndex++;
             $stepCnt = 0;
         }
     }
     foreach ($data as $key => $value) {
         $data[$key] = array("font" => $distinctToFont["{$value}"], "count" => $value);
     }
     return $data;
 }
예제 #6
0
 /**
  * Get a list of tags based on current GET parameters.
  *
  * @access  private
  * @param   string      $extra_where        Where clause to add to lookup query;
  *                                          it is caller's responsibility to
  *                                          make sure this is safe!!
  * @return  array                           Tag details.
  */
 private function getTagList($extra_where = '')
 {
     $tagList = array();
     $tag = new Tags();
     $sql = "SELECT tags.tag, COUNT(resource_tags.id) as cnt " . "FROM tags, resource_tags " . "WHERE tags.id = resource_tags.tag_id{$extra_where} GROUP BY tags.tag";
     switch ($_GET['findby']) {
         case 'alphabetical':
             $sql .= " ORDER BY tags.tag, cnt DESC";
             break;
         case 'popularity':
             $sql .= " ORDER BY cnt DESC, tags.tag";
             break;
         case 'recent':
             $sql .= " ORDER BY resource_tags.posted DESC, cnt DESC, tags.tag";
             break;
     }
     // Limit the size of our results based on the ini browse limit setting
     $browseLimit = isset($configArray['Browse']['result_limit']) ? $configArray['Browse']['result_limit'] : 100;
     $sql .= " LIMIT " . $browseLimit;
     $tag->query($sql);
     if ($tag->N) {
         while ($tag->fetch()) {
             $tagList[] = clone $tag;
         }
     }
     return $tagList;
 }
예제 #7
0
파일: Tag.php 프로젝트: bharatm/NDL-VuFind
 /**
  * Get a list of tags based on current GET parameters.
  *
  * @param string $extra_where Where clause to add to lookup query; it is the
  * caller's responsibility to make sure this is safe!!
  *
  * @return array              Tag details.
  * @access private
  */
 private function _getTagList($extra_where = '')
 {
     $tagList = array();
     $tag = new Tags();
     $sql = 'SELECT "tags"."tag", COUNT("resource_tags"."id") AS cnt ' . 'FROM "tags", "resource_tags" ' . 'WHERE "tags"."id" = "resource_tags"."tag_id"' . $extra_where . ' GROUP BY "tags"."tag"';
     switch ($_GET['findby']) {
         case 'alphabetical':
             $sql .= ' ORDER BY "tags"."tag", cnt DESC';
             break;
         case 'popularity':
             $sql .= ' ORDER BY cnt DESC, "tags"."tag"';
             break;
         case 'recent':
             $sql .= ' ORDER BY max("resource_tags"."posted") DESC, cnt DESC, ' . '"tags"."tag"';
             break;
     }
     // Limit the size of our results based on the ini browse limit setting
     $browseLimit = isset($configArray['Browse']['result_limit']) ? $configArray['Browse']['result_limit'] : 100;
     $sql .= " LIMIT " . $browseLimit;
     $tag->query($sql);
     if ($tag->N) {
         while ($tag->fetch()) {
             $tagList[] = clone $tag;
         }
     }
     return $tagList;
 }
예제 #8
0
 function getTags($resourceId = null, $listId = null)
 {
     require_once 'Resource_tags.php';
     require_once 'Tags.php';
     $tagList = array();
     $sql = "SELECT tags.id, tags.tag, COUNT(resource_tags.id) AS cnt " . "FROM tags INNER JOIN resource_tags on tags.id = resource_tags.tag_id " . "INNER JOIN resource on resource_tags.resource_id = resource.id WHERE " . "resource_tags.user_id = '{$this->id}' ";
     if (!is_null($resourceId)) {
         $sql .= "AND resource.record_id = '{$resourceId}' ";
     }
     if (!is_null($listId)) {
         $sql .= "AND resource_tags.list_id = '{$listId}' ";
     }
     $sql .= "GROUP BY tags.tag ORDER BY cnt DESC, tags.tag ASC";
     $tag = new Tags();
     $tag->query($sql);
     if ($tag->N) {
         while ($tag->fetch()) {
             $tagList[] = clone $tag;
         }
     }
     return $tagList;
 }