Пример #1
0
 protected function validate()
 {
     parent::validate();
     $this->_name = $this->name->orEmpty();
     if (Users::checkEmailConstraint($this->_email)) {
         throw new ValidatorException("User with this email already registered");
     }
 }
Пример #2
0
 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;
     });
 }
Пример #3
0
 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
     //        ));
 }
Пример #4
0
 /**
  * @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();
 }
Пример #5
0
 /**
  * @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();
 }
Пример #6
0
 /**
  * @param $args
  * @return Option
  */
 public static function ifInstance(...$args)
 {
     if (self::hasInstance(...$args)) {
         return Option::Some(self::getInstance(...$args));
     } else {
         return Option::None();
     }
 }
Пример #7
0
 /**
  * @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();
     }
 }
Пример #8
0
 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;
     });
 }
Пример #9
0
 /**
  * @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]);
     }
 }
Пример #10
0
 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();
 }
Пример #11
0
 /**
  * @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();
     }
 }
Пример #12
0
 /**
  * @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);
 }
Пример #13
0
 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();
 }
Пример #14
0
 /**
  * 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);
 }
Пример #15
0
 /**
  * @param $callback
  * @return Option
  */
 public function firstMatching($callback)
 {
     foreach ($this->array as $item) {
         if ($callback($item)) {
             return Option::Some($item);
         }
     }
     return Option::None();
 }
Пример #16
0
 /**
  * @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);
 }
Пример #17
0
 /**
  * @param string $key
  * @return Option
  */
 public function get($key)
 {
     return $this->isDefined($key) ? Option::Some($this->getValue($key)) : Option::None();
 }
Пример #18
0
/**
 * @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();
}
Пример #19
0
 public function findHardRoute()
 {
     if (class_exists($this->route->getRouteClass())) {
         return Option::Some(array("action" => $this->route->getRouteClass(), "args" => array()));
     }
     return Option::None();
 }
Пример #20
0
 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));
 }