public static function QueryCached($qstr, $cache_max_lifetime = 3600, $DB = false) { if ($DB === false) { global $DB; } // проверим, есть ли папочка $dirname = $_SERVER['DOCUMENT_ROOT'] . '/bitrix/managed_cache/BANKA'; $d = opendir($dirname); if (!$d) { if (!mkdir($dirname)) { return CGreensightDBQueryCache::QueryFetched($qstr, $DB); } } else { closedir($d); } // название файла кэша $filename = $dirname . '/' . md5($qstr); if (file_exists($filename)) { // если файл кэша существует... if (filemtime($filename) > time() - $cache_max_lifetime) { // и он довольно свеженький... $_result = file_get_contents($filename); eval('$_result = ' . $_result . ';'); return $_result; } } // создаём (или обновляем) файл кэша и возвращаем результат $_result = CGreensightDBQueryCache::QueryFetched($qstr, $DB); file_put_contents($filename, var_export($_result, true)); return $_result; }
/** * Обновить данные ямы. * @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; }