InsertInformationPropertysItems - дополнительные атрибуты функции

#
InsertInformationPropertysItems - дополнительные атрибуты функции
На версии Халява, делаю форму, для добавления файла пользователем в доп. свойство элемента.

Метод использую следующий:
InsertInformationPropertysItems( int $type, int $information_propertys_items_id, int $information_propertys_id, int $information_items_id, string $information_propertys_items_value, [mixed $information_propertys_items_file = ''], [mixed $information_propertys_items_value_small = ''], [mixed $information_propertys_items_file_small = ''] );


В документации описан пример для добавления файла для самого элемента или группы, а для доп. свойства не описано. Плюс к этому не описаны дополнительные атрибуты функции в документации:
$information_propertys_items_value
$information_propertys_items_file
$information_propertys_items_value_small
$information_propertys_items_file_small


Так вот, все-таки как мне добавить файл в доп.свойство элемента при помощи API, а конкретно метода InsertInformationPropertysItems?
Модератор
#
Re: InsertInformationPropertysItems - дополнительные атрибуты функции
mrspd,
Показываю фрагмент:
// Вставляем свойства элемента в таблицу связи
               $information_propertys_item_value_id = $information_system->InsertInformationPropertysItems(0, 0, $information_propertys_item_id, $information_item_id,  $information_propertys_item_value, '', $information_propertys_item_value_small, '');

               // Загружаем файл
               // Тип свойства - файл
               if ($row_propertys['information_propertys_type'] == 2)
               {
                  // Параметры картинок для доп. свойства.
                  $property_image_big_max_width = to_int($_POST['big_image_max_width_property' . $information_propertys_item_id]);
                  $property_image_big_max_height = to_int($_POST['big_image_max_height_property' . $information_propertys_item_id]);
                  $property_image_small_max_width = to_int($_POST['small_image_max_width_property' . $information_propertys_item_id]);
                  $property_image_small_max_height = to_int($_POST['small_image_max_height_property' . $information_propertys_item_id]);

                  $uploaddir = CMS_FOLDER . UPLOADDIR . 'private/';

                  // Передан файл - загружаем его
                  if (is_dir($uploaddir))
                  {
                     $information_property_image = '';
                     $information_property_small_image ='';

                     if ($_FILES['property' . $information_propertys_item_id]['tmp_name'] && $_FILES['property' . $information_propertys_item_id]['size'])
                     {
                        // Определяем расширение файла
                        $exp = strtolower($kernel->GetExtension($_FILES['property' . $information_propertys_item_id]['name']));

                        $information_property_image = $uploaddir . 'information_items_property_' . $information_propertys_item_value_id . '.' . $exp;

                        $information_property_small_image = $uploaddir . 'small_information_items_property_' . $information_propertys_item_value_id . '.' . $exp;
                     }


                     // Задано малое изображение и при этом не задано создание малого изображения
                     // из большого или задано создание малого изображения из большого и
                     // при этом не задано большое изображение.

                     if (isset($_FILES['property' . $information_propertys_item_id . '_small']['tmp_name']) && $_FILES['property' . $information_propertys_item_id . '_small']['size'] && (isset($_POST['used_big_image_property' . $information_propertys_item_id]) && !(isset($_FILES['property' . $information_propertys_item_id]['tmp_name']) && $_FILES['property' . $information_propertys_item_id]['size']) || !isset($_POST['used_big_image_id_property' . $information_propertys_item_id])))
                     {
                        // Определяем расширение файла.
                        $exp = strtolower($kernel->GetExtension($_FILES['property' . $information_propertys_item_id . '_small']['name']));

                        // Определяем создавать ли большое изображение из малого
                        // тип загружаемого файла является допустимым для загрузки файла.
                        if ($exp == 'jpg' || $exp == 'jpeg' || $exp == 'gif' || $exp == 'png')
                        {
                           // Добавление новой записи
                           if ($type == 0)
                           {
                              // Не задано большое изображение, создаем бальшое изображение из малого
                              if (!(isset($_FILES['property' . $information_propertys_item_id]['tmp_name']) && $_FILES['property' . $information_propertys_item_id]['tmp_name']  != ''))
                              {
                                 $create_big_image = true;
                              }
                              // Задано большое изображение
                              else
                              {
                                 $create_big_image = false;
                              }
                           }
                        }
                        else
                        {
                           $create_big_image = false;
                        }

                        $information_property_small_image = $uploaddir . 'small_information_items_property_' . $information_propertys_item_value_id . '.' . $exp;

                        if ($exp == 'jpg' || $exp == 'jpeg' || $exp == 'gif' || $exp == 'png')
                        {
                           // Создать большое изображение из малого
                           if ($create_big_image)
                           {
                              $information_property_image = $uploaddir . 'information_items_property_' . $information_propertys_item_value_id . '.' . $exp;
                           }
                        }
                        else
                        {
                           $information_property_image = '';

                        }
                     }

                     // Путь к файлу-источнику большого изображения;
                     $param['path_source_big_image'] = to_str($_FILES['property'.$information_propertys_item_id]['tmp_name']);

                     // Путь к файлу-источнику малого изображения;
                     $param['path_source_small_image'] = to_str($_FILES['property'.$information_propertys_item_id.'_small']['tmp_name']);

                     // Оригинальное имя файла большого изображения
                     $param['original_file_name_big_image'] = to_str($_FILES['property'.$information_propertys_item_id]['name']);

                     // Путь к создаваемому файлу большого изображения;
                     $param['path_target_big_image'] =  $information_property_image;

                     // Путь к создаваемому файлу малого изображения;
                     $param['path_target_small_image'] = $information_property_small_image;

                     // Оригинальное имя файла малого изображения
                     $param['original_file_name_small_image'] = $_FILES['property'.$information_propertys_item_id.'_small']['name'];

                     // Использовать большое изображение для создания малого (true - использовать (по умолчанию), false - не использовать)
                     $param['use_big_image'] = isset($_POST['used_big_image_property'.$information_propertys_item_id]);

                     // Значение максимальной ширины большого изображения
                     $param['max_width_big_image'] = $property_image_big_max_width;

                     // Значение максимальной высоты большого изображения
                     $param['max_height_big_image'] = $property_image_big_max_height;

                     // Значение максимальной ширины малого изображения;
                     $param['max_width_small_image'] = $property_image_small_max_width;

                     // Значение максимальной высоты малого изображения;
                     $param['max_height_small_image'] = $property_image_small_max_height;

                     $InformationSystemRow = $information_system->GetInformationSystem($information_system_id);

                     if ($InformationSystemRow['information_systems_watermark_file'] != '' && is_file(CMS_FOLDER . UPLOADDIR . $InformationSystemRow['information_systems_watermark_file']))
                     {
                        $watermark_file = CMS_FOLDER . UPLOADDIR . $InformationSystemRow['information_systems_watermark_file'];
                     }
                     else
                     {
                        $watermark_file = '';
                     }

                     // Путь к файлу с "водяным знаком"
                     $param['watermark_file_path'] = $watermark_file;

                     // Позиция "водяного знака" по оси X
                     $param['watermark_position_x'] = to_str($_POST['image_watermark_position_x_information_item_image']);

                     // Позиция "водяного знака" по оси Y
                     $param['watermark_position_y'] = to_str($_POST['image_watermark_position_y_information_item_image']);

                     // Наложить "водяной знак" на большое изображение (true - наложить (по умолчанию), false - не наложить);
                     $param['used_watermark_big_image'] = isset($_POST['big_image_is_use_watermark_property' . $information_propertys_item_id]);

                     // Наложить "водяной знак" на малое изображение (true - наложить (по умолчанию), false - не наложить);
                     $param['used_watermark_small_image'] = isset($_POST['small_image_is_use_watermark_property' . $information_propertys_item_id]);

                     // Большое изображение не существует (true - существует, false - не существует (по умолчанию))
                     $param['isset_big_image'] = false;

                     $result = $kernel->AdminLoadFiles($param);

                     if ($result['big_image'])
                     {
                        $information_property_image = basename($param['path_target_big_image']);

                        $query = "UPDATE `information_propertys_items_table` SET `information_propertys_items_file` = '$information_property_image' WHERE `information_propertys_items_id` = '$information_propertys_item_value_id'";

                        $DataBase->query($query);
                     }

                     if ($result['small_image'])
                     {
                        $information_property_small_image = basename($param['path_target_small_image']);

                        $query = "UPDATE `information_propertys_items_table` SET `information_propertys_items_file_small` = '$information_property_small_image' WHERE `information_propertys_items_id` = '$information_propertys_item_value_id'";

                        $DataBase->query($query);
                     }
                  }
               }


При реализации не забывайте о безопасности при загрузке файлов.
#
Re: InsertInformationPropertysItems - дополнительные атрибуты функции
Как все сложно-то Еще и ручками запрос в базу писать? Вы сами уверены в правильности данного решения.

Я посмотрел ваш код, и с точки зрения компактности, как-то он мне не особо.
Решил я все в раз 10 короче.

$kernel = & singleton('kernel');
   
// Определяем имя файла + расширение                           
$filename = $id.'_'.date('U').'.'.$kernel->GetExtension($_FILES['file']['name']);

// Пишем полный путь, где будет лежать файл
$filepath = CMS_FOLDER . UPLOADDIR . 'private/'.$filename;
            
// Копируем файл
copy($_FILES['file']['tmp_name'],$filename);

// Добавляем запись               $IS->InsertInformationPropertysItems(0,0,26,$id,"test1",$fileurl);   


Вполне подходит для простых файлов, а не картинок. Остается только дописать проверку на тип файла.

Кстати, проверять тип файла, мне кажется следует по mimetype, нежели по расширению.

Кому нужно, юзайте...
Модератор
#
Re: InsertInformationPropertysItems - дополнительные атрибуты функции
mrspd,
Это пример с наложением ватермарков, ресайзом и т.п. Вы из него правильно взяли только то, что нужно, только проверку на тип файла незабудьте.
#
Re: Re: InsertInformationPropertysItems - дополнительные атрибуты функции
Что то в коде уважаемого mrspd полно несогласовок.
Можно объяснить зачем например переменная $filepath если она не используется
и откуда берете переменную $fileurl для вызова InsertInformationPropertysItems?
Модератор
#
Re: InsertInformationPropertysItems - дополнительные атрибуты функции
Более новый пример с учетом директорий: http://www.hostcms.ru/forums/22/3088/
Авторизация