iId = -1; $this->iUserID = $iUserID; $this->iExternalID = $iExternalID; $this->iSubscriptionType = $iSubscriptionType; $this->bIsAlerted = $bIsAlerted; $this->sTableName = Subscription::getTableName($iSubscriptionType); $this->sIdFieldName = Subscription::getIdFieldName($iSubscriptionType); } /** * Get the primary key of the current subscription object * * @return integer primary key of subscription */ function getID() { return $this->iId; } /** * Get the primary key of the subscription content. * * @return integer primary key of subscription content. */ function getExternalID() { return $this->iExternalID; } /** * Set the subscription content id * * @param integer new subscription content primary key */ function setExternalID($iNewValue) { $this->iExternalID = $iNewValue; } /** * Get the primary key of the user * * @return integer primary key of user */ function getUserID() { return $this->iUserID; } /** * Set the user id * * @param integer new user primary key */ function setUserID($iNewValue) { $this->iUserID = $iNewValue; } /** * Get the trigger status of this subscription * * @return boolean the trigger status of this subscription */ function getIsAlerted() { return $this->bIsAlerted; } /** * Set the trigger status of the subscription * * @param boolean new trigger status */ function setIsAlerted($iNewValue) { $this->bIsAlerted = $iNewValue; } /** * Returns the display path to the subscription content */ function getContentDisplayPath() { if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) { return Document::getDocumentDisplayPath($this->iExternalID); } else if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) { return Folder::getFolderDisplayPath($this->iExternalID); } } /** * Returns the link to view the subscription content */ function getContentLink() { // TODO: add subscription icon if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) { return generateControllerLink("viewDocument", "fDocumentId=$this->iExternalID", Document::getDocumentDisplayPath($this->iExternalID)); } else if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) { return generateControllerLink("browse", "fBrowseType=folder&fFolderId=$this->iExternalID", Folder::getFolderDisplayPath($this->iExternalID)); } } /** * Returns the url to the subscription content */ function getContentUrl() { if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) { return generateControllerUrl("viewDocument", "fDocumentId=$this->iExternalID"); } else if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) { return generateControllerUrl("browse", "fBrowseType=folder&fFolderId=$this->iExternalID"); } } function isValid() { if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) { return !PEAR::isError(Document::get($this->iExternalID)); } else if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) { return !PEAR::isError(Folder::get($this->iExternalID)); } } function getAlertLink() { global $default; // TODO: add alerted icon $sViewAlertParams = "fSubscriptionID=" . $this->iId . "&fSubscriptionType=" . $this->iSubscriptionType; if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) { return generateControllerLink("viewAlert", $sViewAlertParams, " " . Document::getDocumentDisplayPath($this->iExternalID)); } else if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) { return generateControllerLink("viewAlert", $sViewAlertParams, " " . Folder::getFolderDisplayPath($this->iExternalID)); } } function getSubscriptionTypeName() { if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) { return "document"; } else if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) { return "folder"; } } function _fieldValues () { return array( 'user_id' => $this->iUserID, $this->sIdFieldName => $this->iExternalID, 'is_alerted' => KTUtil::anyToBool($this->bIsAlerted), ); } function _table () { return $this->sTableName; } /** * Static function. * Given a subscription primary key will create a subscription object and populate it with the corresponding * database values * * @param integer primary key of subscription to get * @param integer the type of subscription * @return object subscription object on successful retrieval, false otherwise and set $_SESSION["errorMessage"] */ function & get($iSubscriptionID, $iSubscriptionType) { // FIXME this is crack - need to start looking at multiple entities here. $sQuery = "SELECT * FROM " . Subscription::getTableName($iSubscriptionType) . " WHERE id = ?";/*ok*/ $aParams = array($iSubscriptionID); $res = DBUtil::getOneResult(array($sQuery, $aParams)); if (PEAR::isError($res)) { return false; // return $res; } if (empty($res)) { return false; // return PEAR::raiseError(_kt('No such Subscription ID')) } $oSubscription = & new Subscription($res["user_id"], $res[Subscription::getIdFieldName($iSubscriptionType)], $iSubscriptionType, $res["is_alerted"]); $oSubscription->iId = $iSubscriptionID; return $oSubscription; } /** * Static function. * Given a subscription's values will create a subscription object and populate it with the corresponding * primary key * * @param integer the user ID * @param integer the external ID * @param integer the type of subscription * @return object subscription object on successful retrieval, false otherwise and set $_SESSION["errorMessage"] */ function getByIDs($iUserID, $iExternalID, $iSubscriptionType) { $sQuery = "SELECT * FROM " . Subscription::getTableName($iSubscriptionType) . " WHERE " . Subscription::getIdFieldName($iSubscriptionType) . " = ? AND user_id = ?"; $aParams = array($iExternalID, $iUserID); $res = DBUtil::getOneResult(array($sQuery, $aParams)); if (PEAR::isError($res)) { return false; // return $res; } if (empty($res)) { return false; // return PEAR::raiseError(_kt('No such Subscription ID')) } $oSubscription = & new Subscription($res["user_id"], $res[Subscription::getIdFieldName($iSubscriptionType)], $iSubscriptionType, $res["is_alerted"]); $oSubscription->iId = $res['id']; return $oSubscription; } /** * Checks if a given subscription already exists using the external and user ids * * @param integer the user ID * @param integer the external ID * @param integer the subscription type * @return true if the document subscription exists, false otherwise */ function exists($iUserID, $iExternalID, $iSubscriptionType) { $sQuery = "SELECT count(*) AS `subcount` FROM " . Subscription::getTableName($iSubscriptionType) . " WHERE " . Subscription::getIdFieldName($iSubscriptionType) . " = ? AND user_id = ?"; $aParams = array($iExternalID, $iUserID); $res = DBUtil::getOneResultKey(array($sQuery, $aParams), 'subcount'); if (PEAR::isError($res)) { return false; } else { return ($res == 1); } } /** * Returns the correct table name for the subscription type * * @param integer the subscription type * @return string the subscription table name to use */ function getTableName($iSubscriptionType) { global $default; if ($iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) { return $default->document_subscriptions_table; } else if($iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) { return $default->folder_subscriptions_table; } } /** * Returns the correct id field name for the subscription type * * @param integer the subscription type * @return string the subscription id field name to use */ function getIdFieldName($iSubscriptionType) { if ($iSubscriptionType == SubscriptionEvent::subTypes("Document")) { return "document_id"; } else if($iSubscriptionType == SubscriptionEvent::subTypes("Folder")) { return "folder_id"; } } } ?>