function indexText($text, $type, $id, &$trigramValues, &$suggestionValues)
{
    if (!trim($text)) {
        return;
    }
    static $stopWords, $db;
    if (!$stopWords) {
        $stopWords = Lms_Application::getConfig('indexing', 'stop_words');
    }
    if (!$db) {
        $db = Lms_Db::get('main');
    }
    $trigrams = array();
    $textLength = Lms_Text::length($text);
    if ($textLength >= 3) {
        for ($i = 0; $i <= $textLength - 3; $i++) {
            $trigram = substr($text, $i, 3);
            $trigramValues[] = sprintf("('%s','%s',%d)", mysql_real_escape_string(strtolower($trigram)), $type, $id);
        }
    }
    preg_match_all('{\\w{2,}}', strtolower($text), $words, PREG_PATTERN_ORDER);
    $wordsFiltered = array();
    foreach (array_diff($words[0], $stopWords) as $word) {
        if (!preg_match('{^\\d+$}', $word)) {
            $wordsFiltered[] = $word;
        }
    }
    array_unshift($wordsFiltered, strtolower($text));
    //print_r($wordsFiltered);
    foreach ($wordsFiltered as $word) {
        $suggestionValues[] = sprintf("('%s','%s',%d)", mysql_real_escape_string(trim($word, ' .\'"')), $type, $id);
    }
}
 public static function logon($params)
 {
     $config = Lms_Application::getConfig('auth');
     $authProviderKey = $config['module'];
     $authClassName = 'Lms_Auth_Adapter_' . ucfirst($config['module']);
     $authAdapter = new $authClassName(Lms_Db::get($config['db']));
     $authAdapter->setIdentity($params['username'])->setCredential($params['password']);
     $auth = Lms_MultiAuth::getInstance();
     if (!$params['remember']) {
         $storage = $auth->getStorage();
         $storage->setCookieExpire(0);
     }
     $result = $auth->authenticate($authAdapter, $config['module']);
     if (!$result->isValid()) {
         $auth->clearIdentity();
         $errors = $result->getMessages();
         $translate = Lms_Application::getTranslate();
         foreach ($errors as &$error) {
             $error = $translate->translate($error);
         }
         return new Lms_Api_Response(401, 'Authorization failed', $errors);
     } else {
         return new Lms_Api_Response(200, 'OK');
     }
 }
 public static function updateLocalRating($filmId)
 {
     $db = Lms_Db::get('main');
     $ratings = $db->selectCol("SELECT Rating FROM userfilmratings WHERE FilmID=?d", $filmId);
     $rating = self::getBayes($ratings, Lms_Application::getConfig('minratingcount'));
     $db->query("UPDATE films SET LocalRating=?d, CountLocalRating=?d, LocalRatingDetail=? WHERE ID=?d", round(10 * $rating['bayes']), $rating['count'], serialize($rating['detail']), $filmId);
     return $rating;
 }
 public static function getFilm($params)
 {
     try {
         $filmId = (int) $params['film_id'];
         $user = Lms_User::getUser();
         $db = Lms_Db::get('main');
         if ($user->getId()) {
             $db->query('UPDATE users SET ViewActivity=ViewActivity+1 WHERE ID=?d', $user->getId());
         }
         $avgHit = $db->selectCell('SELECT sum(Hit)/count(*) FROM films WHERE Hide=0');
         $hitThreshold = round($avgHit * Lms_Application::getConfig('hit_factor'));
         $wheres = array();
         if (!$user->isAllowed("film", "moderate")) {
             $wheres[] = " films.Hide=0 ";
         }
         $sql = "SELECT films.ID as film_id, " . "films.Name as name, " . "films.OriginalName as international_name, " . "films.Year as year, " . "films.RunTime as runtime, " . "films.Description as description, " . "films.MPAA as mpaa, " . "films.Resolution as resolution, " . "films.VideoInfo as video_info, " . "films.AudioInfo as audio_info, " . "films.Translation as translation, " . "films.Quality as quality, " . "films.CreateDate as create_date, " . "films.UpdateDate as update_date, " . "ROUND(films.ImdbRating/10, 1) as rating_imdb_value, " . "IF(LENGTH(films.imdbID)>0, CONCAT('http://www.imdb.com/title/', films.imdbID), '') as imdb_url, " . "films.Poster as poster, " . "films.BigPosters as big_posters, " . "films.Trailer as trailer, " . "films.TypeOfMovie as type_of_movie, " . "films.Hide as hide, " . "films.Hit as hit, " . "films.SoundTrack as soundtrack, " . "films.Links as links, " . "films.Present as present, " . "films.Group as `group`, " . "films.Frames as frames, " . "films.SmallFrames as small_frames, " . "ufr.Rating as rating_personal_value, " . "ROUND(films.LocalRating/10, 1) as rating_local_value, " . "films.LocalRatingDetail as rating_local_detail, " . "films.CountLocalRating as rating_local_count, " . "users.Login as moderator " . "FROM films " . "    LEFT JOIN userfilmratings ufr ON (films.ID = ufr.FilmID AND ufr.UserID=?d) " . "    LEFT JOIN users ON (films.Moderator=users.ID) WHERE films.ID=?d" . (count($wheres) ? " AND " . implode(' AND ', $wheres) . " " : "");
         $film = $db->selectRow($sql, $user->getId(), $filmId);
         $result = array();
         if ($film) {
             $film["popular"] = $film['hit'] > $hitThreshold ? true : false;
             $film["hide"] = $film['hide'] ? true : false;
             $film["international_name"] = htmlentities($film["international_name"], ENT_NOQUOTES, 'cp1252');
             $film["genres"] = $db->selectCol('SELECT Name FROM filmgenres LEFT JOIN genres ON (genres.ID = filmgenres.GenreID) WHERE filmgenres.FilmID=?d', $filmId);
             $film["countries"] = $db->selectCol('SELECT Name FROM filmcountries LEFT JOIN countries ON (countries.ID = filmcountries.CountryID) WHERE filmcountries.FilmID=?d', $filmId);
             $rows = $db->select("SELECT persones.ID as person_id, persones.RusName as name, persones.OriginalName as international_name, persones.Images as old_photos, persones.Photos as photos, roles.Role as role, filmpersones.RoleExt as `character` FROM filmpersones LEFT JOIN roles ON (roles.ID = filmpersones.RoleID) LEFT JOIN persones ON (persones.ID = filmpersones.PersonID) WHERE filmpersones.FilmID=?d ORDER BY SortOrder, LENGTH(Images) DESC", $filmId);
             $persones = array();
             foreach ($rows as $row) {
                 $personId = $row['person_id'];
                 if ($row["role"] == "режиссер") {
                     $film['directors'][] = trim($row["name"]) ? $row["name"] : $row["international_name"];
                 }
                 $persones[$personId]['person_id'] = $personId;
                 $persones[$personId]['name'] = $row["name"];
                 $persones[$personId]['international_name'] = $row["international_name"];
                 $persones[$personId]['names'] = array_values(array_filter(array(trim($row["name"]), trim($row["international_name"]))));
                 $photos = array_values(array_filter(array_merge(preg_split("/(\r\n|\r|\n)/", $row["photos"]), preg_split("/(\r\n|\r|\n)/", $row["old_photos"]))));
                 $photo = array_shift($photos);
                 if ($photo) {
                     $photo = Lms_Application::thumbnail($photo, $width = 90, $height = 0, $defer = true);
                 }
                 $persones[$personId]['photo'] = $photo;
                 $persones[$personId]['roles'][] = array("role" => $row["role"], "character" => $row["character"]);
             }
             $film['persones'] = array_values($persones);
             $covers = array_values(array_filter(array_merge(preg_split("/(\r\n|\r|\n)/", $film["big_posters"]), preg_split("/(\r\n|\r|\n)/", $film["poster"]))));
             $film["cover"] = array_shift($covers);
             if ($film["cover"]) {
                 $film["cover"] = Lms_Application::thumbnail($film["cover"], $width = 200, $height = 0);
             }
             $film["frames"] = preg_split("/(\r\n|\r|\n)/", $film["frames"]);
             if ($film["frames"]) {
                 //TODO: delete frame_width, frame_height
                 list($width, $height) = getimagesize(dirname(APP_ROOT) . '/' . $film["frames"][0]);
                 $film["frame_width"] = $width;
                 $film["frame_height"] = $height;
                 $film["small_frames"] = array();
                 foreach ($film["frames"] as $frame) {
                     $film["small_frames"][] = Lms_Application::thumbnail($frame, $width = 225, $height);
                     $film["small_frame_width"] = $width;
                     $film["small_frame_height"] = $height;
                 }
             }
             $film["comments_count"] = $db->selectCell("SELECT count(*) as count FROM comments WHERE FilmID=?d AND (ISNULL(ToUserID) OR ToUserID=0 {OR ToUserID=?d OR UserID=?d})", $filmId, $user->getId() ? $user->getId() : DBSIMPLE_SKIP, $user->getId() ? $user->getId() : DBSIMPLE_SKIP);
             $rows = $db->select("SELECT ID as file_id, Name as name, Path as path, Size as `size`, ed2kLink as ed2k_link, dcppLink as dcpp_link FROM files WHERE FilmID=?d ORDER BY Path", $filmId);
             $files = array();
             foreach ($rows as $row) {
                 $links = array();
                 if (Lms_Application::getConfig('download', 'license')) {
                     $v = Lms_Application::getLeechProtectionCode(array($filmId, $row["file_id"], $user->getId()));
                     $links['license'] = "pl.php?player=ftp&uid=" . $user->getId() . "&filmid={$filmId}&fileid=" . $row["file_id"] . "&v={$v}";
                 } else {
                     $links['download'] = str_replace(Lms_Application::getConfig('source'), Lms_Application::getConfig('ftp'), $row['path']);
                     if ($encoding = Lms_Application::getConfig('download', 'escape', 'encoding')) {
                         $links['download'] = Lms_Translate::translate('CP1251', $encoding, $links['download']);
                     }
                     if (Lms_Application::getConfig('download', 'escape', 'enabled')) {
                         $t = explode("/", $links['download']);
                         for ($i = 3; $i < count($t); $i++) {
                             $t[$i] = rawurlencode($t[$i]);
                         }
                         $links['download'] = implode("/", $t);
                     }
                 }
                 if ($row['ed2k_link']) {
                     $links['ed2k'] = $row['ed2k_link'];
                 }
                 if ($row['dcpp_link']) {
                     $links['dcpp'] = $row['dcpp_link'];
                 }
                 $files[] = array('file_id' => $row['file_id'], 'name' => $row['name'], 'size' => $row['size'], 'links' => $links);
             }
             $film['files'] = $files;
             if (Lms_Application::getConfig('smb')) {
                 $mode = $user->getMode();
                 if (Lms_Application::getConfig('modes', $mode, 'smb')) {
                     $film['smb'] = 1;
                 }
             }
             if ($film["group"]) {
                 $films = $db->select("SELECT ID as film_id, Name as name, " . "   OriginalName as international_name, " . "   Year as year, " . "   CONCAT(BigPosters, '\n', Poster) as `covers` " . "FROM films " . "WHERE `Group`=? AND ID!=?d {AND films.Hide=?d} " . "ORDER BY Year", $film["group"], $filmId, $user->isAllowed("film", "moderate") ? DBSIMPLE_SKIP : 0);
                 Lms_Item_Film::postProcess($films, 90);
                 $film['other_films'] = $films;
             }
         } else {
             $film = null;
         }
         $result['film'] = $film;
         return new Lms_Api_Response(200, null, $result);
     } catch (Exception $e) {
         return new Lms_Api_Response(500, $e->getMessage());
     }
 }
 private function getCompiledItem()
 {
     $compress = Lms_Application::getConfig('optimize', 'js_compress');
     $filename = md5(serialize($this->_cache));
     $path = self::$cacheDir . $filename . ($compress ? '_compressed' : '') . '.js';
     if (!file_exists($path)) {
         Lms_Debug::debug("Combine javascripts to {$path}...");
         Lms_FileSystem::createFolder(dirname($path), 0777, true);
         $jsContent = '';
         foreach ($this->_cache as $js) {
             if (is_array($js)) {
                 $jsContent .= file_get_contents($js['filepath']) . "\n\n";
                 Lms_Debug::debug($js['filepath'] . ' ... OK');
             } else {
                 $jsContent .= $js . "\n\n";
                 Lms_Debug::debug('Inline JavaScript ... OK');
             }
         }
         if ($compress) {
             $jsContent = JSMin::minify($jsContent);
         }
         file_put_contents($path, $jsContent);
     }
     $url = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path);
     $item = $this->createData('text/javascript', array('src' => $url));
     return $item;
 }
 private function getCompiledItem()
 {
     $compress = Lms_Application::getConfig('optimize', 'css_compress');
     $filename = md5(serialize($this->_cache));
     $path = self::$cacheDir . $filename . ($compress ? '_compressed' : '') . '.css';
     if (!file_exists($path)) {
         Lms_Debug::debug("Combine css to {$path}...");
         Lms_FileSystem::createFolder(dirname($path), 0777, true);
         $cssContent = '';
         foreach ($this->_cache as $css) {
             $content = file_get_contents($css['filepath']);
             if ($compress) {
                 $cssContent .= Minify_CSS::minify($content, array('prependRelativePath' => dirname($path), 'currentDir' => dirname($css['filepath']), 'symlinks' => Lms_Application::getConfig('symlinks')));
             } else {
                 $cssContent .= Minify_CSS_UriRewriter::rewrite($content, dirname($css['filepath']), $_SERVER['DOCUMENT_ROOT'], Lms_Application::getConfig('symlinks'));
             }
             $cssContent .= "\n\n";
             Lms_Debug::debug($css['filepath'] . ' ... OK');
         }
         file_put_contents($path, $cssContent);
     }
     $url = str_replace($_SERVER['DOCUMENT_ROOT'], '', $path);
     $item = $this->createDataStylesheet(array('href' => $url));
     return $item;
 }
 public static function getHttpClient()
 {
     if (!self::$_httpClient) {
         $httpOptions = Lms_Application::getConfig('http_client');
         self::$_httpClient = new Zend_Http_Client(null, $httpOptions);
     }
     return self::$_httpClient;
 }