Пример #1
0
 /**
  * Add titles to a user list.
  *
  * Parameters:
  * <ul>
  * <li>username - The barcode of the user.  Can be truncated to the last 7 or 9 digits.</li>
  * <li>password - The pin number for the user. </li>
  * <li>listId   - The id of the list to add items to.</li>
  * <li>recordIds - The id of the record(s) to add to the list.</li>
  * <li>tags   - A comma separated string of tags to apply to the titles within the list. (optional)</li>
  * <li>notes  - descriptive text to apply to the titles.  Can be viewed while on the list.  (optional)</li>
  * </ul>
  *
  * Note: You may also provide the parameters to addTitlesToList and titles will be added to the list
  * after the list is created.
  *
  * Returns:
  * <ul>
  * <li>success - true if the account is valid and the titles could be added to the list, false if the username or password were incorrect or the list could not be created.</li>
  * <li>listId - the id of the list that titles were added to.</li>
  * <li>numAdded - the number of titles that were added to the list.</li>
  * </ul>
  *
  * Sample Call:
  * <code>
  * http://catalog.douglascountylibraries.org/API/ListAPI?method=createList&username=23025003575917&password=1234&title=Test+List&description=Test&public=0
  * </code>
  *
  * Sample Response:
  * <code>
  * {"result":{"success":true,"listId":"1688"}}
  * </code>
  */
 function addTitlesToList()
 {
     $username = $_REQUEST['username'];
     $password = $_REQUEST['password'];
     if (!isset($_REQUEST['listId'])) {
         return array('success' => false, 'message' => 'You must provide the listId to add titles to.');
     }
     $recordIds = array();
     if (!isset($_REQUEST['recordIds'])) {
         return array('success' => false, 'message' => 'You must provide one or more records to add tot he list.');
     } else {
         if (!is_array($_REQUEST['recordIds'])) {
             $recordIds[] = $_REQUEST['recordIds'];
         } else {
             $recordIds = $_REQUEST['recordIds'];
         }
     }
     global $user;
     $user = UserAccount::validateAccount($username, $password);
     if ($user && !PEAR_Singleton::isError($user)) {
         $list = new UserList();
         $list->id = $_REQUEST['listId'];
         $list->user_id = $user->id;
         if (!$list->find(true)) {
             return array('success' => false, 'message' => 'Unable to find the list to add titles to.');
         } else {
             $numAdded = 0;
             foreach ($recordIds as $id) {
                 $userListEntry = new UserListEntry();
                 $userListEntry->listId = $list->id;
                 $userListEntry->groupedWorkPermanentId = $id;
                 $existingEntry = false;
                 if ($userListEntry->find(true)) {
                     $existingEntry = true;
                 }
                 if (isset($_REQUEST['notes'])) {
                     $notes = $_REQUEST['notes'];
                 } else {
                     $notes = '';
                 }
                 $userListEntry->notes = $notes;
                 $userListEntry->dateAdded = time();
                 if ($existingEntry) {
                     $userListEntry->update();
                 } else {
                     $userListEntry->insert();
                 }
                 $numAdded++;
             }
             return array('success' => true, 'listId' => $list->id, 'numAdded' => $numAdded);
         }
     } else {
         return array('success' => false, 'message' => 'Login unsuccessful');
     }
 }
Пример #2
0
 function bulkAddTitles($list)
 {
     global $user;
     $numAdded = 0;
     $notes = array();
     $titlesToAdd = $_REQUEST['titlesToAdd'];
     $titleSearches[] = preg_split("/\\r\\n|\\r|\\n/", $titlesToAdd);
     foreach ($titleSearches[0] as $titleSearch) {
         $_REQUEST['lookfor'] = $titleSearch;
         $_REQUEST['type'] = 'Keyword';
         // Initialise from the current search globals
         $searchObject = SearchObjectFactory::initSearchObject();
         $searchObject->setLimit(1);
         $searchObject->init();
         $searchObject->clearFacets();
         $results = $searchObject->processSearch(false, false);
         if ($results['response'] && $results['response']['numFound'] >= 1) {
             $firstDoc = $results['response']['docs'][0];
             //Get the id of the document
             $id = $firstDoc['id'];
             $numAdded++;
             $userListEntry = new UserListEntry();
             $userListEntry->listId = $list->id;
             $userListEntry->groupedWorkPermanentId = $id;
             $existingEntry = false;
             if ($userListEntry->find(true)) {
                 $existingEntry = true;
             }
             $userListEntry->notes = '';
             $userListEntry->dateAdded = time();
             if ($existingEntry) {
                 $userListEntry->update();
             } else {
                 $userListEntry->insert();
             }
         } else {
             $notes[] = "Could not find a title matching " . $titleSearch;
         }
     }
     //Update solr
     $list->update();
     if ($numAdded > 0) {
         $notes[] = "Added {$numAdded} titles to the list";
     }
     return $notes;
 }
Пример #3
0
 function saveToList()
 {
     $result = array();
     global $user;
     if ($user === false) {
         $result['result'] = false;
         $result['message'] = 'Please login before adding a title to list.';
     } else {
         require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php';
         require_once ROOT_DIR . '/sys/LocalEnrichment/UserListEntry.php';
         $result['result'] = true;
         $id = $_REQUEST['id'];
         $listId = $_REQUEST['listId'];
         $notes = $_REQUEST['notes'];
         //Check to see if we need to create a list
         $userList = new UserList();
         $listOk = true;
         if (empty($listId)) {
             $userList->title = "My Favorites";
             $userList->user_id = $user->id;
             $userList->public = 0;
             $userList->description = '';
             $userList->insert();
         } else {
             $userList->id = $listId;
             if (!$userList->find(true)) {
                 $result['result'] = false;
                 $result['message'] = 'Sorry, we could not find that list in the system.';
                 $listOk = false;
             }
         }
         if ($listOk) {
             $userListEntry = new UserListEntry();
             $userListEntry->listId = $userList->id;
             $userListEntry->groupedWorkPermanentId = $id;
             $existingEntry = false;
             if ($userListEntry->find(true)) {
                 $existingEntry = true;
             }
             $userListEntry->notes = $notes;
             $userListEntry->dateAdded = time();
             if ($existingEntry) {
                 $userListEntry->update();
             } else {
                 $userListEntry->insert();
             }
         }
         $result['result'] = true;
         $result['message'] = 'This title was saved to your list successfully.';
     }
     return json_encode($result);
 }
Пример #4
0
 /**
  * Import Lists from the ILS
  *
  * @return array - an array of results including the names of the lists that were imported as well as number of titles.
  */
 function importListsFromIls()
 {
     require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php';
     global $user;
     $results = array('totalTitles' => 0, 'totalLists' => 0);
     $patronDump = $this->_getPatronDump($this->_getBarcode());
     //Get the page which contains a table with all lists in them.
     $listsPage = $this->_fetchPatronInfoPage($patronDump, 'mylists');
     //Get the actual table
     if (preg_match('/<table[^>]*?class="patFunc"[^>]*?>(.*?)<\\/table>/si', $listsPage, $listsPageMatches)) {
         $allListTable = $listsPageMatches[1];
         //Now that we have the table, get the actual list names and ids
         preg_match_all('/<tr[^>]*?class="patFuncEntry"[^>]*?>.*?<input type="checkbox" id ="(\\d+)".*?<a.*?>(.*?)<\\/a>.*?<td[^>]*class="patFuncDetails">(.*?)<\\/td>.*?<\\/tr>/si', $allListTable, $listDetails, PREG_SET_ORDER);
         for ($listIndex = 0; $listIndex < count($listDetails); $listIndex++) {
             $listId = $listDetails[$listIndex][1];
             $title = $listDetails[$listIndex][2];
             $description = str_replace('&nbsp;', '', $listDetails[$listIndex][3]);
             //Create the list (or find one that already exists)
             $newList = new UserList();
             $newList->user_id = $user->id;
             $newList->title = $title;
             if (!$newList->find(true)) {
                 $newList->description = $description;
                 $newList->insert();
             }
             $currentListTitles = $newList->getListTitles();
             //Get a list of all titles within the list to be imported
             $listDetailsPage = $this->_fetchPatronInfoPage($patronDump, 'mylists?listNum=' . $listId);
             //Get the table for the details
             if (preg_match('/<table[^>]*?class="patFunc"[^>]*?>(.*?)<\\/table>/si', $listDetailsPage, $listsDetailsMatches)) {
                 $listTitlesTable = $listsDetailsMatches[1];
                 //Get the bib numbers for the title
                 preg_match_all('/<input type="checkbox" name="(b\\d{1,7})".*?<span[^>]*class="patFuncTitle(?:Main)?">(.*?)<\\/span>/si', $listTitlesTable, $bibNumberMatches, PREG_SET_ORDER);
                 for ($bibCtr = 0; $bibCtr < count($bibNumberMatches); $bibCtr++) {
                     $bibNumber = $bibNumberMatches[$bibCtr][1];
                     $bibTitle = strip_tags($bibNumberMatches[$bibCtr][2]);
                     //Get the grouped work for the resource
                     require_once ROOT_DIR . '/sys/Grouping/GroupedWorkPrimaryIdentifier.php';
                     require_once ROOT_DIR . '/sys/Grouping/GroupedWork.php';
                     $primaryIdentifier = new GroupedWorkPrimaryIdentifier();
                     $groupedWork = new GroupedWork();
                     $primaryIdentifier->identifier = '.' . $bibNumber . $this->getCheckDigit($bibNumber);
                     $primaryIdentifier->type = 'ils';
                     $primaryIdentifier->joinAdd($groupedWork);
                     if ($primaryIdentifier->find(true)) {
                         //Check to see if this title is already on the list.
                         $resourceOnList = false;
                         foreach ($currentListTitles as $currentTitle) {
                             if ($currentTitle->groupedWorkPermanentId == $primaryIdentifier->permanent_id) {
                                 $resourceOnList = true;
                                 break;
                             }
                         }
                         if (!$resourceOnList) {
                             $listEntry = new UserListEntry();
                             $listEntry->groupedWorkPermanentId = $primaryIdentifier->permanent_id;
                             $listEntry->listId = $newList->id;
                             $listEntry->notes = '';
                             $listEntry->dateAdded = time();
                             $listEntry->insert();
                         }
                     } else {
                         //The title is not in the resources, add an error to the results
                         if (!isset($results['errors'])) {
                             $results['errors'] = array();
                         }
                         $results['errors'][] = "\"{$bibTitle}\" on list {$title} could not be found in the catalog and was not imported.";
                     }
                     $results['totalTitles']++;
                 }
             }
             $results['totalLists'] += 1;
         }
     }
     return $results;
 }
Пример #5
0
 function AddList()
 {
     global $user;
     $return = array();
     if ($user) {
         require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php';
         $title = isset($_REQUEST['title']) ? urldecode($_REQUEST['title']) : '';
         if (strlen(trim($title)) == 0) {
             $return['result'] = "false";
             $return['message'] = "You must provide a title for the list";
         } else {
             $list = new UserList();
             $list->title = $title;
             $list->user_id = $user->id;
             //Check to see if there is already a list with this id
             $existingList = false;
             if ($list->find(true)) {
                 $existingList = true;
             }
             $list->description = urldecode($_REQUEST['desc']);
             $list->public = $_REQUEST['public'];
             if ($existingList) {
                 $list->update();
             } else {
                 $list->insert();
             }
             if (isset($_REQUEST['recordId'])) {
                 $recordToAdd = urldecode($_REQUEST['recordId']);
                 require_once ROOT_DIR . '/sys/LocalEnrichment/UserListEntry.php';
                 //Check to see if the user has already added the title to the list.
                 $userListEntry = new UserListEntry();
                 $userListEntry->listId = $list->id;
                 $userListEntry->groupedWorkPermanentId = $recordToAdd;
                 if (!$userListEntry->find(true)) {
                     $userListEntry->dateAdded = time();
                     $userListEntry->insert();
                 }
             }
             $return['result'] = 'true';
             $return['newId'] = $list->id;
             if ($existingList) {
                 $return['message'] = "Updated list {$title} successfully";
             } else {
                 $return['message'] = "Created list {$title} successfully";
             }
         }
     } else {
         $return['result'] = "false";
         $return['message'] = "You must be logged in to create a list";
     }
     return $return;
 }