Пример #1
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;
 }
Пример #2
0
 /**
  * Get a random image as an array
  * @since Version 3.10.0
  * @param string $namespace An optional linked namespace to filter by
  * @param int $namespaceKey An optional linked namespace key to filter by
  * @return array
  */
 public static function randomImage($namespace, $namespaceKey)
 {
     $Database = (new AppCore())->getDatabaseConnection();
     if (is_null($namespace) && !is_null($namespaceKey)) {
         throw new InvalidArgumentException("A namespace key was specified but an associated namespace value was not.");
     }
     if (is_null($namespace) && is_null($namespaceKey)) {
         $query = "SELECT * FROM image AS r1 JOIN (SELECT CEIL(RAND() * (SELECT MAX(id) FROM image)) AS randomid) AS r2 WHERE r1.id >= r2.randomid ORDER BY r1.id ASC LIMIT 1";
         $row = $Database->fetchRow($query);
         $row['meta'] = json_decode($row['meta'], true);
         $row['sizes'] = Images::normaliseSizes($row['meta']['sizes']);
         $row['url'] = Url::CreateFromImageID($row['id']);
         $row['url'] = $row['url']->getURLs();
         return $row;
     }
     if (!is_null($namespace)) {
         $query = "SELECT il.image_id FROM image_link AS il LEFT JOIN image AS i ON i.id = il.image_id WHERE il.namespace = ? AND i.provider IS NOT NULL";
         $params = [$namespace];
         if (!is_null($namespaceKey)) {
             $query .= " AND namespace_key = ?";
             $params[] = $namespaceKey;
         }
         $ids = [];
         foreach ($Database->fetchAll($query, $params) as $row) {
             $ids[] = $row['image_id'];
         }
         $image_id = $ids[array_rand($ids)];
         $query = "SELECT * FROM image WHERE id = ?";
         $row = $Database->fetchRow($query, $image_id);
         $row['meta'] = json_decode($row['meta'], true);
         $row['sizes'] = Images::normaliseSizes($row['meta']['sizes']);
         $row['url'] = Url::CreateFromImageID($row['id']);
         $row['url'] = $row['url']->getURLs();
         return $row;
     }
     return;
 }
Пример #3
0
 /**
  * Commit changes to this image
  *
  * @since Version 3.8.7
  * @return boolean
  */
 public function commit()
 {
     $this->validate();
     $user_id = isset($this->author->User) && $this->author->User instanceof User ? $this->author->User->id : 0;
     $author = $this->author;
     unset($author->User);
     $data = array("title" => $this->title, "description" => $this->description, "captured" => $this->DateCaptured instanceof DateTime ? $this->DateCaptured->format("Y-m-d H:i:s") : null, "provider" => $this->provider, "photo_id" => $this->photo_id, "user_id" => $user_id, "meta" => json_encode(array("title" => $this->title, "description" => $this->description, "sizes" => $this->sizes, "links" => $this->links, "data" => $this->meta, "author" => $author)));
     if ($this->Place instanceof Place) {
         $data['lat'] = $this->Place->lat;
         $data['lon'] = $this->Place->lon;
     }
     // Update
     if (filter_var($this->id, FILTER_VALIDATE_INT)) {
         $this->Memcached->delete($this->mckey);
         $this->Redis->delete($this->mckey);
         $where = array("id = ?" => $this->id);
         $Date = new DateTime();
         $data['modified'] = $Date->format("Y-m-d g:i:s");
         $this->db->update("image", $data, $where);
         $this->getJSON();
         return $this;
     }
     // Insert
     $this->db->insert("image", $data);
     $this->id = $this->db->lastInsertId();
     $this->url = Utility\Url::CreateFromImageID($this->id);
     $this->getJSON();
     return $this;
 }
Пример #4
0
 /**
  * Get previous photos
  * @since Version 3.10.0
  * @return array
  * @param int $page
  * @param int $itemsPerPage
  */
 public function getPreviousPhotos($page = 1, $itemsPerPage = 25)
 {
     $Date = self::getStartOfWeek(new DateTime());
     $query = "SELECT SQL_CALC_FOUND_ROWS i.*, u.username, iw.added_by AS user_id FROM image_weekly AS iw\r\n                    LEFT JOIN image AS i ON iw.image_id = i.id\r\n                    LEFT JOIN nuke_users AS u ON u.user_id = iw.added_by\r\n                    WHERE iw.datefrom < ? LIMIT ?, ?";
     $params = [$Date->format("Y-m-d"), ($page - 1) * $itemsPerPage, $itemsPerPage];
     $result = $this->db->fetchAll($query, $params);
     $return = ["total" => 0, "page" => $page, "items_per_page" => $itemsPerPage, "photos" => []];
     $return['total'] = $this->db->fetchOne("SELECT FOUND_ROWS() AS total");
     foreach ($result as $row) {
         $row['meta'] = json_decode($row['meta'], true);
         $row['meta']['sizes'] = Images::normaliseSizes($row['meta']['sizes']);
         $row['url'] = Utility\Url::CreateFromImageID($row['id'])->getURLs();
         $return['photos'][] = $row;
     }
     return $return;
 }