Commit 36ac1edce3d4e440d651308bd216aa1963d88038

Authored by bshuttle
1 parent 2fe2fcde

fix for KTS-1252: subscriptions crashes after deleted document.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@5951 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/subscriptions/Subscription.inc
... ... @@ -180,6 +180,14 @@ class Subscription extends KTEntity {
180 180 return generateControllerUrl("browse", "fBrowseType=folder&fFolderId=$this->iExternalID");
181 181 }
182 182 }
  183 +
  184 + function isValid() {
  185 + if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("DocumentSubscription")) {
  186 + return !PEAR::isError(Document::get($this->iExternalID));
  187 + } else if ($this->iSubscriptionType == SubscriptionConstants::subscriptionType("FolderSubscription")) {
  188 + return !PEAR::isError(Folder::get($this->iExternalID));
  189 + }
  190 + }
183 191  
184 192 function getAlertLink() {
185 193 global $default;
... ...
lib/subscriptions/SubscriptionManager.inc
... ... @@ -154,20 +154,30 @@ class SubscriptionManager {
154 154 * @return array of subscription objects, false if the database interaction fails
155 155 */
156 156 function retrieveUserSubscriptions($iUserID, $iSubscriptionType) {
157   - global $default;
  157 +
  158 + $table = Subscription::getTableName($iSubscriptionType); // EVIL!
  159 + $aQuery = array(
  160 + "SELECT id FROM $table WHERE user_id = ?",
  161 + $iUserID,
  162 + );
  163 +
  164 +
  165 + $res = DBUtil::getResultArrayKey($aQuery, 'id');
  166 + if (PEAR::isError($res)) {
  167 + // isn't this hideous?
  168 + $_SESSION['_ktErrorMessage'][] = $res->getMessage();
  169 + return false;
  170 + }
158 171  
159   - $sql = $default->db;
160   - if ($sql->query(array("SELECT id FROM " . Subscription::getTableName($iSubscriptionType) . " " ./*ok*/
161   - "WHERE user_id = ?", $iUserID))) {
162   - $aSubscriptions = array();
163   - while ($sql->next_record()) {
164   - $aSubscriptions[] = & Subscription::get($sql->f("id"), $iSubscriptionType);
  172 + $items = array();
  173 + foreach ($res as $id) {
  174 + $item = Subscription::get($id, $iSubscriptionType);
  175 + if ($item->isValid()) {
  176 + $items[] = $item;
165 177 }
166   - } else {
167   - $_SESSION["errorMessage"] = $lang_err_database;
168   - return false;
169 178 }
170   - return $aSubscriptions;
  179 +
  180 + return $items;
171 181 }
172 182  
173 183 /**
... ...