public function getList($id) { if (is_numeric($id)) { $list = UserList::find($id); if (!empty($list)) { return View::make('user_lists.list', array('list' => $list)); } } return App::abort(404); }
function launch($msg = null) { global $interface; global $configArray; if (!($user = UserAccount::isLoggedIn())) { require_once ROOT_DIR . '/services/MyAccount/Login.php'; MyAccount_Login::launch(); exit; } // Save Data if (isset($_POST['submit'])) { $this->saveChanges($user); // After changes are saved, send the user back to an appropriate page; // either the list they were viewing when they started editing, or the // overall favorites list. if (isset($_REQUEST['list_id'])) { $nextAction = 'MyList/' . $_REQUEST['list_id']; } else { $nextAction = 'Home'; } header('Location: ' . $configArray['Site']['path'] . '/MyAccount/' . $nextAction); exit; } require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php'; $userList = new UserList(); $userList->id = $_REQUEST['list_id']; $userList->find(true); $interface->assign('list', $userList); require_once ROOT_DIR . '/RecordDrivers/GroupedWorkDriver.php'; $id = $_GET['id']; $groupedWorkDriver = new GroupedWorkDriver($id); if ($groupedWorkDriver->isValid) { $interface->assign('recordDriver', $groupedWorkDriver); } // Record ID $interface->assign('recordId', $id); // Retrieve saved information about record require_once ROOT_DIR . '/sys/LocalEnrichment/UserListEntry.php'; $userListEntry = new UserListEntry(); $userListEntry->groupedWorkPermanentId = $id; $userListEntry->listId = $_REQUEST['list_id']; $userListEntry->find(true); $interface->assign('listEntry', $userListEntry); $interface->assign('listFilter', $_GET['list_id']); $interface->setTemplate('editListTitle.tpl'); $interface->display('layout.tpl'); }
/** * 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'); } }
public function __construct($names) { if ($names != null) { foreach ($names as $name) { $this->_list [] = $name; } } } public function add($name) { $this->_list [] = $name; } public function find($filter) { $recs = array(); foreach ($this->_list as $user) { if ($filter->filter($user)) $recs [] = $user; } return $recs; } } $ul = new UserList(array("Andy", "Jack", "Lori", "Megan")); $f1 = $ul->find(new FindAfterStrategy("J")); print_r($f1); $f2 = $ul->find(new RandomStrategy()); print_r($f2); ?>
function addList() { if ($this->user) { if (strlen(trim($_REQUEST['title'])) == 0) { return new PEAR_Error('list_edit_name_required'); } $list = new UserList(); $list->title = $_REQUEST['title']; $list->description = $_REQUEST['desc']; $list->public = $_REQUEST['public']; $list->user_id = $this->user->id; $list->insert(); $list->find(); return $list->id; } else { return false; } }
function loadUserData() { global $user; global $interface; //Load profile information $catalog = CatalogFactory::getCatalogConnectionInstance(); $profile = $catalog->getMyProfile($user); if (!PEAR_Singleton::isError($profile)) { $interface->assign('profile', $profile); } //Load a list of lists $lists = array(); require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php'; $tmpList = new UserList(); $tmpList->user_id = $user->id; $tmpList->deleted = 0; $tmpList->orderBy("title ASC"); $tmpList->find(); if ($tmpList->N > 0) { while ($tmpList->fetch()) { $lists[$tmpList->id] = array('name' => $tmpList->title, 'url' => '/MyAccount/MyList/' . $tmpList->id, 'id' => $tmpList->id, 'numTitles' => $tmpList->num_titles()); } } $interface->assign('lists', $lists); // Get My Tags $tagList = $user->getTags(); $interface->assign('tagList', $tagList); if ($user->hasRole('opacAdmin') || $user->hasRole('libraryAdmin') || $user->hasRole('cataloging')) { $variable = new Variable(); $variable->name = 'lastFullReindexFinish'; if ($variable->find(true)) { $interface->assign('lastFullReindexFinish', date('m-d-Y H:i:s', $variable->value)); } else { $interface->assign('lastFullReindexFinish', 'Unknown'); } $variable = new Variable(); $variable->name = 'lastPartialReindexFinish'; if ($variable->find(true)) { $interface->assign('lastPartialReindexFinish', date('m-d-Y H:i:s', $variable->value)); } else { $interface->assign('lastPartialReindexFinish', 'Unknown'); } } }
static function getObjectStructure() { global $user; // Get All User Lists require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php'; $userLists = new UserList(); $userLists->public = 1; $userLists->orderBy('title asc'); $userLists->find(); $sourceLists = array(); $sourceLists[-1] = 'Generate from search term and filters'; while ($userLists->fetch()) { if ($userLists->num_titles() > 0) { $sourceLists[$userLists->id] = "({$userLists->id}) {$userLists->title} - {$userLists->num_titles()} titles"; } } // Get Structure for Sub-categories $browseSubCategoryStructure = SubBrowseCategories::getObjectStructure(); unset($browseSubCategoryStructure['weight']); unset($browseSubCategoryStructure['browseCategoryId']); $structure = array('id' => array('property' => 'id', 'type' => 'label', 'label' => 'Id', 'description' => 'The unique id of this association'), 'label' => array('property' => 'label', 'type' => 'text', 'label' => 'Label', 'description' => 'The label to show to the user', 'maxLength' => 50, 'required' => true), 'textId' => array('property' => 'textId', 'type' => 'text', 'label' => 'textId', 'description' => 'A textual id to identify the category', 'serverValidation' => 'validateTextId', 'maxLength' => 50), 'userId' => array('property' => 'userId', 'type' => 'label', 'label' => 'userId', 'description' => 'The User Id who created this category', 'default' => $user->id), 'sharing' => array('property' => 'sharing', 'type' => 'enum', 'values' => array('private' => 'Just Me', 'location' => 'My Home Branch', 'library' => 'My Home Library', 'everyone' => 'Everyone'), 'label' => 'Share With', 'description' => 'Who the category should be shared with', 'default' => 'everyone'), 'description' => array('property' => 'description', 'type' => 'html', 'label' => 'Description', 'description' => 'A description of the category.', 'hideInLists' => true), 'subBrowseCategories' => array('property' => 'subBrowseCategories', 'type' => 'oneToMany', 'label' => 'Browse Sub-Categories', 'description' => 'Browse Categories that will be displayed as sub-categories of this Browse Category', 'keyThis' => 'id', 'keyOther' => 'browseCategoryId', 'subObjectType' => 'SubBrowseCategories', 'structure' => $browseSubCategoryStructure, 'sortable' => true, 'storeDb' => true, 'allowEdit' => false, 'canEdit' => false), 'catalogScoping' => array('property' => 'catalogScoping', 'type' => 'enum', 'label' => 'Catalog Scoping', 'values' => array('unscoped' => 'Unscoped', 'library' => 'Current Library', 'location' => 'Current Location'), 'description' => 'What scoping should be used for this search scope?.', 'default' => 'unscoped'), 'searchTerm' => array('property' => 'searchTerm', 'type' => 'text', 'label' => 'Search Term', 'description' => 'A default search term to apply to the category', 'default' => '', 'hideInLists' => true), 'defaultFilter' => array('property' => 'defaultFilter', 'type' => 'textarea', 'label' => 'Default Filter(s)', 'description' => 'Filters to apply to the search by default.', 'hideInLists' => true, 'rows' => 3, 'cols' => 80), 'sourceListId' => array('property' => 'sourceListId', 'type' => 'enum', 'values' => $sourceLists, 'label' => 'Source List', 'description' => 'A public list to display titles from'), 'defaultSort' => array('property' => 'defaultSort', 'type' => 'enum', 'label' => 'Default Sort', 'values' => array('relevance' => 'Best Match', 'popularity' => 'Popularity', 'newest_to_oldest' => 'Newest First', 'oldest_to_newest' => 'Oldest First', 'author' => 'Author', 'title' => 'Title', 'user_rating' => 'Rating'), 'description' => 'The default sort for the search if none is specified', 'default' => 'relevance', 'hideInLists' => true), 'numTimesShown' => array('property' => 'numTimesShown', 'type' => 'label', 'label' => 'Times Shown', 'description' => 'The number of times this category has been shown to users'), 'numTitlesClickedOn' => array('property' => 'numTitlesClickedOn', 'type' => 'label', 'label' => 'Titles Clicked', 'description' => 'The number of times users have clicked on titles within this category')); // used by Object Editor to make a list of Browse Categories for Admin interface foreach ($structure as $fieldName => $field) { if (isset($field['property'])) { $field['propertyOld'] = $field['property'] . 'Old'; $structure[$fieldName] = $field; } } return $structure; }
function launch() { global $configArray; global $interface; global $user; // Fetch List object $listId = $_REQUEST['id']; require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php'; $list = new UserList(); $list->id = $listId; if (!$list->find(true)) { //TODO: Use the first list? $list = new UserList(); $list->user_id = $user->id; $list->public = false; $list->title = "My Favorites"; } // Ensure user has privileges to view the list if (!isset($list) || !$list->public && !UserAccount::isLoggedIn()) { require_once ROOT_DIR . '/services/MyAccount/Login.php'; MyAccount_Login::launch(); exit; } if (!$list->public && $list->user_id != $user->id) { //Allow the user to view if they are admin if ($user && $user->hasRole('opacAdmin')) { //Allow the user to view } else { $interface->assign('sidebar', 'MyAccount/account-sidebar.tpl'); $interface->setTemplate('invalidList.tpl'); $interface->display('layout.tpl'); return; } } if (isset($_SESSION['listNotes'])) { $interface->assign('notes', $_SESSION['listNotes']); unset($_SESSION['listNotes']); } //Perform an action on the list, but verify that the user has permission to do so. $userCanEdit = false; if ($user != false) { $userCanEdit = $user->canEditList($list); // if ($user->id == $list->user_id){ // $userCanEdit = true; // }elseif ($user->hasRole('opacAdmin')){ // $userCanEdit = true; // }elseif ($user->hasRole('libraryAdmin') || $user->hasRole('contentEditor')){ // $listUser = new User(); // $listUser->id = $list->user_id; // $listUser->find(true); // $listLibrary = Library::getLibraryForLocation($listUser->homeLocationId); // $userLibrary = Library::getLibraryForLocation($user->homeLocationId); // if ($userLibrary->libraryId == $listLibrary->libraryId){ // $userCanEdit = true; // } // } } if ($userCanEdit && (isset($_REQUEST['myListActionHead']) || isset($_REQUEST['myListActionItem']) || isset($_GET['delete']))) { if (isset($_REQUEST['myListActionHead']) && strlen($_REQUEST['myListActionHead']) > 0) { $actionToPerform = $_REQUEST['myListActionHead']; if ($actionToPerform == 'makePublic') { $list->public = 1; $list->update(); } elseif ($actionToPerform == 'makePrivate') { $list->public = 0; $list->update(); } elseif ($actionToPerform == 'saveList') { $list->title = $_REQUEST['newTitle']; $list->description = $_REQUEST['newDescription']; $list->defaultSort = $_REQUEST['defaultSort']; $list->update(); } elseif ($actionToPerform == 'deleteList') { $list->delete(); header("Location: {$configArray['Site']['path']}/MyAccount/Home"); die; } elseif ($actionToPerform == 'bulkAddTitles') { $notes = $this->bulkAddTitles($list); $_SESSION['listNotes'] = $notes; } } elseif (isset($_REQUEST['myListActionItem']) && strlen($_REQUEST['myListActionItem']) > 0) { $actionToPerform = $_REQUEST['myListActionItem']; if ($actionToPerform == 'deleteMarked') { //get a list of all titles that were selected $itemsToRemove = $_REQUEST['selected']; foreach ($itemsToRemove as $id => $selected) { //add back the leading . to get the full bib record $list->removeListEntry($id); } } elseif ($actionToPerform == 'deleteAll') { $list->removeAllListEntries(isset($_GET['tag']) ? $_GET['tag'] : null); } $list->update(); } elseif (isset($_REQUEST['delete'])) { $recordToDelete = $_REQUEST['delete']; $list->removeListEntry($recordToDelete); $list->update(); } //Redirect back to avoid having the parameters stay in the URL. header("Location: {$configArray['Site']['path']}/MyAccount/MyList/{$list->id}"); die; } // Send list to template so title/description can be displayed: $interface->assign('favList', $list); $interface->assign('listSelected', $list->id); // Load the User object for the owner of the list (if necessary): if ($user && $user->id == $list->user_id) { $listUser = $user; } elseif ($list->user_id != 0) { $listUser = new User(); $listUser->id = $list->user_id; if (!$listUser->fetch(true)) { $listUser = false; } } else { $listUser = false; } // Create a handler for displaying favorites and use it to assign // appropriate template variables: $interface->assign('allowEdit', $userCanEdit); // $favList = new FavoriteHandler($list->getListEntries($sort), $listUser, $list->id, $userCanEdit, $list->defaultSort); // signature change to below $favList = new FavoriteHandler($list, $listUser, $userCanEdit); $favList->assign(); $interface->assign('sidebar', 'MyAccount/account-sidebar.tpl'); $interface->setTemplate('list.tpl'); $interface->display('layout.tpl'); }
/** * 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 getSaveToListForm() { global $interface; global $user; $id = $_REQUEST['id']; $interface->assign('id', $id); require_once ROOT_DIR . '/sys/LocalEnrichment/UserListEntry.php'; //Get a list of all lists for the user $containingLists = array(); $nonContainingLists = array(); $userLists = new UserList(); $userLists->user_id = $user->id; $userLists->deleted = 0; $userLists->find(); while ($userLists->fetch()) { //Check to see if the user has already added the title to the list. $userListEntry = new UserListEntry(); $userListEntry->listId = $userLists->id; $userListEntry->groupedWorkPermanentId = $id; if ($userListEntry->find(true)) { $containingLists[] = array('id' => $userLists->id, 'title' => $userLists->title); } else { $nonContainingLists[] = array('id' => $userLists->id, 'title' => $userLists->title); } } $interface->assign('containingLists', $containingLists); $interface->assign('nonContainingLists', $nonContainingLists); $results = array('title' => 'Add To List', 'modalBody' => $interface->fetch("GroupedWork/save.tpl"), 'modalButtons' => "<span class='tool btn btn-primary' onclick='VuFind.GroupedWork.saveToList(\"{$id}\"); return false;'>Save To List</span>"); return json_encode($results); }
private function getBrowseCategoryResults($pageToLoad = 1) { $browseMode = $this->setBrowseMode(); if ($pageToLoad == 1 && !isset($_REQUEST['reload'])) { // only first page is cached global $memCache, $solrScope; $key = 'browse_category_' . $this->textId . '_' . $solrScope . '_' . $browseMode; $browseCategoryInfo = $memCache->get($key); if ($browseCategoryInfo != false) { return $browseCategoryInfo; } } $result = array('result' => false); $browseCategory = $this->getBrowseCategory(); if ($browseCategory) { global $interface; $interface->assign('browseCategoryId', $this->textId); $result['result'] = true; $result['textId'] = $browseCategory->textId; $result['label'] = $browseCategory->label; //$result['description'] = $browseCategory->description; // the description is not used anywhere on front end. plb 1-2-2015 // User List Browse Category // if ($browseCategory->sourceListId != null && $browseCategory->sourceListId > 0) { require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php'; $sourceList = new UserList(); $sourceList->id = $browseCategory->sourceListId; if ($sourceList->find(true)) { $records = $sourceList->getBrowseRecords(($pageToLoad - 1) * self::ITEMS_PER_PAGE, self::ITEMS_PER_PAGE); } else { $records = array(); } $result['searchUrl'] = '/MyAccount/MyList/' . $browseCategory->sourceListId; // Search Browse Category // } else { $this->searchObject = SearchObjectFactory::initSearchObject(); $defaultFilterInfo = $browseCategory->defaultFilter; $defaultFilters = preg_split('/[\\r\\n,;]+/', $defaultFilterInfo); foreach ($defaultFilters as $filter) { $this->searchObject->addFilter(trim($filter)); } //Set Sorting, this is actually slightly mangled from the category to Solr $this->searchObject->setSort($browseCategory->getSolrSort()); if ($browseCategory->searchTerm != '') { $this->searchObject->setSearchTerm($browseCategory->searchTerm); } //Get titles for the list $this->searchObject->clearFacets(); $this->searchObject->disableSpelling(); $this->searchObject->disableLogging(); $this->searchObject->setLimit(self::ITEMS_PER_PAGE); $this->searchObject->setPage($pageToLoad); $this->searchObject->processSearch(); $records = $this->searchObject->getBrowseRecordHTML(); $result['searchUrl'] = $this->searchObject->renderSearchUrl(); //TODO: Check if last page // Shutdown the search object $this->searchObject->close(); } if (count($records) == 0) { $records[] = $interface->fetch('Browse/noResults.tpl'); } $result['records'] = implode('', $records); $result['numRecords'] = count($records); } // Store first page of browse category in the MemCache if ($pageToLoad == 1) { global $memCache, $configArray, $solrScope; $key = 'browse_category_' . $this->textId . '_' . $solrScope . '_' . $browseMode; $memCache->add($key, $result, 0, $configArray['Caching']['browse_category_info']); } return $result; }
function setListEntryPositions() { $success = false; // assume failure $listId = $_REQUEST['listID']; $updates = $_REQUEST['updates']; if (ctype_digit($listId) && !empty($updates)) { global $user; require_once ROOT_DIR . '/sys/LocalEnrichment/UserList.php'; $list = new UserList(); $list->id = $listId; if ($list->find(true) && $user->canEditList($list)) { // list exists & user can edit require_once ROOT_DIR . '/sys/LocalEnrichment/UserListEntry.php'; $success = true; // assume success now foreach ($updates as $update) { $userListEntry = new UserListEntry(); $userListEntry->listId = $listId; $userListEntry->groupedWorkPermanentId = $update['id']; if ($userListEntry->find(true) && ctype_digit($update['newOrder'])) { // check entry exists already and the new weight is a number $userListEntry->weight = $update['newOrder']; if (!$userListEntry->update()) { $success = false; } } else { $success = false; } } } } return array('success' => $success); }