Exemple #1
0
 function launch()
 {
     global $configArray;
     global $interface;
     global $user;
     global $timer;
     $allCheckedOut = array();
     if ($configArray['Catalog']['offline']) {
         $interface->assign('offline', true);
     } else {
         $interface->assign('offline', false);
         //Determine which columns to show
         $ils = $configArray['Catalog']['ils'];
         $showOut = $ils == 'Horizon';
         $showRenewed = $ils == 'Horizon' || $ils == 'Millennium' || $ils == 'Sierra' || $ils == 'Koha';
         $showWaitList = $ils == 'Horizon';
         $interface->assign('showOut', $showOut);
         $interface->assign('showRenewed', $showRenewed);
         $interface->assign('showWaitList', $showWaitList);
         // Define sorting options
         $sortOptions = array('title' => 'Title', 'author' => 'Author', 'dueDate' => 'Due Date', 'format' => 'Format');
         if ($showWaitList) {
             $sortOptions['holdQueueLength'] = 'Wait List';
         }
         if ($showRenewed) {
             $sortOptions['renewed'] = 'Times Renewed';
         }
         $interface->assign('sortOptions', $sortOptions);
         $selectedSortOption = isset($_REQUEST['accountSort']) ? $_REQUEST['accountSort'] : 'dueDate';
         $interface->assign('defaultSortOption', $selectedSortOption);
         $page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1;
         $recordsPerPage = isset($_REQUEST['pagesize']) && is_numeric($_REQUEST['pagesize']) ? $_REQUEST['pagesize'] : 25;
         $interface->assign('recordsPerPage', $recordsPerPage);
         if (isset($_GET['exportToExcel'])) {
             $recordsPerPage = -1;
             $page = 1;
         }
         // Get My Transactions
         if ($this->catalog->status) {
             if ($user->cat_username) {
                 $patron = $this->catalog->patronLogin($user->cat_username, $user->cat_password);
                 $timer->logTime("Logged in patron to get checked out items.");
                 if (PEAR_Singleton::isError($patron)) {
                     PEAR_Singleton::raiseError($patron);
                 }
                 $patronResult = $this->catalog->getMyProfile($patron);
                 if (!PEAR_Singleton::isError($patronResult)) {
                     $interface->assign('profile', $patronResult);
                 }
                 $timer->logTime("Got patron profile to get checked out items.");
                 $libraryHoursMessage = Location::getLibraryHoursMessage($patronResult['homeLocationId']);
                 $interface->assign('libraryHoursMessage', $libraryHoursMessage);
                 //Get checked out titles from the ILS
                 $catalogTransactions = $this->catalog->getMyTransactions(1, -1, $selectedSortOption);
                 $timer->logTime("Loaded transactions from catalog.");
                 //Get checked out titles from OverDrive
                 require_once ROOT_DIR . '/Drivers/OverDriveDriverFactory.php';
                 $overDriveDriver = OverDriveDriverFactory::getDriver();
                 $overDriveCheckedOutItems = $overDriveDriver->getOverDriveCheckedOutItems($user);
                 //Get a list of eContent that has been checked out
                 require_once ROOT_DIR . '/Drivers/EContentDriver.php';
                 $driver = new EContentDriver();
                 $eContentCheckedOut = $driver->getMyTransactions($user);
                 $allCheckedOut = array_merge($catalogTransactions['transactions'], $overDriveCheckedOutItems['items'], $eContentCheckedOut['transactions']);
                 if (!PEAR_Singleton::isError($catalogTransactions)) {
                     $interface->assign('showNotInterested', false);
                     foreach ($allCheckedOut as $i => $curTitle) {
                         $sortTitle = isset($curTitle['title_sort']) ? $curTitle['title_sort'] : $curTitle['title'];
                         $sortKey = $sortTitle;
                         if ($selectedSortOption == 'title') {
                             $sortKey = $sortTitle;
                         } elseif ($selectedSortOption == 'author') {
                             $sortKey = (isset($curTitle['author']) ? $curTitle['author'] : "Unknown") . '-' . $sortTitle;
                         } elseif ($selectedSortOption == 'dueDate') {
                             if (isset($curTitle['duedate'])) {
                                 if (preg_match('/.*?(\\d{1,2})[-\\/](\\d{1,2})[-\\/](\\d{2,4}).*/', $curTitle['duedate'], $matches)) {
                                     $sortKey = $matches[3] . '-' . $matches[1] . '-' . $matches[2] . '-' . $sortTitle;
                                 } else {
                                     $sortKey = $curTitle['duedate'] . '-' . $sortTitle;
                                 }
                             }
                         } elseif ($selectedSortOption == 'format') {
                             $sortKey = (isset($curTitle['format']) ? $curTitle['format'] : "Unknown") . '-' . $sortTitle;
                         } elseif ($selectedSortOption == 'renewed') {
                             $sortKey = str_pad(isset($curTitle['renewCount']) ? $curTitle['renewCount'] : 0, 3, '0', STR_PAD_LEFT) . '-' . $sortTitle;
                         } elseif ($selectedSortOption == 'holdQueueLength') {
                             $sortKey = str_pad(isset($curTitle['holdQueueLength']) ? $curTitle['holdQueueLength'] : 0, 3, '0', STR_PAD_LEFT) . '-' . $sortTitle;
                         }
                         $itemBarcode = isset($curTitle['barcode']) ? $curTitle['barcode'] : null;
                         $itemId = isset($curTitle['itemid']) ? $curTitle['itemid'] : null;
                         if ($itemBarcode != null && isset($_SESSION['renew_message'][$itemBarcode])) {
                             $renewMessage = $_SESSION['renew_message'][$itemBarcode]['message'];
                             $renewResult = $_SESSION['renew_message'][$itemBarcode]['result'];
                             $curTitle['renewMessage'] = $renewMessage;
                             $curTitle['renewResult'] = $renewResult;
                             $allCheckedOut[$sortKey] = $curTitle;
                             unset($_SESSION['renew_message'][$itemBarcode]);
                             //$logger->log("Found renewal message in session for $itemBarcode", PEAR_LOG_INFO);
                         } else {
                             if ($itemId != null && isset($_SESSION['renew_message'][$itemId])) {
                                 $renewMessage = $_SESSION['renew_message'][$itemId]['message'];
                                 $renewResult = $_SESSION['renew_message'][$itemId]['result'];
                                 $curTitle['renewMessage'] = $renewMessage;
                                 $curTitle['renewResult'] = $renewResult;
                                 $allCheckedOut[$sortKey] = $curTitle;
                                 unset($_SESSION['renew_message'][$itemId]);
                                 //$logger->log("Found renewal message in session for $itemBarcode", PEAR_LOG_INFO);
                             } else {
                                 $allCheckedOut[$sortKey] = $curTitle;
                                 $renewMessage = null;
                                 $renewResult = null;
                             }
                         }
                         unset($allCheckedOut[$i]);
                     }
                     //Now that we have all the transactions we can sort them
                     if ($selectedSortOption == 'renewed' || $selectedSortOption == 'holdQueueLength') {
                         krsort($allCheckedOut);
                     } else {
                         ksort($allCheckedOut);
                     }
                     $interface->assign('transList', $allCheckedOut);
                     unset($_SESSION['renew_message']);
                 }
             }
         }
     }
     if (isset($_GET['exportToExcel']) && isset($allCheckedOut)) {
         $this->exportToExcel($allCheckedOut, $showOut, $showRenewed, $showWaitList);
     }
     $interface->assign('sidebar', 'MyAccount/account-sidebar.tpl');
     $interface->setTemplate('checkedout.tpl');
     $interface->setPageTitle('Checked Out Items');
     $interface->display('layout.tpl');
 }
Exemple #2
0
 function launch()
 {
     global $configArray;
     global $interface;
     global $user;
     //these actions are being moved to MyAccount/AJAX.php
     if (isset($_REQUEST['multiAction'])) {
         $multiAction = $_REQUEST['multiAction'];
         $locationId = isset($_REQUEST['location']) ? $_REQUEST['location'] : null;
         $cancelId = array();
         $type = 'update';
         $freeze = '';
         if ($multiAction == 'cancelSelected') {
             $type = 'cancel';
             //				$freeze = ''; // same as default setting.
         } elseif ($multiAction == 'freezeSelected') {
             //				$type = 'update'; // same as default setting.
             $freeze = 'on';
         } elseif ($multiAction == 'thawSelected') {
             //				$type = 'update'; // same as default setting.
             $freeze = 'off';
         }
         //			elseif ($multiAction == 'updateSelected'){ // same as default settings.
         //				$type = 'update';
         //				$freeze = '';
         //			}
         $result = $this->catalog->driver->updateHoldDetailed($user->password, $type, '', null, $cancelId, $locationId, $freeze);
         //			$interface->assign('holdResult', $result);
         //Redirect back here without the extra parameters.
         $redirectUrl = $configArray['Site']['path'] . '/MyAccount/Holds?accountSort=' . ($selectedSortOption = isset($_REQUEST['accountSort']) ? $_REQUEST['accountSort'] : 'title');
         header("Location: " . $redirectUrl);
         die;
     }
     $interface->assign('allowFreezeHolds', true);
     $ils = $configArray['Catalog']['ils'];
     $showPosition = $ils == 'Horizon' || ($ils = 'Koha');
     $showExpireTime = $ils == 'Horizon';
     $suspendRequiresReactivationDate = $ils == 'Horizon';
     $interface->assign('suspendRequiresReactivationDate', $suspendRequiresReactivationDate);
     $canChangePickupLocation = $ils != 'Koha';
     $interface->assign('canChangePickupLocation', $canChangePickupLocation);
     // Define sorting options
     $sortOptions = array('title' => 'Title', 'author' => 'Author', 'format' => 'Format', 'placed' => 'Date Placed', 'location' => 'Pickup Location', 'status' => 'Status');
     if ($showPosition) {
         $sortOptions['position'] = 'Position';
     }
     $interface->assign('sortOptions', $sortOptions);
     $selectedSortOption = isset($_REQUEST['accountSort']) ? $_REQUEST['accountSort'] : 'title';
     $interface->assign('defaultSortOption', $selectedSortOption);
     $profile = $this->catalog->getMyProfile($user);
     // TODO: getMyProfile called for second time. First time on index.php
     $libraryHoursMessage = Location::getLibraryHoursMessage($profile['homeLocationId']);
     $interface->assign('libraryHoursMessage', $libraryHoursMessage);
     $allowChangeLocation = $ils == 'Millennium' || $ils == 'Sierra';
     $interface->assign('allowChangeLocation', $allowChangeLocation);
     //$showPlacedColumn = ($ils == 'Horizon');
     //Horizon Web Services does not include data placed anymore
     $showPlacedColumn = false;
     $interface->assign('showPlacedColumn', $showPlacedColumn);
     $showDateWhenSuspending = $ils == 'Horizon';
     $interface->assign('showDateWhenSuspending', $showDateWhenSuspending);
     $interface->assign('showPosition', $showPosition);
     $interface->assign('showNotInterested', false);
     // Get My Transactions
     if ($configArray['Catalog']['offline']) {
         $interface->assign('offline', true);
     } else {
         $patron = null;
         if ($this->catalog->status) {
             if ($user->cat_username) {
                 $patron = $this->catalog->patronLogin($user->cat_username, $user->cat_password);
                 $patronResult = $this->catalog->getMyProfile($patron);
                 // TODO: getMyProfile called above already. Is this call necessary?
                 if (!PEAR_Singleton::isError($patronResult)) {
                     $interface->assign('profile', $patronResult);
                 }
                 $interface->assign('sortOptions', $sortOptions);
                 $selectedSortOption = isset($_REQUEST['accountSort']) ? $_REQUEST['accountSort'] : 'dueDate';
                 $interface->assign('defaultSortOption', $selectedSortOption);
                 $page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1;
                 $recordsPerPage = isset($_REQUEST['pagesize']) && is_numeric($_REQUEST['pagesize']) ? $_REQUEST['pagesize'] : 25;
                 $interface->assign('recordsPerPage', $recordsPerPage);
                 if (isset($_GET['exportToExcel'])) {
                     $recordsPerPage = -1;
                     $page = 1;
                 }
                 //Get Holds from the ILS
                 $ilsHolds = $this->catalog->getMyHolds($patron, 1, -1, $selectedSortOption);
                 if (PEAR_Singleton::isError($ilsHolds)) {
                     $ilsHolds = array();
                 }
                 //Get holds from OverDrive
                 require_once ROOT_DIR . '/Drivers/OverDriveDriverFactory.php';
                 $overDriveDriver = OverDriveDriverFactory::getDriver();
                 $overDriveHolds = $overDriveDriver->getOverDriveHolds($user);
                 //Get a list of eContent that has been checked out
                 require_once ROOT_DIR . '/Drivers/EContentDriver.php';
                 $driver = new EContentDriver();
                 $eContentHolds = $driver->getMyHolds($user);
                 $allHolds = array_merge_recursive($ilsHolds, $overDriveHolds, $eContentHolds);
                 /* pickUpLocations doesn't seem to be used by the Holds summary page. plb 1-26-2015
                 			$location = new Location();
                 			$pickupBranches = $location->getPickupBranches($patronResult, null);
                 			$locationList = array();
                 			foreach ($pickupBranches as $curLocation) {
                 				$locationList[$curLocation->locationId] = $curLocation->displayName;
                 			}
                 			$interface->assign('pickupLocations', $locationList); */
                 //Make sure available holds come before unavailable
                 $interface->assign('recordList', $allHolds['holds']);
                 //make call to export function
                 if (isset($_GET['exportToExcelAvailable']) || isset($_GET['exportToExcelUnavailable'])) {
                     if (isset($_GET['exportToExcelAvailable'])) {
                         $exportType = "available";
                     } else {
                         $exportType = "unavailable";
                     }
                     $this->exportToExcel($allHolds['holds'], $exportType, $showDateWhenSuspending, $showPosition, $showExpireTime);
                 }
             }
         }
         $interface->assign('patron', $patron);
     }
     //Load holds that have been entered offline
     if ($user) {
         require_once ROOT_DIR . '/sys/OfflineHold.php';
         $twoDaysAgo = time() - 48 * 60 * 60;
         $twoWeeksAgo = time() - 14 * 24 * 60 * 60;
         $offlineHoldsObj = new OfflineHold();
         $offlineHoldsObj->patronId = $user->id;
         $offlineHoldsObj->whereAdd("status = 'Not Processed' OR (status = 'Hold Placed' AND timeEntered >= {$twoDaysAgo}) OR (status = 'Hold Failed' AND timeEntered >= {$twoWeeksAgo})");
         // mysql has these functions as well: "status = 'Not Processed' OR (status = 'Hold Placed' AND timeEntered >= DATE_SUB(NOW(), INTERVAL 2 DAYS)) OR (status = 'Hold Failed' AND timeEntered >= DATE_SUB(NOW(), INTERVAL 2 WEEKS))");
         $offlineHolds = array();
         if ($offlineHoldsObj->find()) {
             while ($offlineHoldsObj->fetch()) {
                 //Load the title
                 $offlineHold = array();
                 require_once ROOT_DIR . '/RecordDrivers/MarcRecord.php';
                 $recordDriver = new MarcRecord($offlineHoldsObj->bibId);
                 if ($recordDriver->isValid()) {
                     $offlineHold['title'] = $recordDriver->getTitle();
                 }
                 $offlineHold['bibId'] = $offlineHoldsObj->bibId;
                 $offlineHold['timeEntered'] = $offlineHoldsObj->timeEntered;
                 $offlineHold['status'] = $offlineHoldsObj->status;
                 $offlineHold['notes'] = $offlineHoldsObj->notes;
                 $offlineHolds[] = $offlineHold;
             }
         }
         $interface->assign('offlineHolds', $offlineHolds);
     }
     $interface->setPageTitle('My Holds');
     $interface->assign('sidebar', 'MyAccount/account-sidebar.tpl');
     global $library;
     if (!$library->showDetailedHoldNoticeInformation) {
         $notification_method = '';
     } else {
         $notification_method = $profile['noticePreferenceLabel'] != 'Unknown' ? $profile['noticePreferenceLabel'] : '';
         if ($notification_method == 'Mail' && $library->treatPrintNoticesAsPhoneNotices) {
             $notification_method = 'Telephone';
         }
     }
     $interface->assign('notification_method', strtolower($notification_method));
     $interface->setTemplate('holds.tpl');
     //print_r($patron);
     $interface->display('layout.tpl');
 }
Exemple #3
0
 function launch()
 {
     global $configArray;
     global $interface;
     global $user;
     global $timer;
     if (isset($_REQUEST['multiAction'])) {
         $multiAction = $_REQUEST['multiAction'];
         $locationId = isset($_REQUEST['location']) ? $_REQUEST['location'] : null;
         $cancelId = array();
         $freeze = '';
         $type = 'update';
         if ($multiAction == 'cancelSelected') {
             $type = 'cancel';
             $freeze = '';
         } elseif ($multiAction == 'freezeSelected') {
             $type = 'update';
             $freeze = 'on';
         } elseif ($multiAction == 'thawSelected') {
             $type = 'update';
             $freeze = 'off';
         } elseif ($multiAction == 'updateSelected') {
             $type = 'update';
             $freeze = '';
         }
         $result = $this->catalog->driver->updateHoldDetailed($user->password, $type, '', null, $cancelId, $locationId, $freeze);
         $interface->assign('holdResult', $result);
         //Redirect back here without the extra parameters.
         $redirectUrl = $configArray['Site']['path'] . '/MyResearch/Holds?accountSort=' . ($selectedSortOption = isset($_REQUEST['accountSort']) ? $_REQUEST['accountSort'] : 'title');
         if (isset($_REQUEST['section'])) {
             $redirectUrl .= "&section=" . $_REQUEST['section'];
         }
         header("Location: " . $redirectUrl);
         die;
     }
     $interface->assign('allowFreezeHolds', true);
     $ils = $configArray['Catalog']['ils'];
     $showPosition = $ils == 'Horizon';
     $showExpireTime = $ils == 'Horizon';
     // Define sorting options
     $sortOptions = array('title' => 'Title', 'author' => 'Author', 'format' => 'Format', 'placed' => 'Date Placed', 'location' => 'Pickup Location', 'status' => 'Status');
     if ($showPosition) {
         $sortOptions['position'] = 'Position';
     }
     $interface->assign('sortOptions', $sortOptions);
     $selectedSortOption = isset($_REQUEST['accountSort']) ? $_REQUEST['accountSort'] : 'title';
     $interface->assign('defaultSortOption', $selectedSortOption);
     $profile = $this->catalog->getMyProfile($user);
     $libraryHoursMessage = Location::getLibraryHoursMessage($profile['homeLocationId']);
     $interface->assign('libraryHoursMessage', $libraryHoursMessage);
     $allowChangeLocation = $ils == 'Millennium';
     $interface->assign('allowChangeLocation', $allowChangeLocation);
     $showPlacedColumn = $ils == 'Horizon';
     $interface->assign('showPlacedColumn', $showPlacedColumn);
     $showDateWhenSuspending = $ils == 'Horizon';
     $interface->assign('showDateWhenSuspending', $showDateWhenSuspending);
     $interface->assign('showPosition', $showPosition);
     $interface->assign('showNotInterested', false);
     // Get My Transactions
     $patron = null;
     if ($this->catalog->status) {
         if ($user->cat_username) {
             $patron = $this->catalog->patronLogin($user->cat_username, $user->cat_password);
             $patronResult = $this->catalog->getMyProfile($patron);
             if (!PEAR_Singleton::isError($patronResult)) {
                 $interface->assign('profile', $patronResult);
             }
             $interface->assign('sortOptions', $sortOptions);
             $selectedSortOption = isset($_REQUEST['accountSort']) ? $_REQUEST['accountSort'] : 'dueDate';
             $interface->assign('defaultSortOption', $selectedSortOption);
             $page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1;
             $recordsPerPage = isset($_REQUEST['pagesize']) && is_numeric($_REQUEST['pagesize']) ? $_REQUEST['pagesize'] : 25;
             $interface->assign('recordsPerPage', $recordsPerPage);
             if (isset($_GET['exportToExcel'])) {
                 $recordsPerPage = -1;
                 $page = 1;
             }
             $result = $this->catalog->getMyHolds($patron, $page, $recordsPerPage, $selectedSortOption);
             if (!PEAR_Singleton::isError($result)) {
                 if (count($result) > 0) {
                     $location = new Location();
                     $pickupBranches = $location->getPickupBranches($patronResult, null);
                     $locationList = array();
                     foreach ($pickupBranches as $curLocation) {
                         $locationList[$curLocation->locationId] = $curLocation->displayName;
                     }
                     $interface->assign('pickupLocations', $locationList);
                     foreach ($result['holds'] as $sectionKey => $sectionData) {
                         if ($sectionKey == 'unavailable') {
                             $link = $_SERVER['REQUEST_URI'];
                             if (preg_match('/[&?]page=/', $link)) {
                                 $link = preg_replace("/page=\\d+/", "page=%d", $link);
                             } else {
                                 if (strpos($link, "?") > 0) {
                                     $link .= "&page=%d";
                                 } else {
                                     $link .= "?page=%d";
                                 }
                             }
                             if ($recordsPerPage != '-1') {
                                 $options = array('totalItems' => $result['numUnavailableHolds'], 'fileName' => $link, 'perPage' => $recordsPerPage, 'append' => false);
                                 $pager = new VuFindPager($options);
                                 $interface->assign('pageLinks', $pager->getLinks());
                             }
                         }
                         //Processing of freeze messages?
                         $timer->logTime("Got recordList of holds to display");
                     }
                     //Make sure available holds come before unavailable
                     $interface->assign('recordList', $result['holds']);
                     //make call to export function
                     if (isset($_GET['exportToExcelAvailable']) || isset($_GET['exportToExcelUnavailable'])) {
                         if (isset($_GET['exportToExcelAvailable'])) {
                             $exportType = "available";
                         } else {
                             $exportType = "unavailable";
                         }
                         $this->exportToExcel($result['holds'], $exportType, $showDateWhenSuspending, $showPosition, $showExpireTime);
                     }
                 } else {
                     $interface->assign('recordList', 'You do not have any holds');
                 }
             }
         }
     }
     $interface->assign('patron', $patron);
     $hasSeparateTemplates = $interface->template_exists('MyResearch/availableHolds.tpl');
     if ($hasSeparateTemplates) {
         $section = isset($_REQUEST['section']) ? $_REQUEST['section'] : 'available';
         $interface->assign('section', $section);
         if ($section == 'available') {
             $interface->setPageTitle('Available Holds');
             $interface->setTemplate('availableHolds.tpl');
         } else {
             $interface->setPageTitle('On Hold');
             $interface->setTemplate('unavailableHolds.tpl');
         }
     } else {
         $interface->setPageTitle('My Holds');
         $interface->setTemplate('holds.tpl');
     }
     //print_r($patron);
     $interface->display('layout.tpl');
 }
 function launch()
 {
     global $configArray;
     global $interface;
     global $user;
     global $timer;
     // Get My Transactions
     $oneOrMoreRenewableItems = false;
     if ($this->catalog->status) {
         if ($user->cat_username) {
             $patron = $this->catalog->patronLogin($user->cat_username, $user->cat_password);
             $timer->logTime("Logged in patron to get checked out items.");
             if (PEAR_Singleton::isError($patron)) {
                 PEAR_Singleton::raiseError($patron);
             }
             $patronResult = $this->catalog->getMyProfile($patron);
             if (!PEAR_Singleton::isError($patronResult)) {
                 $interface->assign('profile', $patronResult);
             }
             $timer->logTime("Got patron profile to get checked out items.");
             $libraryHoursMessage = Location::getLibraryHoursMessage($patronResult['homeLocationId']);
             $interface->assign('libraryHoursMessage', $libraryHoursMessage);
             // Define sorting options
             $sortOptions = array('title' => 'Title', 'author' => 'Author', 'dueDate' => 'Due Date', 'format' => 'Format', 'renewed' => 'Times Renewed', 'holdQueueLength' => 'Wish List');
             $interface->assign('sortOptions', $sortOptions);
             $selectedSortOption = isset($_REQUEST['accountSort']) ? $_REQUEST['accountSort'] : 'dueDate';
             $interface->assign('defaultSortOption', $selectedSortOption);
             $page = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1;
             $recordsPerPage = isset($_REQUEST['pagesize']) && is_numeric($_REQUEST['pagesize']) ? $_REQUEST['pagesize'] : 25;
             $interface->assign('recordsPerPage', $recordsPerPage);
             if (isset($_GET['exportToExcel'])) {
                 $recordsPerPage = -1;
                 $page = 1;
             }
             $result = $this->catalog->getMyTransactions($page, $recordsPerPage, $selectedSortOption);
             $timer->logTime("Loaded transactions from catalog.");
             if (!PEAR_Singleton::isError($result)) {
                 $link = $_SERVER['REQUEST_URI'];
                 if (preg_match('/[&?]page=/', $link)) {
                     $link = preg_replace("/page=\\d+/", "page=%d", $link);
                 } else {
                     if (strpos($link, "?") > 0) {
                         $link .= "&page=%d";
                     } else {
                         $link .= "?page=%d";
                     }
                 }
                 if ($recordsPerPage != '-1') {
                     $options = array('totalItems' => $result['numTransactions'], 'fileName' => $link, 'perPage' => $recordsPerPage, 'append' => false);
                     $pager = new VuFindPager($options);
                     $interface->assign('pageLinks', $pager->getLinks());
                 }
                 $interface->assign('showNotInterested', false);
                 foreach ($result['transactions'] as $i => $data) {
                     //Get Rating
                     $resource = new Resource();
                     $resource->source = 'VuFind';
                     $resource->record_id = $data['id'];
                     $resource->find(true);
                     $data['ratingData'] = $resource->getRatingData($user);
                     $result['transactions'][$i] = $data;
                     $itemBarcode = isset($data['barcode']) ? $data['barcode'] : null;
                     $itemId = isset($data['itemid']) ? $data['itemid'] : null;
                     if ($itemBarcode != null && isset($_SESSION['renew_message'][$itemBarcode])) {
                         $renewMessage = $_SESSION['renew_message'][$itemBarcode]['message'];
                         $renewResult = $_SESSION['renew_message'][$itemBarcode]['result'];
                         $data['renewMessage'] = $renewMessage;
                         $data['renewResult'] = $renewResult;
                         $result['transactions'][$i] = $data;
                         unset($_SESSION['renew_message'][$itemBarcode]);
                         //$logger->log("Found renewal message in session for $itemBarcode", PEAR_LOG_INFO);
                     } else {
                         if ($itemId != null && isset($_SESSION['renew_message'][$itemId])) {
                             $renewMessage = $_SESSION['renew_message'][$itemId]['message'];
                             $renewResult = $_SESSION['renew_message'][$itemId]['result'];
                             $data['renewMessage'] = $renewMessage;
                             $data['renewResult'] = $renewResult;
                             $result['transactions'][$i] = $data;
                             unset($_SESSION['renew_message'][$itemId]);
                             //$logger->log("Found renewal message in session for $itemBarcode", PEAR_LOG_INFO);
                         } else {
                             $renewMessage = null;
                             $renewResult = null;
                         }
                     }
                 }
                 $interface->assign('transList', $result['transactions']);
                 unset($_SESSION['renew_message']);
             }
         }
     }
     //Determine which columns to show
     $ils = $configArray['Catalog']['ils'];
     $showOut = $ils == 'Horizon';
     $showRenewed = $ils == 'Horizon' || $ils == 'Millennium';
     $showWaitList = $ils == 'Horizon';
     $interface->assign('showOut', $showOut);
     $interface->assign('showRenewed', $showRenewed);
     $interface->assign('showWaitList', $showWaitList);
     if (isset($_GET['exportToExcel'])) {
         $this->exportToExcel($result['transactions'], $showOut, $showRenewed, $showWaitList);
     }
     $interface->setTemplate('checkedout.tpl');
     $interface->setPageTitle('Checked Out Items');
     $interface->display('layout.tpl');
 }