public function UploadAction() { // TODO:: album_id - проверять, этого ли пользователя альбом $request_user_id = (int) Project::getUser()->getShowedUser()->id; $user_id = (int) Project::getUser()->getDbUser()->id; $request = Project::getRequest(); $login = Project::getUser()->getDbUser()->login; $album_id = (int) $request->album_id; $access = (int) $request->pic_access; $album_model = new AlbumModel(); $album_model->load($album_id); if ((int) $album_model->user_id !== $user_id) { // This album not of current user - so can't upload photo in somebody else album $this->_view->addFlashMessage(FM::ERROR, "Ошибка доступа к загрузке фотографий"); $this->UploadFormAction($request->getKeys()); return; } if (!count($_FILES) || $_FILES['photo_file_1']['error'] == 4) { $this->_view->addFlashMessage(FM::ERROR, "Нет изображений для загрузки"); $this->UploadFormAction($request->getKeys()); return; } $ids = array(); $user_dir_size = HelpFunctions::getDirSize(USER_UPLOAD_DIR); foreach ($_FILES as $post_file) { $uploadfile = false; $dir = USER_UPLOAD_DIR . DIRECTORY_SEPARATOR . $login; $err = false; $ok = $this->checkDir($dir); if ($ok === true) { $album = $dir . DIRECTORY_SEPARATOR . 'album'; $ok = $this->checkDir($album); } if ($ok === true) { $images = $album . DIRECTORY_SEPARATOR . 'images'; $ok = $this->checkDir($images); } $ok_thumb = false; if ($ok === true) { $thumbs = $album . DIRECTORY_SEPARATOR . 'thumbs'; $ok_thumb = $this->checkDir($thumbs); } if (!$ok || !$ok_thumb) { $this->_view->addFlashMessage(FM::ERROR, $post_file['name'] . " ошибка загрузки изображения в директорию пользователя"); $this->UploadFormAction($request->getKeys()); return; } $p = pathinfo($post_file['name']); $ext = strtolower(trim(isset($p['extension']) ? $p['extension'] : null)); $fn = md5(uniqid(rand(), true)) . "." . $ext; $thumb = false; $uploaded = false; if ($ok === true) { $f = $images . DIRECTORY_SEPARATOR . $fn; $max_image_size = $this->getParam('max_image_size'); $max_userdir_size = $this->getParam('max_userdir_size'); $max_photo_width = $this->getParam('max_photo_width'); $user_dir_size += $post_file['size']; if ($max_image_size < $post_file['size']) { $this->_view->addFlashMessage(FM::ERROR, $post_file['name'] . " превышает максимальный размер фото (" . $max_image_size . " байт)"); $this->UploadFormAction($request->getKeys()); return; } elseif ($user_dir_size > $max_userdir_size) { $this->_view->addFlashMessage(FM::ERROR, "Вы превысили максимальный размер загруженных фото (" . $max_userdir_size . " байт)"); $this->UploadFormAction($request->getKeys()); return; } elseif (HelpFunctions::_imageResize($post_file['tmp_name'], $f, $max_photo_width, $ext)) { //move_uploaded_file($post_file['tmp_name'], $f) //HelpFunctions::_imageResize($post_file['tmp_name'], $f, $max_photo_width) // TODO:: write tщ log if thumb size no specified $width = $this->getParam('thumb_size', 99999); if ($width <= 0) { $width = 100; } if ($ok_thumb === true) { if (HelpFunctions::_imageResize($post_file['tmp_name'], $thumbs . DIRECTORY_SEPARATOR . $fn, $width, $ext)) { $thumb = true; } else { // TODO:: error resizing image } } } else { $this->_view->addFlashMessage(FM::ERROR, $post_file['name'] . " ошибка загрузки изображения"); $this->UploadFormAction($request->getKeys()); return; } } $photo_model = new PhotoModel(); $photo_model->user_id = $user_id; $photo_model->album_id = $album_id; $photo_model->path = $fn; $photo_model->thumbnail = $fn; $photo_model->access = $access; $photo_model->name = ''; $photo_model->is_onmain = 0; $photo_model->is_rating = 0; $photo_model->voices = 0; $photo_model->rating = 0; $photo_model->creation_date = date("Y-m-d H:i:s"); $ids[] = $photo_model->save(); } $c = new PhotoController(); $c->EditAction($ids, $album_id); $this->setContent($c->getContent()); //Project::getResponse() -> redirect($request -> createUrl('Album', 'UploadForm')); }
static function getDirSize($path) { $fileSize = 0; $dir = scandir($path); foreach ($dir as $file) { if ($file != '.' && $file != '..') { if (is_dir($path . '/' . $file)) { $fileSize += HelpFunctions::getDirSize($path . '/' . $file); } else { $fileSize += filesize($path . '/' . $file); } } } return $fileSize; }