コード例 #1
0
 public function actionIndex()
 {
     exit;
     // prepare logger to dump logs every time one comes in
     Yii::getLogger()->autoFlush = 1;
     Yii::getLogger()->autoDump = true;
     function getNewFileName($fileName)
     {
         $ext = pathinfo($fileName, PATHINFO_EXTENSION);
         $oldName = pathinfo($fileName, PATHINFO_FILENAME);
         return md5(uniqid($fileName)) . '.' . $ext;
     }
     function getmicrotime()
     {
         list($usec, $sec) = explode(" ", microtime());
         return (double) $usec + (double) $sec;
     }
     function logParse($message)
     {
         Yii::log($message, CLogger::LEVEL_TRACE, 'parse');
         Yii::getLogger()->flush(true);
     }
     logParse("Begin");
     $begin = getmicrotime();
     $regexpArray = array('p' => '~^p\\..+~iU', 'pl' => '~^pl\\..+~iU', 'plx' => '~^plx\\..+~iU');
     $titlesArray = array('p' => '', 'pl' => 'Плитка из камня', 'plx' => 'Плитка из камня с подсветкой');
     $parsePath = Yii::app()->uploadManager->getBasePath() . DIRECTORY_SEPARATOR . $this->module->uploadPath . DIRECTORY_SEPARATOR . 'parse_tile';
     $seriesList = glob($parsePath . DIRECTORY_SEPARATOR . '*', GLOB_BRACE | GLOB_ONLYDIR);
     $stones = array();
     $imagesFiles = array();
     // Обработка серий
     foreach ($seriesList as $skey => $seriesPath) {
         //if($skey > 1) break;
         $seriesAlias = basename($seriesPath);
         if ($seriesAlias == '.' || $seriesAlias == '..') {
             continue;
         }
         $series = Series::model()->findByAlias($seriesAlias);
         if (is_null($series)) {
             logParse("Серия " . $seriesAlias . " не найдена");
             echo "Серия " . $seriesAlias . " не найдена<br />";
             exit;
         }
         echo '<h1>' . $series->title . '</h1>';
         logParse("Series " . $series->title);
         $stonesList = glob($seriesPath . DIRECTORY_SEPARATOR . '*', GLOB_BRACE | GLOB_ONLYDIR);
         $stonesCounter = 0;
         $stoneImagesCounter = 0;
         $sort = 0;
         foreach ($stonesList as $stonePath) {
             $stoneTitle = basename($stonePath);
             if ($stoneTitle == '.' || $stoneTitle == '..') {
                 continue;
             }
             //echo '<h3>' . $stoneTitle . '</h3>';
             $stonesCounter++;
             $sort += 100;
             $stone = new Stone();
             $stone->type_id = 2;
             $stone->series_id = $series->id;
             $stone->title = $stoneTitle;
             $stone->metatitle = $stone->keywords = $stone->description = $stone->title;
             // Генерация алиаса
             $alias = \yupe\helpers\YText::translit($stone->title) . '-tile';
             if ($stone->findByAlias($alias) !== null) {
                 $alias = $alias . '-' . mt_rand(10000, 99999);
             }
             $stone->alias = $alias;
             $stone->sort = $sort;
             $imagesList = array();
             foreach ($regexpArray as $key => $regexp) {
                 foreach (CFileHelper::findFiles($stonePath) as $file) {
                     //echo $file . '<br />';
                     if (preg_match($regexp, basename($file))) {
                         $imagesList[$key] = $file;
                     }
                 }
             }
             $stoneImages = array();
             foreach ($imagesList as $key => $item) {
                 $itemName = basename($item);
                 $newName = getNewFileName($item);
                 $imagesFiles[] = array('fullPath' => $item, 'name' => $itemName, 'newName' => $newName);
                 if (preg_match($regexpArray['p'], $itemName)) {
                     $stone->image = $newName;
                     //echo $itemName . '<br />';
                 } else {
                     $image = new StoneImage();
                     $image->title = $titlesArray[$key];
                     $image->image = $newName;
                     $stoneImages[] = $image;
                 }
                 //echo $itemName . '<br />';
                 $stoneImagesCounter++;
             }
             $stone->images = $stoneImages;
             $stones[] = $stone;
         }
         echo 'Камней: ' . $stonesCounter . '<br />';
         echo 'Изображений: ' . $stoneImagesCounter . '<br />';
         echo '<hr>';
     }
     // Сохраняем камни и изображения в БД
     foreach ($stones as $stone) {
         logParse($stone->title);
         if ($stone->save(false)) {
             $imagesCounter = 0;
             foreach ($stone->images as $image) {
                 $imagesCounter += 100;
                 $image->item_id = $stone->id;
                 $image->sort = $imagesCounter;
                 if (!$image->save(false)) {
                     logParse($image->image . ' - error');
                     echo $image->image . ' - error<br />';
                 }
             }
             logParse('success');
         } else {
             logParse('error');
             //echo $stone->title . ' - error<br />';
             //var_dump($stone->getErrors());
         }
     }
     // Копируем изображения
     foreach ($imagesFiles as $image) {
         copy($image['fullPath'], Yii::app()->uploadManager->getBasePath() . DIRECTORY_SEPARATOR . $this->module->getStonesUploadPath() . DIRECTORY_SEPARATOR . $image['newName']);
     }
     $end = getmicrotime();
     $time = $end - $begin;
     echo "Время выполнения скрипта: " . $time . "с.";
     logParse("Время выполнения скрипта: " . $time . "с.");
     echo '<hr>';
 }
コード例 #2
0
 public function actionIndex()
 {
     // prepare logger to dump logs every time one comes in
     Yii::getLogger()->autoFlush = 1;
     Yii::getLogger()->autoDump = true;
     function getNewFileName($fileName)
     {
         $ext = pathinfo($fileName, PATHINFO_EXTENSION);
         $oldName = pathinfo($fileName, PATHINFO_FILENAME);
         return md5(uniqid($fileName)) . '.' . $ext;
     }
     function getmicrotime()
     {
         list($usec, $sec) = explode(" ", microtime());
         return (double) $usec + (double) $sec;
     }
     function logParse($message)
     {
         Yii::log($message, CLogger::LEVEL_TRACE, 'parse');
         Yii::getLogger()->flush(true);
     }
     logParse("Begin");
     $begin = getmicrotime();
     /*
             $regexpArray = array(
        'mm'    => '~^mm[^x]*\..+~iU',
        'fr1'   => '~^fr[\d]{0,2}[^x]*\..+~iU',
        'sl'    => '~^sl[\d]{0,2}[^x]*\..+~iU',
        'b1'    => '~^b1[^x]*\..+~iU',
        'b2'    => '~^b2[^x]*\..+~iU',
        'frx'   => '~^fr[\d]{0,2}x.*\..+~iU',
        'slx'   => '~^slx.*\..+~iU',
        'b1x'   => '~^b1x.*\..+~iU',
        'b2x'   => '~^b2x.*\..+~iU',
             );
     *
     */
     $regexpArray = array('mm' => '~^mm\\..+~iU', 'fr' => '~^fr\\..+~iU', 'fr2' => '~^fr2\\..+~iU', 'sl' => '~^sl\\..+~iU', 'b1' => '~^b1\\..+~iU', 'b2' => '~^b2\\..+~iU', 'frx' => '~^frx.*\\..+~iU', 'slx' => '~^slx.*\\..+~iU', 'b1x' => '~^b1x.*\\..+~iU', 'b2x' => '~^b2x.*\\..+~iU');
     $titlesArray = array('mm' => '', 'fr' => 'Фрагмент', 'fr2' => 'Фрагмент 2', 'sl' => 'Слеб', 'b1' => 'Bookmatch 1', 'b2' => 'Bookmatch 2', 'frx' => 'Фрагмент с подсветкой', 'slx' => 'Слеб с подсветкой', 'b1x' => 'Bookmatch 1 с подсветкой', 'b2x' => 'Bookmatch 2 с подсветкой');
     $parsePath = Yii::app()->uploadManager->getBasePath() . DIRECTORY_SEPARATOR . $this->module->geParsePath();
     $seriesList = glob($parsePath . DIRECTORY_SEPARATOR . '*', GLOB_BRACE | GLOB_ONLYDIR);
     $stones = array();
     $imagesFiles = array();
     // Обработка серий
     foreach ($seriesList as $seriesPath) {
         $seriesAlias = basename($seriesPath);
         if ($seriesAlias == '.' || $seriesAlias == '..') {
             continue;
         }
         $series = Series::model()->findByAlias($seriesAlias);
         if (is_null($series)) {
             logParse("Серия " . $seriesAlias . " не найдена");
             echo "Серия " . $seriesAlias . " не найдена<br />";
             exit;
         }
         echo '<h1>' . $series->title . '</h1>';
         logParse("Series " . $series->title);
         $stonesList = glob($seriesPath . DIRECTORY_SEPARATOR . '*', GLOB_BRACE | GLOB_ONLYDIR);
         $stonesCounter = 0;
         $stoneImagesCounter = 0;
         $sort = 0;
         foreach ($stonesList as $stonePath) {
             $stoneTitle = basename($stonePath);
             if ($stoneTitle == '.' || $stoneTitle == '..') {
                 continue;
             }
             //echo '<h3>' . $stoneTitle . '</h3>';
             $stonesCounter++;
             $sort += 100;
             $stone = new Stone();
             $stone->series_id = $series->id;
             $stone->title = $stoneTitle;
             $stone->metatitle = $stone->keywords = $stone->description = $stone->title;
             $stone->generateAlias();
             $stone->sort = $sort;
             $imagesList = array();
             foreach ($regexpArray as $key => $regexp) {
                 foreach (CFileHelper::findFiles($stonePath) as $file) {
                     if (preg_match($regexp, basename($file))) {
                         $imagesList[$key] = $file;
                     }
                 }
             }
             $stoneImages = array();
             foreach ($imagesList as $key => $item) {
                 $itemName = basename($item);
                 $newName = getNewFileName($item);
                 $imagesFiles[] = array('fullPath' => $item, 'name' => $itemName, 'newName' => $newName);
                 if (preg_match($regexpArray['mm'], $itemName)) {
                     $stone->image = $newName;
                     //echo $itemName . '<br />';
                 } else {
                     $image = new StoneImage();
                     $image->title = $titlesArray[$key];
                     $image->image = $newName;
                     $stoneImages[] = $image;
                 }
                 //echo $itemName . '<br />';
                 $stoneImagesCounter++;
             }
             $stone->images = $stoneImages;
             $stones[] = $stone;
         }
         echo 'Камней: ' . $stonesCounter . '<br />';
         echo 'Изображений: ' . $stoneImagesCounter . '<br />';
         echo '<hr>';
     }
     // Сохраняем камни и изображения в БД
     foreach ($stones as $stone) {
         logParse($stone->title);
         if ($stone->save(false)) {
             $imagesCounter = 0;
             foreach ($stone->images as $image) {
                 $imagesCounter += 100;
                 $image->item_id = $stone->id;
                 $image->sort = $imagesCounter;
                 if (!$image->save(false)) {
                     logParse($image->image . ' - error');
                     echo $image->image . ' - error<br />';
                 }
             }
             logParse('success');
         } else {
             logParse('error');
             //echo $stone->title . ' - error<br />';
             //var_dump($stone->getErrors());
         }
     }
     // Копируем изображения
     foreach ($imagesFiles as $image) {
         copy($image['fullPath'], Yii::app()->uploadManager->getBasePath() . DIRECTORY_SEPARATOR . $this->module->getStonesUploadPath() . DIRECTORY_SEPARATOR . $image['newName']);
     }
     $end = getmicrotime();
     $time = $end - $begin;
     echo "Время выполнения скрипта: " . $time . "с.";
     logParse("Время выполнения скрипта: " . $time . "с.");
     echo '<hr>';
 }