Esempio n. 1
0
 /**
  * Обновить данные ямы.
  * @param  int    $id      айдишник обновляемой ямы
  * @param  array  $_fields массив со значениями обновляемых полей
  * @param  array $_params  массив с параметрами
  * @param  string $error   тут возвращается текст ошибки
  * @return bool   success
  */
 public static function Update($id, $_fields, $_params, &$error)
 {
     $error = '';
     $id = (int) $id;
     if (!$id) {
         $error = GetMessage('GREENSIGHT_ERROR_NOID');
         return false;
     }
     if (!sizeof($_fields)) {
         // если ничего обновлять не надо, то ничего обновлять и не станем
         return true;
     }
     // проверим картинки
     foreach ($_fields['FILES'] as $_file) {
         if (!$_file['error']) {
             $image = C1234Hole::imagecreatefromfile($_file['tmp_name'], &$_image_info);
             if (!$image) {
                 $error = GetMessage('GREENSIGHT_ERROR_UNSUPPORTED_IMAGE_TYPE');
                 return false;
             }
             imagedestroy($image);
         }
     }
     // если надо удалить файлы, удалим
     if (sizeof($_fields['DELETEFILES'])) {
         foreach ($_fields['DELETEFILES'] as &$f) {
             if (strlen($f)) {
                 unlink($_SERVER['DOCUMENT_ROOT'] . '/upload/st1234/original/' . $id . '/' . $f);
                 unlink($_SERVER['DOCUMENT_ROOT'] . '/upload/st1234/medium/' . $id . '/' . $f);
                 unlink($_SERVER['DOCUMENT_ROOT'] . '/upload/st1234/small/' . $id . '/' . $f);
             }
         }
     }
     $file_counter = 0;
     $all_files = 0;
     $dir = opendir($_SERVER['DOCUMENT_ROOT'] . '/upload/st1234/original/' . $id . '/');
     while ($f = readdir($dir)) {
         $f = explode('.', $f);
         $f = (int) preg_replace('/\\D/', '', $f[0]);
         $file_counter = max($file_counter, $f);
         $all_files++;
     }
     $all_files -= 2;
     // это папки . и ..
     $file_counter++;
     if (!$_params['big_sizex']) {
         $_params['big_sizex'] = 1024;
     }
     if (!$_params['big_sizey']) {
         $_params['big_sizey'] = 1024;
     }
     foreach ($_fields['FILES'] as $_file) {
         if (!$_file['error']) {
             $all_files++;
             if ($all_files > 100) {
                 break;
             }
             $image = C1234Hole::imagecreatefromfile($_file['tmp_name'], &$_image_info);
             if (!$image) {
                 $error = GetMessage('GREENSIGHT_ERROR_UNSUPPORTED_IMAGE_TYPE');
                 return false;
             }
             $aspect = max($_image_info[0] / $_params['big_sizex'], $_image_info[1] / $_params['big_sizey']);
             if ($aspect > 1) {
                 $new_x = floor($_image_info[0] / $aspect);
                 $new_y = floor($_image_info[1] / $aspect);
                 $newimage = imagecreatetruecolor($new_x, $new_y);
                 imagecopyresampled($newimage, $image, 0, 0, 0, 0, $new_x, $new_y, $_image_info[0], $_image_info[1]);
                 imagejpeg($newimage, $_SERVER['DOCUMENT_ROOT'] . '/upload/st1234/original/' . $id . '/' . ($_fields['STATE'] == 'fixed' ? 'f' : ($_fields['GIBDD_REPLY_RECEIVED'] ? 'gr' : '')) . $file_counter . '.jpg');
             } else {
                 imagejpeg($image, $_SERVER['DOCUMENT_ROOT'] . '/upload/st1234/original/' . $id . '/' . ($_fields['STATE'] == 'fixed' ? 'f' : ($_fields['GIBDD_REPLY_RECEIVED'] ? 'gr' : '')) . $file_counter . '.jpg');
             }
             $aspect = max($_image_info[0] / $_params['medium_sizex'], $_image_info[1] / $_params['medium_sizey']);
             $new_x = floor($_image_info[0] / $aspect);
             $new_y = floor($_image_info[1] / $aspect);
             $newimage = imagecreatetruecolor($new_x, $new_y);
             imagecopyresampled($newimage, $image, 0, 0, 0, 0, $new_x, $new_y, $_image_info[0], $_image_info[1]);
             imagejpeg($newimage, $_SERVER['DOCUMENT_ROOT'] . '/upload/st1234/medium/' . $id . '/' . ($_fields['STATE'] == 'fixed' ? 'f' : ($_fields['GIBDD_REPLY_RECEIVED'] ? 'gr' : '')) . $file_counter . '.jpg');
             imagedestroy($newimage);
             $aspect = min($_image_info[0] / $_params['small_sizex'], $_image_info[1] / $_params['small_sizey']);
             $newimage = imagecreatetruecolor($_params['small_sizex'], $_params['small_sizey']);
             imagecopyresampled($newimage, $image, 0, 0, $_image_info[0] > $_image_info[1] ? floor(($_image_info[0] - $aspect * $_params['small_sizex']) / 2) : 0, $_image_info[0] < $_image_info[1] ? floor(($_image_info[1] - $aspect * $_params['small_sizey']) / 2) : 0, $_params['small_sizex'], $_params['small_sizey'], ceil($aspect * $_params['small_sizex']), ceil($aspect * $_params['small_sizey']));
             imagejpeg($newimage, $_SERVER['DOCUMENT_ROOT'] . '/upload/st1234/small/' . $id . '/' . ($_fields['STATE'] == 'fixed' ? 'f' : ($_fields['GIBDD_REPLY_RECEIVED'] ? 'gr' : '')) . $file_counter . '.jpg');
             imagedestroy($newimage);
             imagedestroy($image);
             $file_counter++;
         }
     }
     unset($_fields['FILES']);
     unset($_fields['DELETEFILES']);
     $sql_str = "update `b_holes` set";
     foreach ($_fields as $k => $v) {
         $sql_str .= " `" . mysql_escape_string($k) . "` = '" . mysql_escape_string($v) . "',";
     }
     $sql_str = substr($sql_str, 0, strlen($sql_str) - 1) . " where `ID` = '" . $id . "'";
     global $DB;
     CGreensightDBQueryCache::ClearAllCache();
     return $DB->Query($sql_str) ? true : false;
 }