/**
  * Get the cover image of the supplied object
  * @since Version 3.9.1
  * @param object $Object
  * @return array
  */
 public static function getCoverImageOfObject($Object)
 {
     if (!self::hasCoverImage($Object)) {
         return false;
     }
     $cachekey = sprintf("railpage:%s=%d;coverimage", $Object->namespace, $Object->id);
     $Memcached = AppCore::getMemcached();
     $Redis = AppCore::GetRedis();
     #printArray($cachekey);die;
     if ($result = $Memcached->fetch($cachekey)) {
         return $result;
     }
     if ($result = $Redis->fetch($cachekey)) {
         return $result;
     }
     $photoidvar = isset($Object->flickr_image_id) ? "flickr_image_id" : "photo_id";
     if (isset($Object->meta['coverimage'])) {
         $Image = ImageFactory::CreateImage($Object->meta['coverimage']['id']);
     } elseif ($Object->Asset instanceof Asset) {
         $Image = $Object->Asset;
     } elseif (isset($Object->{$photoidvar}) && filter_var($Object->{$photoidvar}, FILTER_VALIDATE_INT) && $Object->{$photoidvar} > 0) {
         $Image = ImageFactory::CreateImage($Object->{$photoidvar}, "flickr");
     }
     $return = array("type" => "image", "provider" => $Image instanceof Image ? $Image->provider : "", "title" => $Image instanceof Image ? $Image->title : $Asset->meta['title'], "author" => array("id" => "", "username" => "", "realname" => "", "url" => ""));
     if ($Image instanceof Image) {
         $return = array_merge($return, array("author" => array("id" => $Image->author->id, "username" => $Image->author->username, "realname" => isset($Image->author->realname) ? $Image->author->realname : $Image->author->username, "url" => $Image->author->url), "image" => array("id" => $Image->id), "sizes" => $Image->sizes, "url" => $Image->url->getURLs()));
     }
     if ($Object->Asset instanceof Asset) {
         $return = array_merge($return, array("sizes" => array("large" => array("source" => $Asset->meta['image']), "original" => array("source" => $Asset->meta['original'])), "url" => array("url" => $Asset['meta']['image'])));
     }
     $Memcached->save($cachekey, $return, strtotime("+1 hour"));
     $Redis->save($cachekey, $return, strtotime("+1 hour"));
     return $return;
 }
示例#2
0
 /**
  * Get a location ID from a URL slug
  * @since Version 3.10.0
  * @param string $slug
  * @return int
  */
 public static function getLocationId($slug)
 {
     $Redis = AppCore::GetRedis();
     $Memcached = AppCore::GetMemcached();
     $Database = (new AppCore())->getDatabaseConnection();
     $key = sprintf("railpage:locations.slug=%s", $slug);
     if (!($id = $Memcached->fetch($key))) {
         $id = $Database->fetchOne("SELECT id FROM location WHERE slug = ?", $slug);
         $Memcached->save($key, $id, 0);
     }
     return $id;
 }
示例#3
0
 /**
  * Clear the caches of this user object
  * @since Version 3.9.1
  * @param \Railpage\Users\User $User
  * @return void
  */
 public static function clearCache(User $userObject)
 {
     if (empty($userObject->mckey)) {
         return;
     }
     $cacheHandler = AppCore::GetMemcached();
     $Redis = AppCore::GetRedis();
     $cacheHandler->delete($userObject->mckey);
     try {
         $Redis->delete(sprintf("railpage:users.user=%d", $userObject->id));
     } catch (Exception $e) {
         // throw it away
     }
     try {
         $Redis->delete($userObject->mckey);
     } catch (Exception $e) {
         // throw it away
     }
 }
示例#4
0
 /**
  * Return a new instance of Image
  * @since Version 3.9.1
  * @param int|string $id
  * @param string $provider
  * @param int $options
  * @return \Railpage\Images\Image
  */
 public static function CreateImage($id = null, $provider = null, $options = null)
 {
     $Redis = AppCore::GetRedis();
     $Registry = Registry::GetInstance();
     $cachekey = sprintf("rp:v2;cache.image=%s;o=%s", $id, crc32(json_encode($options)));
     if ($id != null && $provider == null) {
         return new Image($id, $options);
         try {
             $Image = $Registry->get($cachekey);
         } catch (Exception $e) {
             if (!($Image = $Redis->fetch($cachekey))) {
                 $Image = new Image($id, $options);
                 $Redis->save($cachekey, $Image, strtotime("+10 minutes"));
             }
             $Registry->set($cachekey, $Image);
         }
         return $Image;
     }
     $cachekey .= sprintf(";p=%s", $provider);
     #$Registry = Registry::getInstance();
     #echo $cachekey;die;
     return (new Images())->findImage($provider, $id, $options);
     try {
         $Image = $Registry->get($cachekey);
     } catch (Exception $e) {
         if ($Image = $Redis->fetch($cachekey) && $Image instanceof Image) {
             $Registry->set($cachekey, $Image);
             return $Image;
         }
         try {
             $Images = new Images();
             $Image = $Images->findImage($provider, $id, $options);
             $Redis->save($cachekey, $Image, strtotime("+10 minutes"));
             $Registry->set($cachekey, $Image);
         } catch (Exception $e) {
             $Image = false;
         }
     }
     return $Image;
 }
示例#5
0
 /**
  * Commit changes to this competition
  * @since Version 3.9.1
  * @return \Railpage\Images\Competition
  */
 public function commit()
 {
     $this->validate();
     $data = array("title" => $this->title, "theme" => $this->theme, "description" => $this->description, "slug" => $this->slug, "status" => $this->status, "author" => $this->Author->id, "voting_date_open" => $this->VotingDateOpen instanceof DateTime ? $this->VotingDateOpen->format("Y-m-d H:i:s") : "0000-00-00 00:00:00", "voting_date_close" => $this->VotingDateClose instanceof DateTime ? $this->VotingDateClose->format("Y-m-d H:i:s") : "0000-00-00 00:00:00", "submissions_date_open" => $this->SubmissionsDateOpen instanceof DateTime ? $this->SubmissionsDateOpen->format("Y-m-d H:i:s") : "0000-00-00 00:00:00", "submissions_date_close" => $this->SubmissionsDateClose instanceof DateTime ? $this->SubmissionsDateClose->format("Y-m-d H:i:s") : "0000-00-00 00:00:00", "meta" => json_encode($this->meta));
     if (filter_var($this->id, FILTER_VALIDATE_INT)) {
         $where = array("id = ?" => $this->id);
         $this->db->update("image_competition", $data, $where);
     }
     if (!filter_var($this->id, FILTER_VALIDATE_INT)) {
         $this->db->insert("image_competition", $data);
         $this->id = $this->db->lastInsertId();
     }
     /**
      * Clear the cache
      */
     $regkey = sprintf(self::CACHE_KEY, $this->id);
     $Redis = AppCore::GetRedis();
     $Memcached = AppCore::GetMemcached();
     $Redis->delete($regkey);
     $Memcached->delete($regkey);
     /**
      * Check our themes and see if we need to mark this theme as used
      */
     $themes = (new Competitions())->getSuggestedThemes();
     foreach ($themes as $key => $theme) {
         $theme['theme'] = ContentUtility::FormatTitle($theme['theme']);
         if ((!isset($theme['used']) || $theme['used'] === false) && $theme['theme'] === $this->theme) {
             $themes[$key]['used'] = true;
         }
     }
     $Config = new Config();
     $Config->set("image.competition.suggestedthemes", json_encode($themes), "Photo competition themes");
     $this->url = Utility\Url::makeCompetitionUrls($this);
     return $this;
 }
示例#6
0
 /**
  * @depends test_newUser
  */
 public function test_group($User)
 {
     $User->Redis = new \Railpage\NullCacheDriver();
     $this->assertEquals(0, count($User->getGroups()));
     $Group = new Group();
     $Group->name = "Test user group";
     $Group->desc = "A test user group description";
     $Group->type = Group::TYPE_HIDDEN;
     $Group->owner_user_id = $User->id;
     $Group->commit();
     // Nuke our Redis cache
     $mckey = sprintf("railpage:group=%d.user_id=%d", $Group->id, $User->id);
     $Redis = \Railpage\AppCore::GetRedis();
     $Redis->Delete($mckey);
     $this->assertFalse(!filter_var($Group->id, FILTER_VALIDATE_INT));
     $this->assertFalse($Group->userInGroup($User));
     $Group->addMember($User->username, $User->id);
     $Group->approveUser($User);
     $this->assertTrue($Group->userInGroup($User));
     $Group->removeUser($User);
     $this->assertFalse($Group->userInGroup($User));
     $Group->addMember($User->username, $User->id, "Manager", "03 9562 2222", "blah");
     $Group->approveUser($User);
     $this->assertTrue($Group->userInGroup($User));
     $members = $Group->getMembers();
     $this->assertTrue(is_array($members));
     $this->assertTrue(count($members['members']) > 0);
     $this->assertTrue($User->inGroup($Group->id));
     $this->assertTrue(count($User->getGroups()) > 0);
     $NewGroup = new Group($Group->id);
     $this->assertEquals($NewGroup->id, $Group->id);
     $this->assertEquals($NewGroup->name, $Group->name);
     $this->assertEquals($NewGroup->desc, $Group->desc);
     $this->assertEquals($NewGroup->type, $Group->type);
     $Group->type = Group::TYPE_OPEN;
     $Group->commit();
     if (!defined("RP_GROUP_ADMINS")) {
         define("RP_GROUP_ADMINS", "michaelisawesome");
     }
     $this->assertFalse($User->inGroup());
     $this->assertFalse($User->inGroup(RP_GROUP_ADMINS));
     $User->level = 2;
     $this->assertTrue($User->inGroup(RP_GROUP_ADMINS));
     $User->level = 1;
     return $Group;
 }
示例#7
0
 /**
  * Commit changes to this camera
  * @since Version 3.10.0
  * @return \Railpage\Images\Camera
  */
 public function commit()
 {
     $this->validate();
     $data = ["make" => $this->manufacturer, "model" => $this->name, "url_slug" => $this->slug, "image" => $this->image, "text" => $this->text, "meta" => json_encode($this->meta)];
     if (filter_var($this->id, FILTER_VALIDATE_INT)) {
         $where = ["id = ?" => $this->id];
         $this->db->update("image_camera", $data, $where);
     }
     if (!filter_var($this->id, FILTER_VALIDATE_INT)) {
         $this->db->insert("image_camera", $data);
         $this->id = $this->db->lastInsertId();
     }
     /**
      * Flush cache
      */
     $regkey = sprintf(self::CACHE_KEY, $this->id);
     $Redis = AppCore::GetRedis();
     $Memcached = AppCore::GetMemcached();
     $Redis->delete($regkey);
     $Memcached->delete($regkey);
     $this->makeURLs();
     return $this;
 }