示例#1
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();
 }
示例#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 static function contextify(SelectQuery $query)
 {
     $limit = self::$request->get("l")->filter(Filter::isNumber())->filter(Filter::isPositiveNumber());
     $offset = self::$request->get("o")->filter(Filter::isNumber())->filter(Filter::isPositiveNumber());
     $sort_field = self::$request->get("sf");
     $sort_order = self::$request->get("so");
     $max_limit = self::$settings->get("catalog", "items_per_request_limit");
     $limit->then([$query, "limit"]);
     $offset->then([$query, "offset"]);
     //        $query->limit($limit->filter(Filter::isLessThan($max_limit))->getOrElse($max_limit));
     //        $query->offset($offset->orZero());
 }
示例#4
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();
 }
示例#5
0
 public function __construct()
 {
     $this->sources = new Sequence();
     $this->sources->push(http\HttpGet::getInstance());
     $this->sources->push(http\HttpPut::getInstance());
     $this->sources->push(http\HttpPost::getInstance());
     $this->sources->push(router\RouteArgs::getInstance());
 }