Пример #1
0
 function getAvailability()
 {
     global $configArray;
     if ($this->availability == null) {
         $this->availability = array();
         require_once ROOT_DIR . '/sys/eContent/EContentAvailability.php';
         $eContentAvailability = new EContentAvailability();
         $eContentAvailability->recordId = $this->id;
         $eContentAvailability->find();
         while ($eContentAvailability->fetch()) {
             $this->availability[] = clone $eContentAvailability;
         }
         if (strcasecmp($this->source, "OverDrive") == 0) {
             require_once ROOT_DIR . '/Drivers/OverDriveDriverFactory.php';
             $driver = OverDriveDriverFactory::getDriver();
             //echo("Loading availability from overdrive, part of " . count($this->availability) . " collections");
             foreach ($this->availability as $key => $tmpAvailability) {
                 //echo("\r\n{$tmpAvailability->libraryId}");
                 //Get updated availability for each library from overdrive
                 $productKey = $configArray['OverDrive']['productsKey'];
                 if ($tmpAvailability->libraryId != -1) {
                     $library = new Library();
                     $library->libraryId = $tmpAvailability->libraryId;
                     $library->find(true);
                     $productKey = $library->overdriveAdvantageProductsKey;
                 }
                 $realtimeAvailability = $driver->getProductAvailability($this->externalId, $productKey);
                 $tmpAvailability->copiesOwned = $realtimeAvailability->copiesOwned;
                 $tmpAvailability->availableCopies = $realtimeAvailability->copiesAvailable;
                 $tmpAvailability->numberOfHolds = $realtimeAvailability->numberOfHolds;
                 $this->availability[$key] = $tmpAvailability;
             }
         }
         if (count($this->availability) == 0) {
             //Did not get availability from the Availability table
             if ($this->itemLevelOwnership) {
                 //Ownership is determined at the item level based on library ids set for the item.  Assume unlimited availability
                 $items = $this->getItems();
                 foreach ($items as $item) {
                     $eContentAvailability = new EContentAvailability();
                     $eContentAvailability->recordId = $this->id;
                     $eContentAvailability->copiesOwned = 1;
                     $eContentAvailability->availableCopies = 1;
                     $eContentAvailability->numberOfHolds = 0;
                     $eContentAvailability->libraryId = $item->libraryId;
                     $this->availability[] = $eContentAvailability;
                 }
             } else {
                 //Ownership is shared, based on information at record level
                 $eContentAvailability = new EContentAvailability();
                 $eContentAvailability->recordId = $this->id;
                 $eContentAvailability->copiesOwned = $this->availableCopies;
                 $checkouts = new EContentCheckout();
                 $checkouts->status = 'out';
                 $checkouts->recordId = $this->id;
                 $checkouts->find();
                 $curCheckouts = $checkouts->N;
                 if ($this->accessType == 'free') {
                     $this->availableCopies = 999999;
                 }
                 $eContentAvailability->availableCopies = $this->availableCopies - $curCheckouts;
                 $eContentAvailability->copiesOwned = $this->availableCopies;
                 $holds = new EContentHold();
                 $holds->whereAdd("status in ('active', 'suspended', 'available')");
                 $holds->recordId = $this->id;
                 $holds->find();
                 $eContentAvailability->numberOfHolds = $holds->N;
                 $eContentAvailability->onOrderCopies = $this->onOrderCopies;
                 $eContentAvailability->libraryId = -1;
             }
         }
     }
     return $this->availability;
 }
 public function returnTitle($itemId)
 {
     global $user;
     if (!$user) {
         return array('result' => false, 'message' => 'You must be logged in to return a title');
     } else {
         require_once ROOT_DIR . '/sys/eContent/EContentCheckout.php';
         $eContentCheckout = new EContentCheckout();
         $eContentCheckout->userId = $user->id;
         $eContentCheckout->recordId = $this->getUniqueID();
         $eContentCheckout->itemId = $itemId;
         $eContentCheckout->status = 'out';
         $eContentCheckout->protectionType = 'free';
         if (!$eContentCheckout->find(true)) {
             return array('result' => true, 'message' => 'This title is not checked out to you.');
         } else {
             global $configArray;
             $eContentCheckout->dateReturned = time();
             $eContentCheckout->status = 'returned';
             if ($eContentCheckout->update()) {
                 return array('result' => true, 'message' => 'The title was returned successfully.');
             } else {
                 return array('result' => false, 'message' => 'Unexpected error returning out the title.');
             }
         }
     }
 }
Пример #3
0
 public function getAccountSummary()
 {
     global $user;
     $accountSummary = array();
     if ($user) {
         //Get a count of checked out items
         $eContentCheckout = new EContentCheckout();
         $eContentCheckout->status = 'out';
         $eContentCheckout->userId = $user->id;
         $eContentCheckout->find();
         $accountSummary['numEContentCheckedOut'] = $eContentCheckout->N;
         //Get a count of available holds
         $eContentHolds = new EContentHold();
         $eContentHolds->status = 'available';
         $eContentHolds->userId = $user->id;
         $eContentHolds->find();
         $accountSummary['numEContentAvailableHolds'] = $eContentHolds->N;
         //Get a count of unavailable holds
         $eContentHolds = new EContentHold();
         $eContentHolds->whereAdd("status IN ('active', 'suspended')");
         $eContentHolds->userId = $user->id;
         $eContentHolds->find();
         $accountSummary['numEContentUnavailableHolds'] = $eContentHolds->N;
         //Get a count of items on the wishlist
         $eContentWishList = new EContentWishList();
         $eContentWishList->status = 'active';
         $eContentWishList->userId = $user->id;
         $eContentWishList->find();
         $accountSummary['numEContentWishList'] = $eContentWishList->N;
     }
     return $accountSummary;
 }
Пример #4
0
 /**
  * Process notifications from the ACS server when an item is checked out
  * or returned.
  **/
 function launch()
 {
     global $configArray;
     global $logger;
     $post_body = file_get_contents('php://input');
     if (isset($_POST['body'])) {
         $post_body = $_POST['body'];
     }
     $logger->log("POST_BODY {$post_body}", PEAR_LOG_INFO);
     $notificationData = new SimpleXMLElement($post_body);
     //Check to see of the EPUB is being fulfilled or returned
     $isFulfilled = strcasecmp((string) $notificationData->body->fulfilled, 'true') == 0;
     $isReturned = strcasecmp((string) $notificationData->body->returned, 'true') == 0;
     //Get the transactionId
     $transactionId = (string) $notificationData->body->transaction;
     //Get the user acsId
     $userAcsId = (string) $notificationData->body->user;
     if ($isFulfilled) {
         if ($isReturned) {
             $logger->log("Transaction {$transactionId} was returned, returning it in the catalog.", PEAR_LOG_INFO);
         } else {
             $logger->log("Transaction {$transactionId} was fulfilled, checking it out in the catalog.", PEAR_LOG_INFO);
         }
     } else {
         $logger->log("Transaction {$transactionId} was not fulfilled or returned, ignoring it.", PEAR_LOG_INFO);
         exit;
     }
     //Add a log entry for debugging.
     $logger->log("Preparing to insert log entry for transaction", PEAR_LOG_INFO);
     require_once ROOT_DIR . '/sys/eContent/AcsLog.php';
     $acsLog = new AcsLog();
     $acsLog->acsTransactionId = $transactionId;
     $acsLog->fulfilled = $isFulfilled;
     $acsLog->returned = $isReturned;
     $acsLog->userAcsId = $userAcsId;
     $ret = $acsLog->insert();
     $logger->log("Inserted log entry result: {$ret}", PEAR_LOG_INFO);
     //Update the database as appropriate
     //Get the chckd out item for the transaction Id
     require_once ROOT_DIR . '/sys/eContent/EContentCheckout.php';
     $checkout = new EContentCheckout();
     $checkout->acsTransactionId = $transactionId;
     if ($checkout->find(true)) {
         //Update the checkout to show
         if ($isReturned) {
             if ($checkout->status == 'out') {
                 //return the item
                 require_once ROOT_DIR . '/Drivers/EContentDriver.php';
                 $driver = new EContentDriver();
                 $driver->returnRecord($checkout->recordId);
             }
         } else {
             //Update the checked out item with information from acs
             if ($checkout->downloadedToReader == 0) {
                 $checkout->downloadedToReader = 1;
                 $checkout->dateFulfilled = time();
                 $checkout->userAcsId = $userAcsId;
                 $checkout->update();
             }
             //Mark that the record is downloaded
             require_once ROOT_DIR . '/sys/eContent/EContentRecord.php';
             $eContentRecord = new EContentRecord();
             $eContentRecord->id = $checkout->recordId;
             $eContentRecord->find(true);
             require_once ROOT_DIR . '/Drivers/EContentDriver.php';
             $driver = new EContentDriver();
             $driver->recordEContentAction($checkout->recordId, 'Download', $eContentRecord->accessType);
         }
     }
 }