protected function validate() { parent::validate(); $this->_name = $this->name->orEmpty(); if (Users::checkEmailConstraint($this->_email)) { throw new ValidatorException("User with this email already registered"); } }
public function doGet(Option $q, HttpGet $get, LoggedIn $me, Option $compilations) { $artist = $get->get("artist")->map("urldecode"); $album = $get->get("album")->map("urldecode"); $genre = $get->get("genre")->map("urldecode"); $order_field = $get->getOrElse("sort", "auto"); $filter = $q->map("trim")->reject(""); $query = (new SelectQuery(TSongs::_NAME))->where(TSongs::USER_ID, $me->getId())->where(TSongs::FILE_ID . " IS NOT NULL"); $query->select(TSongs::defaultSelection()); if ($compilations->nonEmpty()) { $query->where(TSongs::IS_COMP, $compilations->get()); } Context::contextify($query); if ($artist->nonEmpty()) { $query->where(TSongs::A_ARTIST, $artist->get()); } if ($album->nonEmpty()) { $query->where(TSongs::T_ALBUM, $album->get()); } if ($genre->nonEmpty()) { $query->where(TSongs::T_GENRE, $genre->get()); } if ($filter->nonEmpty()) { if (strpos($filter->get(), ":") !== false) { list($key, $value) = explode(":", $filter->get(), 2); switch ($key) { case "id": $query->where(TSongs::ID, $value); break; } } else { $query->where(TSongs::FTS_ANY . " @@ plainto_tsquery(?)", [$filter->get()]); } } else { switch ($order_field) { case 'upload': $query->orderBy(TSongs::C_DATE . " DESC")->orderBy(TSongs::ID); break; default: $query->orderBy(TSongs::A_ARTIST)->orderBy(TSongs::T_ALBUM)->orderBy(TSongs::DISC)->orderBy(TSongs::T_NUMBER)->orderBy(TSongs::ID); } } ob_start("ob_gzhandler"); $query->renderAllAsJson(function ($row) { $artist_encoded = escape_url($row["album_artist"]); $album_encoded = escape_url($row["track_album"]); $genre_encoded = escape_url($row["track_genre"]); $row["artist_url"] = "artist/{$artist_encoded}"; $row["album_url"] = "artist/{$artist_encoded}/{$album_encoded}"; $row["genre_url"] = "genre/{$genre_encoded}"; return $row; }); }
public function doGet(LoggedIn $me, Option $sync_token) { $token = $sync_token->getOrElse(0); $new_tracks = (new SelectQuery(TSongs::_NAME))->select(TSongs::getFullColumnNames())->innerJoin(TSongsLog::_NAME, TSongs::_NAME . "." . TSongs::ID, TSongsLog::SONG_ID)->where(TSongsLog::_NAME . "." . TSongsLog::USER_ID, $me->getId())->where(TSongsLog::_NAME . "." . TSongsLog::ACTION, TSongsLog::ACTION_ADD)->where(TSongsLog::_NAME . "." . TSongsLog::ID . " > ?", array($token))->fetchAll(); // $updated_tracks = (new SelectQuery(TSongs::_NAME)) // ->select(TSongs::getFullColumnNames()) // ->innerJoin(TSongsLog::_NAME, TSongs::_NAME . "." . TSongs::ID, TSongsLog::SONG_ID) // ->where(TSongsLog::_NAME . "." . TSongsLog::USER_ID, $me->getId()) // ->where(TSongsLog::_NAME . "." . TSongsLog::ACTION, TSongsLog::ACTION_UPDATE) // ->where(TSongsLog::_NAME . "." . TSongsLog::ID . " > ?", array($token)) // ->fetchAll(); // echo json_encode(array( // "new" => $new_tracks, // "updated" => $updated_tracks // )); }
/** * @return Option */ public function getLanguage() { if (filter_input(INPUT_SERVER, 'HTTP_ACCEPT_LANGUAGE')) { return Option::Some(substr(filter_input(INPUT_SERVER, 'HTTP_ACCEPT_LANGUAGE'), 0, 2)); } return Option::None(); }
/** * @param string $section * @param string $key * @return Option */ public function find($section, $key) { if (isset($this->_settings[$section][$key])) { return Option::Some($this->_settings[$section][$key]); } return Option::None(); }
/** * @param $args * @return Option */ public static function ifInstance(...$args) { if (self::hasInstance(...$args)) { return Option::Some(self::getInstance(...$args)); } else { return Option::None(); } }
/** * @param $key * @return Option */ public static function getMy($key) { $hash = self::hash($key); if (self::$redis->exists(self::myPrefix() . ":" . $hash)) { return Option::Some(unserialize(self::$redis->get(self::myPrefix() . ":" . $hash))); } else { return Option::None(); } }
public function doGet(Option $q, LoggedIn $me) { $filter = $q->map("trim")->reject(""); $query = (new SelectQuery(TSongs::_NAME))->select(TSongs::A_ARTIST)->where(TSongs::USER_ID, $me->getId())->selectAlias("MIN(" . TSongs::C_BIG_ID . ")", TSongs::C_BIG_ID)->selectAlias("MIN(" . TSongs::C_MID_ID . ")", TSongs::C_MID_ID)->selectAlias("MIN(" . TSongs::C_SMALL_ID . ")", TSongs::C_SMALL_ID); $query->where(TSongs::IS_COMP, "0"); Context::contextify($query); if ($filter->nonEmpty()) { $query->where(TSongs::FTS_ARTIST . " @@ plainto_tsquery(?)", [$filter->get()]); } $query->addGroupBy(TSongs::A_ARTIST); $query->orderBy(TSongs::A_ARTIST); ob_start("ob_gzhandler"); $query->renderAllAsJson(function ($row) { $artist_encoded = escape_url($row["album_artist"]); $row["artist_url"] = "artist/{$artist_encoded}"; return $row; }); }
/** * @return Option */ public function findAny() { if (count(array_keys($_FILES)) == 0) { return Option::None(); } else { $key = array_keys($_FILES)[0]; return Option::Some($_FILES[$key]); } }
function __construct() { $http_get = new HttpGet(); $this->raw = preg_replace('/(\\.(html|php)$)|(\\/$)/', '', $http_get->getOrElse("route", self::DEFAULT_ROUTE)); $this->route = str_replace('/', '\\', FIXED_ROUTES_PATH . preg_replace_callback('/(?:.*\\/)*(.+)$/', function ($match) { return "Do" . ucfirst($match[1]); }, $this->raw)); $this->default_handler = Option::None(); }
/** * @param string $artist * @param string $album * @return Option */ public function getAlbumCover($artist, $album) { $data = self::exec(self::API_URL, array("format" => "json", "method" => "album.getinfo", "api_key" => self::API_KEY, "artist" => $artist, "album" => $album)); if (isset($data["album"]["image"])) { $images = $data["album"]["image"]; $image_url = $images[count($images) - 1]["#text"]; return Option::Some($image_url); } else { return Option::None(); } }
/** * @param $keys * @return Option */ public function get(...$keys) { $handle =& $_SESSION; foreach ($keys as $key) { if (isset($handle[$key])) { $handle =& $handle[$key]; } else { return Option::None(); } } return Option::Some($handle); }
function __construct() { $http_get = new HttpGet(); $this->raw = preg_replace('/(\\.(html|php)$)|(\\/$)/', '', $http_get->getOrElse("route", self::DEFAULT_ROUTE)); $route_array = explode("/", $this->raw); error_log(sprintf("::: %s :::", $this->raw)); end($route_array); $key = key($route_array); $route_array[$key] = "Do" . ucfirst($route_array[$key]); reset($route_array); $this->route = Tools::turnSlashes(FIXED_ROUTES_PATH . implode('/', $route_array)); $this->default_handler = Option::None(); }
/** * Reads audio file metadata and returns Metadata object. * * @param string $filename * @param string $original_filename * @return Some */ public static function read($filename, $original_filename = null) { $escaped_filename = escapeshellarg($filename); $file_format = strtolower(pathinfo($original_filename, PATHINFO_EXTENSION)); $command = sprintf(self::$settings->get("command_templates", "read_metadata"), self::$settings->get("tools", "ffprobe_cmd"), $escaped_filename); exec($command, $result, $status); if ($status != 0) { return Option::None(); } /** * @var Option[] $metadata * @var Option[] $o_format * @var Option[] $o_tags */ $metadata = Option::Some(json_decode(implode("", $result), true)); $o_format = $metadata["format"]; $o_tags = $o_format["tags"]; $object = new Metadata(); $object->format_name = $file_format; $object->filename = $o_format["filename"]->get(); $object->duration = $o_format["duration"]->map(function ($value) { return intval($value * 1000); })->get(); $object->size = $o_format["size"]->toInt()->get(); $object->bitrate = $o_format["bit_rate"]->toInt()->get(); $object->meta_artist = $o_tags["artist"]->orEmpty(); $object->meta_title = $o_tags["title"]->orEmpty(); $object->meta_genre = $o_tags["genre"]->orEmpty(); $object->meta_date = $o_tags["date"]->orEmpty(); $object->meta_album = $o_tags["album"]->orEmpty(); $object->meta_track_number = $o_tags["track"]->toInt()->orNull(); $object->meta_disc_number = $o_tags["disc"]->toInt()->orNull(); $object->meta_album_artist = $o_tags["album_artist"]->orEmpty(); $object->is_compilation = $o_tags["compilation"]->map("bool")->getOrElse("false"); $object->meta_comment = $o_tags["comment"]->orEmpty(); return Option::Some($object); }
/** * @param $callback * @return Option */ public function firstMatching($callback) { foreach ($this->array as $item) { if ($callback($item)) { return Option::Some($item); } } return Option::None(); }
/** * @param string $query * @param array $params * @param string $class * @param array|null $ctr_args * @throws ApplicationException * @return Option */ public function fetchOneObject($query, array $params = null, $class, array $ctr_args = []) { $resource = $this->createResource($query, $params); $object = $resource->fetchObject($class, $ctr_args); return Option::Some($object)->reject(false); }
/** * @param string $key * @return Option */ public function get($key) { return $this->isDefined($key) ? Option::Some($this->getValue($key)) : Option::None(); }
/** * @param $arg * @return Option */ function part_audio_type($arg) { $formats = array("mp3" => "audio/mp3", "ogg" => "audio/ogg", "flac" => "audio/flac", "m4a" => "audio/aac", "aac" => "audio/aac", "ape" => "audio/ape", "wma" => "audio/x-ms-wma", "wav" => "audio/x-wav"); return isset($formats[$arg]) ? Option::Some($formats[$arg]) : Option::None(); }
public function findHardRoute() { if (class_exists($this->route->getRouteClass())) { return Option::Some(array("action" => $this->route->getRouteClass(), "args" => array())); } return Option::None(); }
public function validate() { $this->_name = $this->name->orThrow(ValidatorException::class, "Enter playlist name")->filter(Filter::lengthInRange(1, VALIDATOR_PLAYLIST_NAME_MAX_LENGTH))->getOrThrow(ValidatorException::class, sprintf("Playlist name must be in range from 1 to %d chars", VALIDATOR_PLAYLIST_NAME_MAX_LENGTH)); }