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 findModule($uri)
 {
     foreach (self::$shemaList as $partUri => $uriConfig) {
         if (Lms_Text::pos($uri, $partUri) === $uriConfig['pos']) {
             return $uriConfig['name'];
         }
     }
     return self::$defaultModule;
 }
 /**
  * Set strings encoding
  *
  * @param string $encoding
  */
 public static function setEncoding($encoding)
 {
     self::$encoding = $encoding;
 }
 private function _getPlugin($file)
 {
     static $pluginsCache = array();
     foreach ($this->plugins as $str => $plugin) {
         if (Lms_Text::pos($file, $str) === $plugin['pos']) {
             $module = $plugin['name'];
             if (!isset($pluginsCache[$module])) {
                 if ($class_name = $this->loadModule($module)) {
                     $pluginsCache[$module] = new $class_name();
                 }
             }
             return $pluginsCache[$module];
         }
     }
     throw new Lms_Exception('Plugin for "' . $file . '" not found!');
     return false;
 }
 private static function matchStrings($str1, $str2)
 {
     return self::compareStrings($str1, $str2) <= self::maxLevensteinDistance(Lms_Text::length($str1));
 }
 /**
  * Check whether a file is remote
  *
  * @param unknown_type $url
  * @return unknown
  */
 private static function _isRemote($url)
 {
     return (bool) (Lms_Text::pos($url, "http://") !== false || Lms_Text::pos($url, "ftp://") !== false);
 }
 public static function initVariables()
 {
     if (self::$_request) {
         self::$_rootUrl = self::$_request->getBaseUrl();
     }
     if (preg_match('{\\.php$}i', self::$_rootUrl)) {
         self::$_rootUrl = dirname(self::$_rootUrl);
     }
     Lms_Text::setEncoding('CP1251');
     Lms_Text::enableMultiByte();
     Lms_Api_Formatter_Ajax::setEncoding('CP1251');
     Lms_Api_Formatter_Json::setEncoding('CP1251');
     Lms_Thumbnail::setHttpClient(self::getHttpClient());
     Lms_Thumbnail::setThumbnailScript(self::getConfig('thumbnail', 'script'), self::getConfig('thumbnail', 'key'));
     Lms_Thumbnail::setImageDir(rtrim($_SERVER['DOCUMENT_ROOT'] . self::$_rootUrl, '/\\') . '/media/images');
     Lms_Thumbnail::setThumbnailDir(rtrim($_SERVER['DOCUMENT_ROOT'] . self::$_rootUrl, '/\\') . '/media/thumbnails');
     Lms_Thumbnail::setCache(self::getConfig('thumbnail', 'cache'));
 }
 private function _SplitToChunks($str, $chunksLimit)
 {
     $chunks = array();
     while ($chunksLimit-- > 0 && ($pos = Lms_Text::pos($str, " ")) !== false) {
         $chunks[] = Lms_Text::substring($str, 0, $pos);
         $str = ltrim(Lms_Text::substring($str, $pos));
     }
     $chunks[] = $str;
     return $chunks;
 }
 private static function timeDiff($dateFirst, $dateLast, $limitReturnChunks = 1, Zend_Translate $translator = null, $lang = 'en', $units = self::DEFAULT_UNITS, $precision = 0.25)
 {
     $timeFirst = strtotime($dateFirst);
     $timeLast = strtotime($dateLast);
     $diff = abs($timeLast - $timeFirst);
     $rest = $diff;
     $restChunks = $limitReturnChunks;
     if (strpos($units, 'y') !== false) {
         $years = floor($rest / self::YEAR);
         if ($restChunks <= 1 && ($rest - $years * self::YEAR) / $diff > $precision) {
             $years = 0;
         } else {
             $restChunks--;
         }
         $rest = $rest - $years * self::YEAR;
     } else {
         $years = 0;
     }
     if (strpos($units, 'm') !== false) {
         $months = floor($rest / self::MONTH);
         if ($restChunks <= 1 && ($rest - $months * self::MONTH) / $diff > $precision) {
             $months = 0;
         } else {
             $restChunks--;
         }
         $rest = $rest - $months * self::MONTH;
     } else {
         $months = 0;
     }
     if (strpos($units, 'w') !== false) {
         $weeks = floor($rest / self::WEEK);
         if ($restChunks <= 1 && ($rest - $weeks * self::WEEK) / $diff > $precision) {
             $weeks = 0;
         } else {
             $restChunks--;
         }
         $rest = $rest - $weeks * self::WEEK;
     } else {
         $weeks = 0;
     }
     if (strpos($units, 'd') !== false) {
         $days = floor($rest / self::DAY);
         if ($restChunks <= 1 && ($rest - $days * self::DAY) / $diff > $precision) {
             $days = 0;
         } else {
             $restChunks--;
         }
         $rest = $rest - $days * self::DAY;
     } else {
         $days = 0;
     }
     if (strpos($units, 'h') !== false) {
         $hours = floor($rest / self::HOUR);
         if ($restChunks <= 1 && ($rest - $hours * self::HOUR) / $diff > $precision) {
             $hours = 0;
         } else {
             $restChunks--;
         }
         $rest = $rest - $hours * self::HOUR;
     } else {
         $hours = 0;
     }
     if (strpos($units, 'i') !== false) {
         $mins = floor($rest / self::MIN);
         if ($restChunks <= 1 && ($rest - $mins * self::MIN) / $diff > $precision) {
             $mins = 0;
         } else {
             $restChunks--;
         }
         $rest = $rest - $mins * self::MIN;
     } else {
         $mins = 0;
     }
     if (strpos($units, 's') !== false) {
         $seconds = $rest;
     } else {
         $seconds = 0;
     }
     $chunks = array('year(s)' => $years, 'month(s)' => $months, 'week(s)' => $weeks, 'day(s)' => $days, 'hour(s)' => $hours, 'min(s)' => $mins, 'second(s)' => $seconds);
     $outputStr = '';
     $i = 0;
     foreach ($chunks as $chunkName => $value) {
         if ($value) {
             if ($translator) {
                 $chunkName = $translator->translate($chunkName);
             }
             $translatedChunkNames = explode(" ", $chunkName);
             $translatedChunkName = Lms_Text::declension($value, $translatedChunkNames, $lang);
             $outputStr .= " {$value} {$translatedChunkName}";
             $i++;
             if ($i >= $limitReturnChunks) {
                 break;
             }
         }
     }
     $outputStr = trim($outputStr);
     return $outputStr;
 }