/** * 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'); } }
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; }
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); }
/** * 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(' ', '', $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; }
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; }