// step 3 - save data if (count($errors) == 0) { $quality_changed = ImageStdParams::$quality != intval($_POST['resize_quality']); ImageStdParams::$quality = intval($_POST['resize_quality']); $enabled = ImageStdParams::get_defined_type_map(); $disabled = @unserialize(@$conf['disabled_derivatives']); if ($disabled === false) { $disabled = array(); } $changed_types = array(); foreach (ImageStdParams::get_all_types() as $type) { $pderivative = $pderivatives[$type]; if ($pderivative['enabled']) { $new_params = new DerivativeParams(new SizingParams(array(intval($pderivative['w']), intval($pderivative['h'])), round($pderivative['crop'] / 100, 2), array(intval($pderivative['minw']), intval($pderivative['minh'])))); $new_params->sharpen = intval($pderivative['sharpen']); ImageStdParams::apply_global($new_params); if (isset($enabled[$type])) { $old_params = $enabled[$type]; $same = true; if (!size_equals($old_params->sizing->ideal_size, $new_params->sizing->ideal_size) or $old_params->sizing->max_crop != $new_params->sizing->max_crop) { $same = false; } if ($same and $new_params->sizing->max_crop != 0 and !size_equals($old_params->sizing->min_size, $new_params->sizing->min_size)) { $same = false; } if ($quality_changed || $new_params->sharpen != $old_params->sharpen) { $same = false; } if (!$same) { $new_params->last_mod_time = time(); $changed_types[] = $type;
function parse_request() { global $conf, $page; if ($conf['question_mark_in_urls'] == false and isset($_SERVER["PATH_INFO"]) and !empty($_SERVER["PATH_INFO"])) { $req = $_SERVER["PATH_INFO"]; $req = str_replace('//', '/', $req); $path_count = count(explode('/', $req)); $page['root_path'] = PHPWG_ROOT_PATH . str_repeat('../', $path_count - 1); } else { $req = $_SERVER["QUERY_STRING"]; if ($pos = strpos($req, '&')) { $req = substr($req, 0, $pos); } $req = rawurldecode($req); /*foreach (array_keys($_GET) as $keynum => $key) { $req = $key; break; }*/ $page['root_path'] = PHPWG_ROOT_PATH; } $req = ltrim($req, '/'); foreach (preg_split('#/+#', $req) as $token) { preg_match($conf['sync_chars_regex'], $token) or ierror('Invalid chars in request', 400); } $page['derivative_path'] = PHPWG_ROOT_PATH . PWG_DERIVATIVE_DIR . $req; $pos = strrpos($req, '.'); $pos !== false || ierror('Missing .', 400); $ext = substr($req, $pos); $page['derivative_ext'] = $ext; $req = substr($req, 0, $pos); $pos = strrpos($req, '-'); $pos !== false || ierror('Missing -', 400); $deriv = substr($req, $pos + 1); $req = substr($req, 0, $pos); $deriv = explode('_', $deriv); foreach (ImageStdParams::get_defined_type_map() as $type => $params) { if (derivative_to_url($type) == $deriv[0]) { $page['derivative_type'] = $type; $page['derivative_params'] = $params; break; } } if (!isset($page['derivative_type'])) { if (derivative_to_url(IMG_CUSTOM) == $deriv[0]) { $page['derivative_type'] = IMG_CUSTOM; } else { ierror('Unknown parsing type', 400); } } array_shift($deriv); if ($page['derivative_type'] == IMG_CUSTOM) { $params = $page['derivative_params'] = parse_custom_params($deriv); ImageStdParams::apply_global($params); if ($params->sizing->ideal_size[0] < 20 or $params->sizing->ideal_size[1] < 20) { ierror('Invalid size', 400); } if ($params->sizing->max_crop < 0 or $params->sizing->max_crop > 1) { ierror('Invalid crop', 400); } $greatest = ImageStdParams::get_by_type(IMG_XXLARGE); $key = array(); $params->add_url_tokens($key); $key = implode('_', $key); if (!isset(ImageStdParams::$custom[$key])) { ierror('Size not allowed', 403); } } if (is_file(PHPWG_ROOT_PATH . $req . $ext)) { $req = './' . $req; // will be used to match #iamges.path } elseif (is_file(PHPWG_ROOT_PATH . '../' . $req . $ext)) { $req = '../' . $req; } $page['src_location'] = $req . $ext; $page['src_path'] = PHPWG_ROOT_PATH . $page['src_location']; $page['src_url'] = $page['root_path'] . $page['src_location']; }
$watermark->file = $pwatermark['file']; $watermark->xpos = intval($pwatermark['xpos']); $watermark->ypos = intval($pwatermark['ypos']); $watermark->xrepeat = intval($pwatermark['xrepeat']); $watermark->yrepeat = intval($pwatermark['yrepeat']); $watermark->opacity = intval($pwatermark['opacity']); $watermark->min_size = array(intval($pwatermark['minw']), intval($pwatermark['minh'])); $old_watermark = ImageStdParams::get_watermark(); $watermark_changed = $watermark->file != $old_watermark->file || $watermark->xpos != $old_watermark->xpos || $watermark->ypos != $old_watermark->ypos || $watermark->xrepeat != $old_watermark->xrepeat || $watermark->yrepeat != $old_watermark->yrepeat || $watermark->opacity != $old_watermark->opacity; // save the new watermark configuration ImageStdParams::set_watermark($watermark); // do we have to regenerate the derivatives (and which types)? $changed_types = array(); foreach (ImageStdParams::get_defined_type_map() as $type => $params) { $old_use_watermark = $params->use_watermark; ImageStdParams::apply_global($params); $changed = $params->use_watermark != $old_use_watermark; if (!$changed and $params->use_watermark) { $changed = $watermark_changed; } if (!$changed and $params->use_watermark) { // if thresholds change and before/after the threshold is lower than the corresponding derivative side -> some derivatives might switch the watermark $changed |= $watermark->min_size[0] != $old_watermark->min_size[0] and ($watermark->min_size[0] < $params->max_width() or $old_watermark->min_size[0] < $params->max_width()); $changed |= $watermark->min_size[1] != $old_watermark->min_size[1] and ($watermark->min_size[1] < $params->max_height() or $old_watermark->min_size[1] < $params->max_height()); } if ($changed) { $params->last_mod_time = time(); $changed_types[] = $type; } } ImageStdParams::save();