Changeset 13021


Ignore:
Timestamp:
02/02/12 21:59:41 (8 years ago)
Author:
rvelices
Message:

feature 2548 multisize - custom sizes restricted to those requested by theme/plugin
code refacto

Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/admin/derivatives.php

    r12922 r13021  
    215215        if (isset($enabled[$type])) 
    216216        {// now disabled, before was enabled 
     217          $changed_types[] = $type; 
    217218          $disabled[$type] = $enabled[$type]; 
    218219          unset($enabled[$type]); 
  • trunk/admin/include/functions.php

    r13013 r13021  
    203203 
    204204    $ok = true; 
    205     foreach ($files as $path) 
    206     { 
    207       if (is_file($path) and !unlink($path)) 
    208       { 
    209         $ok = false; 
    210         trigger_error('"'.$path.'" cannot be removed', E_USER_WARNING); 
    211         break; 
    212       } 
    213     } 
     205                if (!isset($conf['never_delete_originals'])) 
     206                { 
     207                        foreach ($files as $path) 
     208                        { 
     209                                if (is_file($path) and !unlink($path)) 
     210                                { 
     211                                        $ok = false; 
     212                                        trigger_error('"'.$path.'" cannot be removed', E_USER_WARNING); 
     213                                        break; 
     214                                } 
     215                        } 
     216                } 
    214217 
    215218    if ($ok) 
  • trunk/admin/themes/default/template/derivatives_build.tpl

    r12865 r13021  
    4545{footer_script require='jquery.effects.slide'}{literal} 
    4646 
    47 var loader = new ImageLoader( {onChanged: loaderChanged} ) 
     47var loader = new ImageLoader( {onChanged: loaderChanged, maxRequests:1 } ) 
    4848        , pending_next_page = null 
    4949        , last_image_show_time = 0 
  • trunk/i.php

    r12958 r13021  
    6666function ilog() 
    6767{ 
    68   global $conf, $ilogfh; 
     68  global $conf; 
    6969  if (!$conf['enable_i_log']) return; 
    70   if(!$ilogfh) 
    71   { 
    72     $dir=PHPWG_ROOT_PATH.$conf['data_location'].'tmp/'; 
    73     if (!mkgetdir($dir) or ! ($ilogfh=fopen($dir.'i.log', 'a')) ) 
    74       return; 
    75   } 
     70 
    7671  $line = date("c"); 
    7772  foreach( func_get_args() as $arg) 
     
    8782    } 
    8883  } 
    89   fwrite($ilogfh, $line."\n"); 
     84        $file=PHPWG_ROOT_PATH.$conf['data_location'].'tmp/i.log'; 
     85  if (false == file_put_contents($file, $line."\n", FILE_APPEND)) 
     86        { 
     87                mkgetdir(dirname($file)); 
     88        } 
    9089} 
    9190 
     
    125124} 
    126125 
     126function url_to_size($s) 
     127{ 
     128  $pos = strpos($s, 'x'); 
     129  if ($pos===false) 
     130  { 
     131    return array((int)$s, (int)$s); 
     132  } 
     133  return array((int)substr($s,0,$pos), (int)substr($s,$pos+1)); 
     134} 
     135 
     136function parse_custom_params($tokens) 
     137{ 
     138  if (count($tokens)<1) 
     139    ierror('Empty array while parsing Sizing', 400); 
     140 
     141  $crop = 0; 
     142  $min_size = null; 
     143 
     144  $token = array_shift($tokens); 
     145  if ($token[0]=='s') 
     146  { 
     147    $size = url_to_size( substr($token,1) ); 
     148  } 
     149  elseif ($token[0]=='e') 
     150  { 
     151    $crop = 1; 
     152    $size = $min_size = url_to_size( substr($token,1) ); 
     153  } 
     154  else 
     155  { 
     156    $size = url_to_size( $token ); 
     157    if (count($tokens)<2) 
     158      ierror('Sizing arr', 400); 
     159 
     160    $token = array_shift($tokens); 
     161    $crop = char_to_fraction($token); 
     162 
     163    $token = array_shift($tokens); 
     164    $min_size = url_to_size( $token ); 
     165  } 
     166  return new DerivativeParams( new SizingParams($size, $crop, $min_size) ); 
     167} 
     168 
    127169function parse_request() 
    128170{ 
     
    200242  if ($page['derivative_type'] == IMG_CUSTOM) 
    201243  { 
    202     try 
    203     { 
    204       $params = $page['derivative_params'] = DerivativeParams::from_url_tokens($deriv); 
    205     } 
    206     catch (Exception $e) 
    207     { 
    208       ierror($e->getMessage(), 400); 
    209     } 
     244    $params = $page['derivative_params'] = parse_custom_params($deriv); 
     245 
    210246    if ($params->sizing->ideal_size[0] < 20 or $params->sizing->ideal_size[1] < 20) 
    211247    { 
     
    215251    { 
    216252      ierror('Invalid crop', 400); 
     253    } 
     254    $greatest = ImageStdParams::get_by_type(IMG_XXLARGE); 
     255    if ($params->max_width() > $greatest->max_width() || $params->max_height() > $greatest->max_height()) 
     256    { 
     257      ierror('Too big', 403); 
     258    } 
     259     
     260    $key = array(); 
     261    $params->add_url_tokens($key); 
     262    $key = implode('_', $key); 
     263    if (!isset(ImageStdParams::$custom[$key])) 
     264    { 
     265      ierror('Size not allowed', 403); 
    217266    } 
    218267  } 
  • trunk/include/derivative_params.inc.php

    r12908 r13021  
    3434} 
    3535 
    36 function url_to_size($s) 
    37 { 
    38   $pos = strpos($s, 'x'); 
    39   if ($pos===false) 
    40   { 
    41     return array((int)$s, (int)$s); 
    42   } 
    43   return array((int)substr($s,0,$pos), (int)substr($s,$pos+1)); 
    44 } 
    45  
    4636function size_equals($s1, $s2) 
    4737{ 
     
    4939} 
    5040 
     41function char_to_fraction($c) 
     42{ 
     43        return (ord($c) - ord('a'))/25; 
     44} 
     45 
     46function fraction_to_char($f) 
     47{ 
     48        return ord('a') + round($f*25); 
     49} 
    5150 
    5251/** small utility to manipulate a 'rectangle'*/ 
     
    8079    if (!empty($coi)) 
    8180    { 
    82       $coil = floor($this->r * (ord($coi[0]) - ord('a'))/25); 
    83       $coir = ceil($this->r * (ord($coi[2]) - ord('a'))/25); 
     81      $coil = floor($this->r * char_to_fraction($coi[0])); 
     82      $coir = ceil($this->r * char_to_fraction($coi[2])); 
    8483      $availableL = $coil > $this->l ? $coil - $this->l : 0; 
    8584      $availableR = $coir < $this->r ? $this->r - $coir : 0; 
     
    116115    if (!empty($coi)) 
    117116    { 
    118       $coit = floor($this->b * (ord($coi[1]) - ord('a'))/25); 
    119       $coib = ceil($this->b * (ord($coi[3]) - ord('a'))/25); 
     117      $coit = floor($this->b * char_to_fraction($coi[1])); 
     118      $coib = ceil($this->b * char_to_fraction($coi[3])); 
    120119      $availableT = $coit > $this->t ? $coit - $this->t : 0; 
    121120      $availableB = $coib < $this->b ? $this->b - $coib : 0; 
     
    180179      { 
    181180        $tokens[] = size_to_url($this->ideal_size); 
    182         $tokens[] = sprintf('%02x', round(100*$this->max_crop) ); 
     181        $tokens[] = fraction_to_char($this->max_crop); 
    183182        $tokens[] = size_to_url($this->min_size); 
    184183      } 
    185184  } 
    186  
    187   static function from_url_tokens($tokens) 
    188   { 
    189     if (count($tokens)<1) 
    190       throw new Exception('Empty array while parsing Sizing'); 
    191     $token = array_shift($tokens); 
    192     if ($token[0]=='s') 
    193     { 
    194       return new SizingParams( url_to_size( substr($token,1) ) ); 
    195     } 
    196     if ($token[0]=='e') 
    197     { 
    198       $s = url_to_size( substr($token,1) ); 
    199       return new SizingParams($s, 1, $s); 
    200     } 
    201  
    202     $ideal_size = url_to_size( $token ); 
    203     if (count($tokens)<2) 
    204       throw new Exception('Sizing arr'); 
    205  
    206     $token = array_shift($tokens); 
    207     $crop = hexdec($token) / 100; 
    208  
    209     $token = array_shift($tokens); 
    210     $min_size = url_to_size( $token ); 
    211     return new SizingParams($ideal_size, $crop, $min_size); 
    212   } 
    213  
    214185 
    215186  function compute($in_size, $coi, &$crop_rect, &$scale_size) 
     
    303274  } 
    304275 
    305   static function from_url_tokens($tokens) 
    306   { 
    307     $sizing = SizingParams::from_url_tokens($tokens); 
    308     $ret = new DerivativeParams($sizing); 
    309     return $ret; 
    310   } 
    311  
    312276  function compute_final_size($in_size, $coi) 
    313277  { 
  • trunk/include/derivative_std_params.inc.php

    r12851 r13021  
    4747  private static $undefined_type_map = array(); 
    4848  private static $watermark; 
     49  public static $custom = array(); 
    4950 
    5051  static function get_all_types() 
     
    7172  { 
    7273    return self::$all_type_map[$type]; 
     74  } 
     75   
     76  static function get_custom($w, $h, $crop=0, $minw=null, $minh=null) 
     77  { 
     78    $params = new DerivativeParams( new SizingParams( array($w,$h), $crop, array($minw,$minh)) ); 
     79    self::apply_global($params); 
     80 
     81    $key = array(); 
     82    $params->add_url_tokens($key); 
     83    $key = implode('_',$key); 
     84    if ( @self::$custom[$key] < time() - 24*3600) 
     85    { 
     86      self::$custom[$key] = time(); 
     87      self::save(); 
     88    } 
     89    return $params; 
    7390  } 
    7491 
     
    104121      self::$watermark = @$arr['w']; 
    105122      if (!self::$watermark) self::$watermark = new WatermarkParams(); 
     123      self::$custom = @$arr['c']; 
     124      if (!self::$custom) self::$custom = array(); 
    106125    } 
    107126    else 
     
    119138  static function set_and_save($map) 
    120139  { 
     140    self::$type_map = $map; 
     141    self::save(); 
     142    self::build_maps(); 
     143  } 
     144 
     145  static function save() 
     146  { 
    121147    global $conf; 
    122     self::$type_map = $map; 
    123148 
    124149    $ser = serialize( array( 
    125150      'd' => self::$type_map, 
    126151      'w' => self::$watermark, 
     152      'c' => self::$custom, 
    127153      ) ); 
    128154    conf_update_param('derivatives', addslashes($ser) ); 
    129155    file_put_contents(PHPWG_ROOT_PATH.$conf['data_location'].'derivatives.dat', $ser); 
    130     self::build_maps(); 
    131156  } 
    132157 
     
    143168  } 
    144169 
    145   public static function apply_global($params) 
     170  static function apply_global($params) 
    146171  { 
    147172    if (!empty(self::$watermark->file) && 
  • trunk/include/picture_comment.inc.php

    r12922 r13021  
    127127  { 
    128128    // comments order (get, session, conf) 
    129     if (!empty($_GET['comments_order'])) 
     129    if (!empty($_GET['comments_order']) && in_array(strtoupper($_GET['comments_order']), array('ASC', 'DESC'))) 
    130130    { 
    131       if (in_array(strtoupper($_GET['comments_order']), array('ASC', 'DESC'))) 
    132       { 
    133         $comments_order = $_GET['comments_order']; 
    134         pwg_set_session_var('comments_order', $comments_order); 
    135       } 
    136       else 
    137       { 
    138         $comments_order = $conf['comments_order']; 
    139       } 
     131      pwg_set_session_var('comments_order', $_GET['comments_order']); 
    140132    } 
    141     else if (pwg_get_session_var('comments_order') !== null) 
    142     { 
    143       $comments_order = pwg_get_session_var('comments_order'); 
    144     } 
    145     else 
    146     { 
    147       $comments_order = $conf['comments_order']; 
    148     } 
     133    $comments_order = pwg_get_session_var('comments_order', $conf['comments_order']); 
     134 
    149135    $template->assign(array( 
    150136      'COMMENTS_ORDER_URL' => duplicate_picture_url().'&amp;comments_order='.($comments_order == 'ASC' ? 'DESC' : 'ASC'), 
  • trunk/include/template.class.php

    r12955 r13021  
    560560    !empty($params['height']) or fatal_error('define_derviative missing height'); 
    561561 
    562     $derivative = new DerivativeParams( SizingParams::classic( intval($params['width']), intval($params['height'])) ); 
     562    $w = intval($params['width']); 
     563    $h = intval($params['height']); 
     564    $crop = 0; 
     565    $minw=null; 
     566    $minh=null; 
     567     
    563568    if (isset($params['crop'])) 
    564569    { 
    565570      if (is_bool($params['crop'])) 
    566571      { 
    567         $derivative->sizing->max_crop = $params['crop'] ? 1:0; 
     572        $crop = $params['crop'] ? 1:0; 
    568573      } 
    569574      else 
    570575      { 
    571         $derivative->sizing->max_crop = round($params['crop']/100, 2); 
    572       } 
    573  
    574       if ($derivative->sizing->max_crop) 
    575       { 
    576         $minw = empty($params['min_width']) ? $derivative->max_width() : intval($params['min_width']); 
    577         $minw <= $derivative->max_width() or fatal_error('define_derviative invalid min_width'); 
    578         $minh = empty($params['min_height']) ? $derivative->max_height() : intval($params['min_height']); 
    579         $minh <= $derivative->max_height() or fatal_error('define_derviative invalid min_height'); 
    580  
    581         $derivative->sizing->min_size = array($minw, $minh); 
    582       } 
    583     } 
    584  
    585     ImageStdParams::apply_global($derivative); 
    586     $smarty->assign( $params['name'], $derivative); 
     576        $crop = round($params['crop']/100, 2); 
     577      } 
     578 
     579      if ($crop) 
     580      { 
     581        $minw = empty($params['min_width']) ? $w : intval($params['min_width']); 
     582        $minw <= $w or fatal_error('define_derviative invalid min_width'); 
     583        $minh = empty($params['min_height']) ? $h : intval($params['min_height']); 
     584        $minh <= $h or fatal_error('define_derviative invalid min_height'); 
     585      } 
     586    } 
     587 
     588    $smarty->assign( $params['name'], ImageStdParams::get_custom($w, $h, $crop, $minw, $minh) ); 
    587589  } 
    588590 
  • trunk/themes/default/template/picture.tpl

    r12894 r13021  
    279279        {if $COMMENT_COUNT > 0} 
    280280                <h3>{$pwg->l10n_dec('%d comment', '%d comments',$COMMENT_COUNT)}</h3> 
    281         {/if} 
    282   {if $COMMENT_COUNT > 2} 
    283     {'Sort order'|@translate} : <a href="{$COMMENTS_ORDER_URL}#comments">{$COMMENTS_ORDER_TITLE}</a> 
    284   {/if} 
     281        {if $COMMENT_COUNT > 2} 
     282                {'Sort order'|@translate}: <a href="{$COMMENTS_ORDER_URL}#comments" rel="nofollow">{$COMMENTS_ORDER_TITLE}</a> 
     283        {/if} 
     284        {/if} 
    285285        {if !empty($navbar)}{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if} 
    286286 
Note: See TracChangeset for help on using the changeset viewer.