Ejemplo n.º 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;
 }
Ejemplo n.º 2
0
 public function getNumHolds($id)
 {
     $holds = new EContentHold();
     $holds->recordId = $id;
     $holds->whereAdd("(status = 'active' or status = 'suspended')");
     $holds->find();
     return $holds->N;
 }
Ejemplo n.º 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;
 }
 public function cancelHold($itemId)
 {
     global $user;
     if (!$user) {
         return array('result' => false, 'message' => 'You must be logged in to cancel a hold');
     } else {
         require_once ROOT_DIR . '/sys/eContent/EContentHold.php';
         $eContentHold = new EContentHold();
         $eContentHold->userId = $user->id;
         $eContentHold->recordId = $this->getUniqueID();
         $eContentHold->itemId = $itemId;
         $eContentHold->whereAdd("status IN ('active', 'suspended')");
         if ($eContentHold->find(true)) {
             $eContentHold->status = 'cancelled';
             $eContentHold->dateUpdated = time();
             if ($eContentHold->update()) {
                 return array('result' => true, 'message' => 'Successfully cancelled this hold for you.');
             } else {
                 return array('result' => false, 'message' => 'There was an unknown error cancelling your hold on this title.');
             }
         } else {
             return array('result' => false, 'message' => 'Sorry, this title is not on hold for you.');
         }
     }
 }