public static function findRecursive($dir, $filters = NULL, $depth = -1, $limit = 0) { if (!$filters instanceof EFileFilters) { $filters = new EFileFilters($filters); } $list = new CList(); //TODO: $dir = new DirectoryIterator(dirname(__FILE__)); foreach ($dir as $fileinfo) {} $handle = opendir($dir); while (($fileName = readdir($handle)) !== FALSE) { if ($limit > 0 && $list->count >= $limit) { break; } if ($fileName === '.' || $fileName === '..') { continue; } $file = EFile::getInstance($dir . DIRECTORY_SEPARATOR . $fileName); //TODO: подумать о сортировке прямо в цикле поиска if ($filters->run($file)) { if ($file->isDir && $depth) { $list->mergeWith(self::findRecursive($file->path, $filters, $depth - 1, $limit - $list->count)); } else { $list->add($file); } } } closedir($handle); return $list; }
public function run() { if ($image = CUploadedFile::getInstanceByName($this->field)) { // Валидация по форме $v = new ImageForm(); $v->image = true; $v->image_file = $image; if ($v->validate()) { $preid = Yii::app()->request->getPost('preid', date('Ymd')); $tmp = pathinfo($image->name); $filename = EString::strtolower(EFile::sanitize($tmp['filename']) . '_' . uniqid() . '.' . $tmp['extension']); $path = Yii::getPathOfAlias($this->folder . '.' . $this->field) . DIRECTORY_SEPARATOR . $preid . DIRECTORY_SEPARATOR; $result = Image::addFile($image, $filename, $path, $this->sizes, $preid, null, $this->watermark ? Yii::app()->params['watermark'] : false); echo '"' . Image::getFile($result, 'normal') . '"'; } else { echo '{"error":"Файл не проходит валидацию, выберите другой."}'; } } else { echo '{"error":"Ошибка загрузки файла."}'; } }
public function actionNomenclature() { ini_set('memory_limit', '650M'); set_time_limit(0); $tyresForm = new ImportForm(); $result = array(); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST['ImportForm'])) { $tyresForm->attributes = $_POST['ImportForm']; if ($tyresForm->validate()) { # Вот тут начинается импорт Yii::import('ext.markdown.*'); Yii::import('ext.markdownify.*'); Yii::import('webroot.helpers.*'); #$tyresForm->file = CUploadedFile::getInstance($tyresForm, 'file'); /* Первая страница * 1. CAI * 2. Производитель * 3. Модель * 4. Сезон * 5. Применяемость * 6. Тип протектора * 7. Шипованность * 8. Ширина профиля(мм) * 9. Высота профиля (%) * 10. Диаметр (,R) * 11. Индекс скорости * 12. Индекс нагрузки * 13. Цена * 14. Фото, большое * 15. Фото, мелкое */ $uploaded = Yii::app()->file->set('ImportForm[file]'); Yii::app()->file->set(Yii::getPathOfAlias('webroot.files.' . $this->id . '.' . $this->action->id))->createDir(); $newfile = $uploaded->copy(strtolower(Yii::getPathOfAlias('webroot.files.' . $this->id . '.' . $this->action->id)) . '/' . $uploaded->basename); $newfile->filename = $newfile->filename . '.' . date('YmdHis'); Yii::import('ext.phpexcelreader.EPhpExcelReader'); $data = new EPhpExcelReader($newfile->realpath, false); $rowcount = $data->rowcount(); #$colcount = $data->colcount(); #$rowcount = 3; $r = 2; while ($r <= $rowcount) { $producer_alias = EString::strtolower(EString::sanitize($data->val($r, 2))); if (!($producer = TyreProducers::model()->find('alias=:alias', array(':alias' => $producer_alias)))) { $producer = new TyreProducers(); @($result['new_producers'] += 1); } else { @($result['old_producers'] += 1); } $producer->title = $data->val($r, 2); $producer->alias = $producer_alias; if (!$producer->save()) { $result['errors']['producer:' . $data->val($r, 1)] = $producer->errors; } $tyre_alias = EString::strtolower(EString::sanitize($data->val($r, 3))); if (!($tyre = Tyre::model()->find('alias=:alias', array(':alias' => $tyre_alias)))) { $tyre = new Tyre(); @($result['new_tyres'] += 1); } else { @($result['old_tyres'] += 1); } $tyre->producer_id = $producer->id; $tyre->title = $data->val($r, 3); $tyre->alias = $tyre_alias; $tyre->new = true; $tyre->currency = L::r_item('tyreCurrency', $data->val($r, 5)) ? L::r_item('tyreCurrency', $data->val($r, 5)) : 0; if ($data->val($r, 4) == 'зимние') { $tyre->season = L::r_item('tyreSeason', 'winter'); } if ($data->val($r, 4) == 'летние') { $tyre->season = L::r_item('tyreSeason', 'summer'); } if ($data->val($r, 4) == 'всесезонные') { $tyre->season = L::r_item('tyreSeason', 'yearround'); } $tyre->stud = $data->val($r, 7) ? 1 : 0; $tyre->construction_type = 1; $tyre->runflat_type = 0; // загрузка картинок... $alias = EString::sanitize($producer_alias . '_' . $tyre_alias); $path0 = Yii::getPathOfAlias('webroot.files.' . EString::strtolower('Tyre') . '.' . 'photo') . DIRECTORY_SEPARATOR; $f = false; $tmp_image = str_replace('.jpg', '.png', $data->val($r, 14)); if (!empty($tmp_image) && empty($tyre->photo)) { #d($tmp_image); #d($tyre->photo); foreach (Tyre::model()->images['photo']['sizes'] as $key => $size) { $pic = null; // папка в которой будет хранится картинка $path = $path0 . $key . DIRECTORY_SEPARATOR; // создаю папку если ее не было EFile::set($path)->createDir(); $pic = @file_get_contents('http://www.4tochki.ru' . $tmp_image); $info = pathinfo($tmp_image); #$row['pic_file'] - 117*(65-88) (лента слева) if (empty($pic)) { continue; } $fullpath = $path . $alias . '.jpg'; file_put_contents($fullpath, $pic); $pic = Yii::app()->image->load($fullpath); $pic->thumb(isset($size[0]) ? $size[0] : 0, isset($size[1]) ? $size[1] : 0, true, '#FFFFFF'); if ($key == 'big') { $pic->watermark(Yii::getPathOfAlias('webroot') . Yii::app()->params['watermark'], 5); } $pic->save($fullpath); $f = true; } if ($f) { if (!($image = Image::model()->find('filename=:alias', array(':alias' => '/files/tyre/photo/::size::/' . $alias . '.jpg')))) { $image = new Image(); } $image->created = date('Y-m-d H:i:s', strtotime($row['add_date'])); $image->filename = '/files/tyre/photo/::size::/' . $alias . '.jpg'; $image->title = $producer->title . ' ' . $tyre->title; $image->alt = $producer->title . ' ' . $tyre->title; $image->save(); $tyre->photo = '/files/tyre/photo/::size::/' . $alias . '.jpg'; } else { $tyre->photo = null; } } if (!$tyre->save()) { $result['errors']['tyre:' . $data->val($r, 1)] = $tyre->errors; } $cai = $data->val($r, 1); if (!($size = TyreSizes::model()->find('code=:code', array(':code' => $cai)))) { $size = new TyreSizes(); $size->alias = uniqid(); $size->save(false); @($result['new_size'] += 1); } else { @($result['old_size'] += 1); } $size->tyre_id = $tyre->id; $size->code = $cai; $size->width = $data->val($r, 8); $size->height = $data->val($r, 9); $size->diameter = $data->val($r, 10); $size->speed_rating = preg_replace('/[0-9]/isU', '', $data->val($r, 11)); $size->load_index = preg_replace('/[a-z]/isU', '', $data->val($r, 12)); $size->price = 0; $size->rest = 0; #d($size->attributes); $size->alias = $size->id . '-' . $size->width . '-' . $size->height . '-' . $size->diameter . '-' . $size->speed_rating . $size->load_index; # Сохраняю... if (!$size->save()) { $result['errors']['size:' . $data->val($r, 1)] = $size->errors; } $r++; } #$this->redirect(array('view','id'=>$model->id)); } } $this->render('nomenclature', array('model' => $tyresForm, 'results' => $result)); }
/** * Загрузка картинки */ protected function uploadImage($field, $name, $sizes, $alt = '', $title = '', $addWatermark = false, $bg = '#FFFFFF', $file_type = 'jpg', $saveOld = false) { /* * @string $field Имя виртуального поля в котром хранится файл * @string $name Имя файла, который будет сохранен на диске */ $owner = $owner = $this->getOwner(); if ($owner->{$field} instanceof CUploadedFile) { $filename = EString::strtolower(EFile::sanitize($name) . '.' . $file_type); $path = Yii::getPathOfAlias('webroot.files.' . EString::strtolower(get_class($owner)) . '.' . $field) . DIRECTORY_SEPARATOR; return $owner->{$field} = Image::addFile($owner->{$field}, $filename, $path, $sizes, $alt, $title, $addWatermark, $bg, $file_type, $saveOld); } }
public function actionNomenclature() { ini_set('memory_limit', '650M'); set_time_limit(0); $tyresForm = new ImportForm(); $result = array(); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); if (isset($_POST['ImportForm'])) { $tyresForm->attributes = $_POST['ImportForm']; if ($tyresForm->validate()) { # Вот тут начинается импорт $uploaded = Yii::app()->file->set('ImportForm[file]'); Yii::app()->file->set(Yii::getPathOfAlias('webroot.files.' . $this->id . '.' . $this->action->id))->createDir(); $newfile = $uploaded->copy(strtolower(Yii::getPathOfAlias('webroot.files.' . $this->id . '.' . $this->action->id)) . '/' . $uploaded->basename); $newfile->filename = $newfile->filename . '.' . date('YmdHis'); Yii::import('ext.phpexcelreader.EPhpExcelReader'); $data = new EPhpExcelReader($newfile->realpath, false); $sheet = 1; $rowcount = $data->rowcount($sheet); #$colcount = $data->colcount(); #$rowcount = 10; $r = 2; while ($r <= $rowcount) { $cai = $data->val($r, 1); if (empty($cai)) { $r++; continue; } $producer_alias = EString::strtolower(EString::sanitize($data->val($r, 2))); if (!($producer = DiskProducers::model()->find('alias=:alias', array(':alias' => $producer_alias)))) { $producer = new DiskProducers(); @($result['new_producers'] += 1); } else { @($result['old_producers'] += 1); } $producer->title = $data->val($r, 2); $producer->alias = $producer_alias; if (!$producer->save()) { $result['errors']['producer:' . $data->val($r, 1)] = $producer->errors; } $disk_alias = EString::strtolower(EString::sanitize($data->val($r, 3))); if (!($disk = Disk::model()->find('alias=:alias', array(':alias' => $disk_alias)))) { $disk = new Disk(); @($result['new_disks'] += 1); } else { @($result['old_disks'] += 1); } $disk->producer_id = $producer->id; $disk->title = $data->val($r, 3); $disk->alias = $disk_alias; $disk->color = 1; $disk->construction_type = L::r_item('diskConstructionType', 'alloy'); if ($data->val($r, 5)) { $disk->construction_type = L::r_item('diskConstructionType', 'forged'); } /* if($data->val($r, 4) && $data->val($r,5)) $disk->construction_type = L::r_item('diskConstructionType', 'scratched'); if(!($data->val($r, 4)) && !($data->val($r,5)) )) $disk->construction_type = L::r_item('diskConstructionType', 'stamped'); */ // загрузка картинок... $alias = EString::sanitize($producer_alias . '_' . $disk_alias); $path0 = Yii::getPathOfAlias('webroot.files.' . EString::strtolower('Disk') . '.' . 'photo') . DIRECTORY_SEPARATOR; $f = false; $tmp_image = str_replace('.jpg', '.png', $data->val($r, 12)); if (!empty($tmp_image) && empty($disk->photo)) { #d($tmp_image); #d($tyre->photo); foreach (Disk::model()->images['photo']['sizes'] as $key => $size) { $pic = null; // папка в которой будет хранится картинка $path = $path0 . $key . DIRECTORY_SEPARATOR; // создаю папку если ее не было EFile::set($path)->createDir(); $pic = @file_get_contents('http://www.4tochki.ru' . $tmp_image); $info = pathinfo($tmp_image); #$row['pic_file'] - 117*(65-88) (лента слева) if (empty($pic)) { continue; } $fullpath = $path . $alias . '.jpg'; file_put_contents($fullpath, $pic); $pic = Yii::app()->image->load($fullpath); $pic->thumb(isset($size[0]) ? $size[0] : 0, isset($size[1]) ? $size[1] : 0, true, '#FFFFFF'); if ($key == 'big') { $pic->watermark(Yii::getPathOfAlias('webroot') . Yii::app()->params['watermark'], 5); } $pic->save($fullpath); $f = true; } if ($f) { if (!($image = Image::model()->find('filename=:alias', array(':alias' => '/files/disk/photo/::size::/' . $alias . '.jpg')))) { $image = new Image(); } $image->created = date('Y-m-d H:i:s', strtotime($row['add_date'])); $image->filename = '/files/disk/photo/::size::/' . $alias . '.jpg'; $image->title = $producer->title . ' ' . $disk->title; $image->alt = $producer->title . ' ' . $disk->title; $image->save(); $disk->photo = '/files/disk/photo/::size::/' . $alias . '.jpg'; } else { $disk->photo = null; } } if (!$disk->save()) { $result['errors']['disk:' . $data->val($r, 1)] = $disk->errors; } if (!($size = DiskSizes::model()->find('code=:code', array(':code' => $cai)))) { $size = new DiskSizes(); $size->alias = uniqid(); $size->save(false); @($result['new_size'] += 1); } else { @($result['old_size'] += 1); } $size->disk_id = $disk->id; $size->code = $cai; /* * 1. cae * 2. producer.name * 3. model.name * 4. lit * 5. kov * 6. sh * 7. d * 8. pcd * 9. pcd2 * 10.vil * 11.dia */ $width_fl_point = preg_replace("/,/", ".", $data->val($r, 6)); $width_c = floatval(preg_replace("/^[^0-9\\.]/", "", $width_fl_point)); $size->width = $width_c; $size->diameter = $data->val($r, 7); $ET_fl_point = preg_replace("/,/", ".", $data->val($r, 10)); $ET_c = floatval(preg_replace("/^[^0-9\\.\\-]/", "", $ET_fl_point)); $size->ET = floatval($ET_c); list($size->PCD_screws, $PCD_diameter_fl_point) = preg_split('/[^\\d,\\.]+/i', $data->val($r, 8)); $PCD_diameter_fl_point = preg_replace("/,/", ".", $PCD_diameter_fl_point); $PCD_diameter_c = floatval(preg_replace("/^[^0-9\\.]/", "", $PCD_diameter_fl_point)); $size->PCD_diameter = $PCD_diameter_c; $DIA_fl_point = preg_replace("/,/", ".", $data->val($r, 11)); $DIA_c = floatval(preg_replace("/^[^0-9\\.]/", "", $DIA_fl_point)); $size->DIA = $DIA_c; $size->price = 0; $size->rest = 0; $size->alias = $size->id . '-' . $size->width . '-' . $size->diameter . '-' . $size->PCD_screws . '-' . $size->PCD_diameter . '-ET' . $size->ET . '-' . $size->DIA; if (!$size->save()) { $size->delete(); $result['errors']['size:' . $data->val($r, 1)] = $size->errors; } $r++; } #$this->redirect(array('view','id'=>$model->id)); } } $this->render('nomenclature', array('model' => $tyresForm, 'results' => $result)); }
/** * Загрузка картинки */ public function uploadImage($field, $name, $sizes, $alt = '', $title = '') { /* * @string $field Имя виртуального поля в котром хранится файл * @string $name Имя файла, который будет сохранен на диске */ if ($image = CUploadedFile::getInstance($this, $field)) { $orig_field = str_replace('_file', '', $field); $filename = EString::strtolower(EFile::sanitize($name) . '.' . $image->extensionName); $path = Yii::getPathOfAlias('webroot.files.' . EString::strtolower(__CLASS__) . '.' . $orig_field) . DIRECTORY_SEPARATOR; Image::deleteFile($this->{$orig_field}, $sizes); $this->{$orig_field} = Image::addFile($image, $filename, $path, $sizes, $alt, $title, false, '#FFFFFF'); } }