// 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;
Esempio n. 2
0
File: i.php Progetto: donseba/Piwigo
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();