function launch()
 {
     global $interface, $configArray;
     $results = '';
     if (isset($_POST['submit'])) {
         require_once ROOT_DIR . '/sys/OfflineCirculationEntry.php';
         //Store information into the database
         $login = $_REQUEST['login'];
         $interface->assign('lastLogin', $login);
         $password1 = $_REQUEST['password1'];
         $interface->assign('lastPassword1', $password1);
         /*
         $initials = $_REQUEST['initials'];
         $interface->assign('lastInitials', $initials);
         $password2 = $_REQUEST['password2'];
         $interface->assign('lastPassword2', $password2);
         */
         $loginInfoValid = true;
         if (strlen($login) == 0) {
             $results .= "Please enter your login";
             $loginInfoValid = false;
         }
         if (strlen($password1) == 0) {
             $results .= "Please enter your login password";
             $loginInfoValid = false;
         }
         /*if (strlen($initials) == 0){
         			$initials = $login;
         		}
         		if (strlen($password2) == 0){
         			$password2 = $password1;
         		}*/
         if ($loginInfoValid) {
             //$barcodesToCheckIn = $_REQUEST['barcodesToCheckIn'];
             $patronBarcode = $_REQUEST['patronBarcode'];
             $barcodesToCheckOut = $_REQUEST['barcodesToCheckOut'];
             //First store any titles that are being checked in
             /*if (strlen(trim($barcodesToCheckIn)) > 0){
             			$barcodesToCheckIn = preg_split('/[\\s\\r\\n]+/', $barcodesToCheckIn);
             			foreach ($barcodesToCheckIn as $barcode){
             				$offlineCirculationEntry = new OfflineCirculationEntry();
             				$offlineCirculationEntry->timeEntered = time();
             				$offlineCirculationEntry->itemBarcode = $barcode;
             				$offlineCirculationEntry->login = $login;
             				$offlineCirculationEntry->loginPassword = $password1;
             				$offlineCirculationEntry->initials = $initials;
             				$offlineCirculationEntry->initialsPassword = $password2;
             				$offlineCirculationEntry->type = 'Check In';
             				$offlineCirculationEntry->status = 'Not Processed';
             				$offlineCirculationEntry->insert();
             			}
             		}*/
             $numItemsCheckedOut = 0;
             if (strlen(trim($barcodesToCheckOut)) > 0 && strlen($patronBarcode) > 0) {
                 $userObj = new User();
                 $patronId = null;
                 $userObj->cat_password = $patronBarcode;
                 if ($userObj->find()) {
                     $userObj->fetch();
                     $patronId = $userObj->id;
                 }
                 $barcodesToCheckOut = preg_split('/[\\s\\r\\n]+/', $barcodesToCheckOut);
                 if (!is_array($barcodesToCheckOut)) {
                     $barcodesToCheckOut = array($barcodesToCheckOut);
                 }
                 foreach ($barcodesToCheckOut as $barcode) {
                     $barcode = trim($barcode);
                     if (strlen($barcode) > 0) {
                         $offlineCirculationEntry = new OfflineCirculationEntry();
                         $offlineCirculationEntry->timeEntered = time();
                         $offlineCirculationEntry->itemBarcode = $barcode;
                         $offlineCirculationEntry->login = $login;
                         $offlineCirculationEntry->loginPassword = $password1;
                         //$offlineCirculationEntry->initials = $initials;
                         //$offlineCirculationEntry->initialsPassword = $password2;
                         $offlineCirculationEntry->patronBarcode = $patronBarcode;
                         $offlineCirculationEntry->patronId = $patronId;
                         $offlineCirculationEntry->type = 'Check Out';
                         $offlineCirculationEntry->status = 'Not Processed';
                         if ($offlineCirculationEntry->insert()) {
                             $numItemsCheckedOut++;
                         } else {
                             $results .= "Could not check out item {$barcode} to patron {$patronBarcode}.<br/>";
                         }
                     }
                 }
             }
             $results .= "Successfully checked out {$numItemsCheckedOut} items to patron {$patronBarcode}.<br/>";
         }
     }
     $interface->assign('results', $results);
     $ils_name = $configArray['Catalog']['ils'] ? $configArray['Catalog']['ils'] : 'ILS';
     $interface->assign('ILSname', $ils_name);
     //Get view & load template
     $interface->setPageTitle('Offline Circulation');
     $interface->assign('sidebar', 'MyAccount/account-sidebar.tpl');
     $interface->setTemplate('offlineCirculation.tpl');
     $interface->display('layout.tpl', 'Circa');
 }
 public function launch()
 {
     global $interface;
     if (isset($_REQUEST['startDate'])) {
         $startDate = new DateTime($_REQUEST['startDate']);
     } else {
         $startDate = new DateTime();
         date_sub($startDate, new DateInterval('P1M'));
         // 1 month ago
     }
     if (isset($_REQUEST['endDate'])) {
         $endDate = new DateTime($_REQUEST['endDate']);
     } else {
         $endDate = new DateTime();
     }
     $endDate->setTime(23, 59, 59);
     //second before midnight
     $typesToInclude = isset($_REQUEST['typesToInclude']) ? $_REQUEST['typesToInclude'] : 'everything';
     $loginsToInclude = isset($_REQUEST['loginsToInclude']) ? $_REQUEST['loginsToInclude'] : '';
     $hideNotProcessed = isset($_REQUEST['hideNotProcessed']);
     $hideFailed = isset($_REQUEST['hideFailed']);
     $hideSuccess = isset($_REQUEST['hideSuccess']);
     $interface->assign('startDate', $startDate->getTimestamp());
     $interface->assign('endDate', $endDate->getTimestamp());
     $interface->assign('typesToInclude', $typesToInclude);
     $interface->assign('loginsToInclude', $loginsToInclude);
     $interface->assign('hideNotProcessed', $hideNotProcessed);
     $interface->assign('hideFailed', $hideFailed);
     $interface->assign('hideSuccess', $hideSuccess);
     $offlineCirculationEntries = array();
     $offlineCirculationEntryObj = new OfflineCirculationEntry();
     $offlineCirculationEntryObj->whereAdd("timeEntered >= " . $startDate->getTimestamp() . " AND timeEntered <= " . $endDate->getTimestamp());
     if ($typesToInclude == 'checkouts') {
         $offlineCirculationEntryObj->type = 'Check Out';
     } else {
         if ($typesToInclude == 'checkins') {
             $offlineCirculationEntryObj->type = 'Check In';
         }
     }
     if ($hideFailed) {
         $offlineCirculationEntryObj->whereAdd("status != 'Processing Failed'", 'AND');
     }
     if ($hideSuccess) {
         $offlineCirculationEntryObj->whereAdd("status != 'Processing Succeeded'", 'AND');
     }
     if ($hideNotProcessed) {
         $offlineCirculationEntryObj->whereAdd("status != 'Not Processed'", 'AND');
     }
     if (strlen($loginsToInclude) > 0) {
         $logins = explode(',', $loginsToInclude);
         $loginsToFind = '';
         foreach ($logins as $login) {
             $login = trim($login);
             if (strlen($loginsToFind) > 0) {
                 $loginsToFind .= ", ";
             }
             $loginsToFind .= "'{$login}'";
         }
         if (strlen($loginsToFind) > 0) {
             $offlineCirculationEntryObj->whereAdd("login IN ({$loginsToFind})", 'AND');
         }
     }
     $offlineCirculationEntryObj->find();
     $totalRecords = 0;
     $totalPassed = 0;
     $totalFailed = 0;
     $totalNotProcessed = 0;
     while ($offlineCirculationEntryObj->fetch()) {
         $offlineCirculationEntries[] = clone $offlineCirculationEntryObj;
         $totalRecords++;
         if ($offlineCirculationEntryObj->status == 'Not Processed') {
             $totalNotProcessed++;
         } elseif ($offlineCirculationEntryObj->status == 'Processing Succeeded') {
             $totalPassed++;
         } else {
             $totalFailed++;
         }
     }
     $interface->assign('totalRecords', $totalRecords);
     $interface->assign('totalPassed', $totalPassed);
     $interface->assign('totalFailed', $totalFailed);
     $interface->assign('totalNotProcessed', $totalNotProcessed);
     $interface->setPageTitle('Offline Circulation Report');
     $interface->assign('sidebar', 'MyAccount/account-sidebar.tpl');
     $interface->assign('offlineCirculation', $offlineCirculationEntries);
     $interface->setTemplate('offlineCirculationReport.tpl');
     $interface->display('layout.tpl');
 }