|
dmBridge PHP API
|
00001 <?php 00002 # 00003 # dmBridge: a data access framework for CONTENTdm(R) 00004 # 00005 # Copyright © 2009, 2010, 2011 Board of Regents of the Nevada System of Higher 00006 # Education, on behalf of the University of Nevada, Las Vegas 00007 # 00008 00017 final class DMSession { 00018 00020 private $favorites = array(); 00021 00022 public function __construct() { 00023 $this->populateFavorites(); 00024 } 00025 00032 public function addFavorite(DMObject $obj) { 00033 // check for duplicates 00034 foreach ($this->favorites as $fav) { 00035 if ($fav->equals($obj)) { 00036 return; 00037 } 00038 } 00039 00040 if (!array_key_exists('BUF', $_COOKIE)) { 00041 $_COOKIE['BUF'] = ""; 00042 } 00043 $buf = &$_COOKIE['BUF']; 00044 $objcookie = sprintf("%s<%d>", 00045 $obj->getCollection()->getAlias(), 00046 $obj->getPtr()); 00047 if (strpos($buf, $objcookie) === false) { 00048 $buf .= $objcookie; 00049 if (!headers_sent()) { 00050 setcookie('BUF', $buf, null, '/'); 00051 } 00052 } 00053 $this->favorites[] = $obj; 00054 } 00055 00064 public function getAccessibleFavorites(DMTemplateSet $template_set) { 00065 $objects = array(); 00066 foreach ($this->getAllFavorites() as $obj) { 00067 if ($template_set 00068 ->isAuthorizedToViewCollection($obj->getCollection())) { 00069 $objects[] = $obj; 00070 } 00071 } 00072 return $objects; 00073 } 00074 00082 public function getAllFavorites() { 00083 return $this->favorites; 00084 } 00085 00094 public function deleteFavorites(array $objects) { 00095 if (array_key_exists("BUF", $_COOKIE)) { 00096 $buf = $_COOKIE['BUF']; 00097 foreach ($objects as &$obj) { 00098 // delete it from the cookie 00099 $buf = str_replace( 00100 sprintf("%s<%d>", 00101 $obj->getCollection()->getAlias(), 00102 $obj->getPtr()), 00103 "", $buf); 00104 // delete it from the instance 00105 for ($i = 0; $i < count($this->favorites); $i++) { 00106 if ($obj->equals($this->favorites[$i])) { 00107 unset($this->favorites[$i]); 00108 break; 00109 } 00110 } 00111 // delete it from the passed-in array 00112 $obj = null; 00113 } 00114 if (!headers_sent()) { 00115 setcookie("BUF", $buf, null, "/"); 00116 } 00117 } 00118 } 00119 00123 private function populateFavorites() { 00124 if (count($this->getAllFavorites()) < 1) { 00125 if (array_key_exists('BUF', $_COOKIE)) { 00126 $pairs = explode('>', $_COOKIE['BUF']); 00127 array_pop($pairs); 00128 foreach ($pairs as $pair) { 00129 $tmp = explode('<', $pair); 00130 $this->favorites[] = DMObjectFactory::getObject( 00131 DMCollectionFactory::getCollection( 00132 DMCollection::getSanitizedAlias($tmp[0])), 00133 $tmp[1]); 00134 } 00135 } 00136 } 00137 } 00138 00150 public function getFlash() { 00151 if (array_key_exists('flash', $_SESSION)) { 00152 return ($_SESSION['flash'] instanceof DMFlash) 00153 ? $_SESSION['flash'] : null; 00154 } 00155 } 00156 00164 public function setFlash(DMFlash $flash) { 00165 $_SESSION['flash'] = $flash; 00166 } 00167 00176 public function unsetFlash() { 00177 $_SESSION['flash'] = null; 00178 } 00179 00185 public function hasCommentedOnObject(DMObject $obj) { 00186 if (!array_key_exists('has_commented', $_SESSION)) { 00187 return false; 00188 } 00189 if (!is_array($_SESSION['has_commented'])) { 00190 return false; 00191 } 00192 foreach ($_SESSION['has_commented'] as $arr) { 00193 if ($arr['alias'] == $obj->getCollection()->getAlias() 00194 && $arr['ptr'] == $obj->getPtr()) { 00195 return true; 00196 } 00197 } 00198 return false; 00199 } 00200 00206 public function addHasCommented(DMObject $obj) { 00207 if (self::hasCommentedOnObject($obj)) { 00208 return; 00209 } 00210 if (!array_key_exists('has_commented', $_SESSION) 00211 || !is_array($_SESSION['has_commented'])) { 00212 $_SESSION['has_commented'] = array(); 00213 } 00214 // if $obj is a child object, add all siblings as well as the parent 00215 if ($obj->isChild()) { 00216 $objects = $obj->getParent()->getChildren(); 00217 $objects[] = $obj->getParent(); 00218 } else if ($obj->isCompound()) { 00219 // if it's a compound object, add all children 00220 $objects = $obj->getChildren(); 00221 $objects[] = $obj; 00222 } else { // it's a lonely DMObject 00223 $objects = array($obj); 00224 } 00225 foreach ($objects as $o) { 00226 $_SESSION['has_commented'][] = array( 00227 'alias' => $o->getCollection()->getAlias(), 00228 'ptr' => $o->getPtr() 00229 ); 00230 } 00231 } 00232 00237 public function hasRated() { 00238 return (array_key_exists("has_rated", $_SESSION) 00239 && is_array($_SESSION['has_rated'])) 00240 ? $_SESSION['has_rated'] : array(); 00241 } 00242 00247 public function hasRatedObject(DMObject $obj) { 00248 if (array_key_exists('has_rated', $_SESSION)) { 00249 if (is_array($_SESSION['has_rated'])) { 00250 foreach ($_SESSION['has_rated'] as $arr) { 00251 if ($arr['alias'] == $obj->getCollection()->getAlias() 00252 && $arr['ptr'] == $obj->getPtr()) { 00253 return true; 00254 } 00255 } 00256 } 00257 } 00258 return false; 00259 } 00260 00265 public function addHasRated(DMObject $obj) { 00266 if (!self::hasRatedObject($obj)) { 00267 if (!array_key_exists("has_rated", $_SESSION) 00268 || !is_array($_SESSION['has_rated'])) { 00269 $_SESSION['has_rated'] = array(); 00270 } 00271 $_SESSION['has_rated'][] = array( 00272 'alias' => $obj->getCollection()->getAlias(), 00273 'ptr' => $obj->getPtr() 00274 ); 00275 } 00276 } 00277 00282 public function getQuery() { 00283 return (array_key_exists('query', $_SESSION) 00284 && $_SESSION['query'] instanceof DMQuery) 00285 ? $_SESSION['query'] : null; 00286 } 00287 00293 public function setQuery(DMQuery $q) { 00294 $_SESSION['query'] = $q; 00295 } 00296 00301 public function unsetQuery() { 00302 $_SESSION['query'] = null; 00303 } 00304 00311 public function addRecentlyViewedObject(DMObject $obj) { 00312 $k = "recently_viewed_objects"; 00313 if (!array_key_exists($k, $_SESSION) || !is_array($_SESSION[$k])) { 00314 $_SESSION[$k] = array(); 00315 } 00316 if (count($_SESSION[$k]) > 0 00317 && $obj->equals($_SESSION[$k][count($_SESSION[$k]) - 1])) { 00318 return; 00319 } 00320 $_SESSION[$k][] = $obj; 00321 } 00322 00328 public function getRecentlyViewedObjects($limit) { 00329 $k = "recently_viewed_objects"; 00330 $objects = array(); 00331 if (array_key_exists($k, $_SESSION) && is_array($_SESSION[$k])) { 00332 foreach ($_SESSION[$k] as $obj) { 00333 if (count($objects) >= $limit) { 00334 break; 00335 } 00336 foreach ($objects as $obj2) { 00337 if ($obj2->equals($obj)) { 00338 continue(2); 00339 } 00340 } 00341 $objects[] = $obj; 00342 } 00343 } 00344 return $objects; 00345 } 00346 00351 public function getResultsView() { 00352 return array_key_exists("results_view", $_SESSION) 00353 ? $_SESSION['results_view'] : null; 00354 } 00355 00361 public function setResultsView(DMResultsView $view) { 00362 $_SESSION['results_view'] = $view; 00363 } 00364 00369 public function unsetResultsView() { 00370 $_SESSION['results_view'] = null; 00371 } 00372 00377 public function getSearchInput() { 00378 return (array_key_exists("search_input", $_SESSION)) 00379 ? $_SESSION['search_input'] : null; 00380 } 00381 00387 public function setSearchInput(DMInput $input) { 00388 $_SESSION['search_input'] = $input; 00389 } 00390 00395 public function unsetSearchInput() { 00396 $_SESSION['search_input'] = null; 00397 } 00398 00403 public function getUser() { 00404 return (array_key_exists("user", $_SESSION)) 00405 ? $_SESSION['user'] : null; 00406 } 00407 00412 public function setUser(DMUser $user) { 00413 $_SESSION['user'] = $user; 00414 } 00415 00419 public function unsetUser() { 00420 $_SESSION['user'] = null; 00421 } 00422 00423 } 00424