diff options
author | rvelices <rv-github@modusoptimus.com> | 2006-03-17 04:13:19 +0000 |
---|---|---|
committer | rvelices <rv-github@modusoptimus.com> | 2006-03-17 04:13:19 +0000 |
commit | 97b681f1fa58e72bacff516ac51b35577181367b (patch) | |
tree | e3641755fa68efd8382c6305c2978a722881987f /include | |
parent | 9b521760af7639310742d7817c4fb91b88471c5c (diff) |
URL rewrite for chronology: uses $page['chronology'] and
$page['chronology_date']. $page['chronology'] is an array with 'field',
'style' and 'view' keys. This is step 1.
git-svn-id: http://piwigo.org/svn/trunk@1086 68402e56-0260-453c-a942-63ccdbb3a9ee
Diffstat (limited to '')
-rw-r--r-- | include/calendar_base.class.php | 100 | ||||
-rw-r--r-- | include/calendar_monthly.class.php | 100 | ||||
-rw-r--r-- | include/calendar_weekly.class.php | 23 | ||||
-rw-r--r-- | include/functions.inc.php | 138 | ||||
-rw-r--r-- | include/functions_calendar.inc.php | 157 | ||||
-rw-r--r-- | include/section_init.inc.php | 62 |
6 files changed, 308 insertions, 272 deletions
diff --git a/include/calendar_base.class.php b/include/calendar_base.class.php index 6f403fb4d..a3240e679 100644 --- a/include/calendar_base.class.php +++ b/include/calendar_base.class.php @@ -33,10 +33,6 @@ class CalendarBase var $date_field; // used for queries (INNER JOIN or normal) var $inner_sql; - // base url used when generating html links - var $url_base; - // array of date components e.g. (2005,10,12) ... - var $date_components; // var $calendar_levels; @@ -44,44 +40,48 @@ class CalendarBase /** * Initialize the calendar - * @param string date_field db column on which this calendar works * @param string inner_sql used for queries (INNER JOIN or normal) - * @param array date_components */ - function initialize($date_field, $inner_sql, $date_components) + function initialize($inner_sql) { - $this->date_field = $date_field; + global $page; + if ($page['chronology']['field']=='posted') + { + $this->date_field = 'date_available'; + } + else + { + $this->date_field = 'date_creation'; + } $this->inner_sql = $inner_sql; - $this->date_components = $date_components; $this->has_nav_bar = false; } function get_display_name() { - global $conf; + global $conf, $page; $res = ''; - $url = $this->url_base; - for ($i=0; $i<count($this->date_components); $i++) + for ($i=0; $i<count($page['chronology_date']); $i++) { $res .= $conf['level_separator']; - if ($i>0) - { - $url .= '-'; - } - $url .= $this->date_components[$i]; - if ( isset($this->date_components[$i+1]) ) + if ( isset($page['chronology_date'][$i+1]) ) { + $chronology_date = array_slice($page['chronology_date'],0, $i+1); + $url = duplicate_index_url( + array( 'chronology_date'=>$chronology_date ), + array( 'start' ) + ); $res .= '<a href="'.$url.'">' - .$this->get_date_component_label($i, $this->date_components[$i]) + .$this->get_date_component_label($i, $page['chronology_date'][$i]) .'</a>'; } else { $res .= '<span class="calInHere">' - .$this->get_date_component_label($i, $this->date_components[$i]) + .$this->get_date_component_label($i, $page['chronology_date'][$i]) .'</span>'; } } @@ -131,7 +131,7 @@ class CalendarBase /** * Creates a calendar navigation bar. * - * @param string url_base - links start with this root + * @param array date_components * @param array items - hash of items to put in the bar (e.g. 2005,2006) * @param array selected_item - item currently selected (e.g. 2005) * @param string class_prefix - html class attribute prefix for span elements @@ -140,11 +140,11 @@ class CalendarBase * @param array labels - optional labels for items (e.g. Jan,Feb,...) * @return string the navigation bar */ - function get_nav_bar_from_items($url_base, $items, $selected_item, + function get_nav_bar_from_items($date_components, $items, $selected_item, $class_prefix, $show_any, $show_empty=false, $labels=null) { - global $conf; + global $conf, $page; $nav_bar = ''; @@ -180,7 +180,10 @@ class CalendarBase else { $nav_bar .= '<span class="'.$class_prefix.'">'; - $url = $url_base . $item; + $url = duplicate_index_url( + array('chronology_date'=>array_merge($date_components,$item)), + array( 'start' ) + ); $nav_bar .= '<a href="'.$url.'">'; $nav_bar .= $label; $nav_bar .= '</a>'; @@ -203,7 +206,10 @@ class CalendarBase else { $nav_bar .= '<span class="'.$class_prefix.'">'; - $url = $url_base . 'any'; + $url = duplicate_index_url( + array('chronology_date'=>array_merge($date_components,'any')), + array( 'start' ) + ); $nav_bar .= '<a href="'.$url.'">'; $nav_bar .= $label; $nav_bar .= '</a>'; @@ -221,7 +227,7 @@ class CalendarBase */ function build_nav_bar($level, $labels=null) { - global $template, $conf; + global $template, $conf, $page; $query = ' SELECT DISTINCT('.$this->calendar_levels[$level]['sql'] @@ -240,14 +246,14 @@ SELECT DISTINCT('.$this->calendar_levels[$level]['sql'] } if ( count($level_items)==1 and - count($this->date_components)<count($this->calendar_levels)-1) + count($page['chronology_date'])<count($this->calendar_levels)-1) { - if ( ! isset($this->date_components[$level]) ) + if ( ! isset($page['chronology_date'][$level]) ) { list($key) = array_keys($level_items); - $this->date_components[$level] = (int)$key; + $page['chronology_date'][$level] = (int)$key; - if ( $level<count($this->date_components) and + if ( $level<count($page['chronology_date']) and $level!=count($this->calendar_levels)-1 ) { return; @@ -255,16 +261,8 @@ SELECT DISTINCT('.$this->calendar_levels[$level]['sql'] } } - $url_base = $this->url_base; - for ($i=0; $i<$level; $i++) - { - if (isset($this->date_components[$i])) - { - $url_base .= $this->date_components[$i].'-'; - } - } $nav_bar = $this->get_nav_bar_from_items( - $url_base, + $page['chronology_date'], $level_items, null, 'calItem', @@ -288,14 +286,14 @@ SELECT DISTINCT('.$this->calendar_levels[$level]['sql'] */ function build_next_prev() { - global $template; + global $template, $page; $prev = $next =null; - if ( empty($this->date_components) ) + if ( empty($page['chronology_date']) ) return; $query = 'SELECT CONCAT_WS("-"'; - for ($i=0; $i<count($this->date_components); $i++) + for ($i=0; $i<count($page['chronology_date']); $i++) { - if ( 'any' === $this->date_components[$i] ) + if ( 'any' === $page['chronology_date'] ) { $query .= ','.'"any"'; } @@ -304,7 +302,7 @@ SELECT DISTINCT('.$this->calendar_levels[$level]['sql'] $query .= ','.$this->calendar_levels[$i]['sql']; } } - $current = implode('-', $this->date_components ); + $current = implode('-', $page['chronology_date'] ); $query.=') as period' . $this->inner_sql .' AND ' . $this->date_field . ' IS NOT NULL @@ -327,26 +325,32 @@ GROUP BY period'; { $template->assign_block_vars( 'calendar.navbar', array() ); } + if ( $current_rank>0 ) { // has previous $prev = $upper_items[$current_rank-1]; + $chronology_date = explode('-', $prev); $template->assign_block_vars( 'calendar.navbar.prev', array( 'LABEL' => $this->get_date_nice_name($prev), - 'URL' => $this->url_base . $prev, + 'URL' => duplicate_index_url( + array('chronology_date'=>$chronology_date), array('start') + ) ) ); } if ( $current_rank < count($upper_items)-1 ) - { - // has next + { // has next $next = $upper_items[$current_rank+1]; + $chronology_date = explode('-', $next); $template->assign_block_vars( 'calendar.navbar.next', array( 'LABEL' => $this->get_date_nice_name($next), - 'URL' => $this->url_base . $next, + 'URL' => duplicate_index_url( + array('chronology_date'=>$chronology_date), array('start') + ) ) ); } diff --git a/include/calendar_monthly.class.php b/include/calendar_monthly.class.php index 9a43b0ecd..556e6e976 100644 --- a/include/calendar_monthly.class.php +++ b/include/calendar_monthly.class.php @@ -1,4 +1,4 @@ -<?php + <?php // +-----------------------------------------------------------------------+ // | PhpWebGallery - a PHP based picture gallery | // | Copyright (C) 2003-2006 PhpWebGallery Team - http://phpwebgallery.net | @@ -38,13 +38,11 @@ class Calendar extends CalendarBase /** * Initialize the calendar - * @param string date_field db column on which this calendar works * @param string inner_sql used for queries (INNER JOIN or normal) - * @param array date_components */ - function initialize($date_field, $inner_sql, $date_components) + function initialize($inner_sql) { - parent::initialize($date_field, $inner_sql, $date_components); + parent::initialize($inner_sql); global $lang; $this->calendar_levels = array( array( @@ -67,21 +65,20 @@ class Calendar extends CalendarBase * @return boolean false to indicate that thumbnails * where not included here, true otherwise */ -function generate_category_content($url_base, $view_type) +function generate_category_content() { - global $conf; - - $this->url_base = $url_base; + global $conf, $page; + $view_type = $page['chronology']['view']; if ($view_type==CAL_VIEW_CALENDAR) { - if ( count($this->date_components)==0 ) + if ( count($page['chronology_date'])==0 ) {//case A: no year given - display all years+months if ($this->build_global_calendar()) return true; } - if ( count($this->date_components)==1 ) + if ( count($page['chronology_date'])==1 ) {//case B: year given - display all days in given year if ($this->build_year_calendar()) { @@ -90,7 +87,7 @@ function generate_category_content($url_base, $view_type) } } - if ( count($this->date_components)==2 ) + if ( count($page['chronology_date'])==2 ) {//case C: year+month given - display a nice month calendar $this->build_month_calendar(); //$this->build_nav_bar(CYEAR); // years @@ -100,21 +97,21 @@ function generate_category_content($url_base, $view_type) } } - if ($view_type==CAL_VIEW_LIST or count($this->date_components)==3) + if ($view_type==CAL_VIEW_LIST or count($page['chronology_date'])==3) { $has_nav_bar = false; - if ( count($this->date_components)==0 ) + if ( count($page['chronology_date'])==0 ) { $this->build_nav_bar(CYEAR); // years } - if ( count($this->date_components)==1) + if ( count($page['chronology_date'])==1) { $this->build_nav_bar(CMONTH); // month } - if ( count($this->date_components)==2 ) + if ( count($page['chronology_date'])==2 ) { $day_labels = range( 1, $this->get_all_days_in_month( - $this->date_components[CYEAR] ,$this->date_components[CMONTH] ) ); + $page['chronology_date'][CYEAR] ,$page['chronology_date'][CMONTH] ) ); array_unshift($day_labels, 0); unset( $day_labels[0] ); $this->build_nav_bar( CDAY, $day_labels ); // days @@ -133,7 +130,8 @@ function generate_category_content($url_base, $view_type) */ function get_date_where($max_levels=3) { - $date = $this->date_components; + global $page; + $date = $page['chronology_date']; while (count($date)>$max_levels) { array_pop($date); @@ -218,7 +216,8 @@ function get_all_days_in_month($year, $month) function build_global_calendar() { - assert( count($this->date_components) == 0 ); + global $page; + assert( count($page['chronology_date']) == 0 ); $query='SELECT DISTINCT(DATE_FORMAT('.$this->date_field.',"%Y%m")) as period, COUNT( DISTINCT(id) ) as count'; $query.= $this->inner_sql; @@ -244,21 +243,21 @@ function build_global_calendar() if (count($items)==1) {// only one year exists so bail out to year view list($y) = array_keys($items); - $this->date_components[CYEAR] = $y; + $page['chronology_date'][CYEAR] = $y; return false; } global $lang, $template; foreach ( $items as $year=>$year_data) { - $url_base = $this->url_base.$year; + $chronology_date = array( $year ); + $url = duplicate_index_url( array('chronology_date'=>$chronology_date) ); - $nav_bar = '<span class="calCalHead"><a href="'.$url_base.'">'.$year.'</a>'; + $nav_bar = '<span class="calCalHead"><a href="'.$url.'">'.$year.'</a>'; $nav_bar .= ' ('.$year_data['nb_images'].')'; $nav_bar .= '</span><br>'; - $url_base .= '-'; - $nav_bar .= $this->get_nav_bar_from_items( $url_base, + $nav_bar .= $this->get_nav_bar_from_items( $chronology_date, $year_data['children'], null, 'calCal', false, false, $lang['month'] ); $template->assign_block_vars( 'calendar.calbar', @@ -270,7 +269,8 @@ function build_global_calendar() function build_year_calendar() { - assert( count($this->date_components) == 1 ); + global $page; + assert( count($page['chronology_date']) == 1 ); $query='SELECT DISTINCT(DATE_FORMAT('.$this->date_field.',"%m%d")) as period, COUNT( DISTINCT(id) ) as count'; $query.= $this->inner_sql; @@ -294,21 +294,21 @@ function build_year_calendar() if (count($items)==1) { // only one month exists so bail out to month view list($m) = array_keys($items); - $this->date_components[CMONTH] = $m; + $page['chronology_date'][CMONTH] = $m; return false; } global $lang, $template; foreach ( $items as $month=>$month_data) { - $url_base = $this->url_base.$this->date_components[CYEAR].'-'.$month; + $chronology_date = array( $page['chronology_date'][CYEAR], $month ); + $url = duplicate_index_url( array('chronology_date'=>$chronology_date) ); - $nav_bar = '<span class="calCalHead"><a href="'.$url_base.'">'; + $nav_bar = '<span class="calCalHead"><a href="'.$url.'">'; $nav_bar .= $lang['month'][$month].'</a>'; $nav_bar .= ' ('.$month_data['nb_images'].')'; $nav_bar .= '</span><br>'; - $url_base .= '-'; - $nav_bar .= $this->get_nav_bar_from_items( $url_base, + $nav_bar .= $this->get_nav_bar_from_items( $chronology_date, $month_data['children'], null, 'calCal', false ); $template->assign_block_vars( 'calendar.calbar', @@ -321,10 +321,11 @@ function build_year_calendar() function build_month_calendar() { + global $page; $query='SELECT DISTINCT(DAYOFMONTH('.$this->date_field.')) as period, COUNT( DISTINCT(id) ) as count'; $query.= $this->inner_sql; - $query.= $this->get_date_where($this->date_components); + $query.= $this->get_date_where(); $query.= ' GROUP BY period'; @@ -337,7 +338,7 @@ function build_month_calendar() foreach ( $items as $day=>$data) { - $this->date_components[CDAY]=$day; + $page['chronology_date'][CDAY]=$day; $query = ' SELECT file,tn_ext,path, width, height, DAYOFWEEK('.$this->date_field.')-1 as dow'; $query.= $this->inner_sql; @@ -345,7 +346,7 @@ SELECT file,tn_ext,path, width, height, DAYOFWEEK('.$this->date_field.')-1 as do $query.= ' ORDER BY RAND() LIMIT 0,1'; - unset ( $this->date_components[CDAY] ); + unset ( $page['chronology_date'][CDAY] ); $row = mysql_fetch_array(pwg_query($query)); $items[$day]['tn_path'] = get_thumbnail_src($row['path'], @$row['tn_ext']); @@ -416,8 +417,11 @@ SELECT file,tn_ext,path, width, height, DAYOFWEEK('.$this->date_field.')-1 as do $template->assign_block_vars('calendar.thumbnails.row.col', array()); $template->assign_block_vars('calendar.thumbnails.row.col.blank', array()); } - for ($day=1; $day<=$this->get_all_days_in_month( - $this->date_components[CYEAR] ,$this->date_components[CMONTH]); $day++) + for ( $day = 1; + $day <= $this->get_all_days_in_month( + $page['chronology_date'][CYEAR], $page['chronology_date'][CMONTH] + ); + $day++) { $dow = ($first_day_dow + $day-1)%7; if ($dow==0) @@ -486,9 +490,16 @@ SELECT file,tn_ext,path, width, height, DAYOFWEEK('.$this->date_field.')-1 as do { $css_style.='top:'.round(-$pos_top).'px;'; } - $url = $this->url_base. - $this->date_components[CYEAR].'-'. - $this->date_components[CMONTH].'-'.$day; + $url = duplicate_index_url( + array( + 'chronology_date' => + array( + $page['chronology_date'][CYEAR], + $page['chronology_date'][CMONTH], + $day + ) + ) + ); $alt = $wday_labels[$dow] . ' ' . $day. ' ('.$items[$day]['nb_images'].')'; $template->assign_block_vars('calendar.thumbnails.row.col.full', @@ -519,9 +530,16 @@ SELECT file,tn_ext,path, width, height, DAYOFWEEK('.$this->date_field.')-1 as do $template->assign_block_vars('thumbnails.line', array()); foreach ( $items as $day=>$data) { - $url = $this->url_base. - $this->date_components[CYEAR].'-'. - $this->date_components[CMONTH].'-'.$day; + $url = duplicate_index_url( + array( + 'chronology_date' => + array( + $page['chronology_date'][CYEAR], + $page['chronology_date'][CMONTH], + $day + ) + ) + ); $thumbnail_title = $lang['day'][$data['dow']] . ' ' . $day; $name = $thumbnail_title .' ('.$data['nb_images'].')'; diff --git a/include/calendar_weekly.class.php b/include/calendar_weekly.class.php index 023743693..4259650e0 100644 --- a/include/calendar_weekly.class.php +++ b/include/calendar_weekly.class.php @@ -38,13 +38,11 @@ class Calendar extends CalendarBase /** * Initialize the calendar - * @param string date_field db column on which this calendar works * @param string inner_sql used for queries (INNER JOIN or normal) - * @param array date_components */ - function initialize($date_field, $inner_sql, $date_components) + function initialize($inner_sql) { - parent::initialize($date_field, $inner_sql, $date_components); + parent::initialize($inner_sql); global $lang; $week_no_labels=array(); for ($i=1; $i<=53; $i++) @@ -79,23 +77,19 @@ class Calendar extends CalendarBase * Generate navigation bars for category page * @return boolean false to indicate that thumbnails where not included here */ -function generate_category_content($url_base, $view_type) +function generate_category_content() { - global $conf; + global $conf, $page; - $this->url_base = $url_base; - - assert($view_type==CAL_VIEW_LIST); - - if ( count($this->date_components)==0 ) + if ( count($page['chronology_date'])==0 ) { $this->build_nav_bar(CYEAR); // years } - if ( count($this->date_components)==1 ) + if ( count($page['chronology_date'])==1 ) { $this->build_nav_bar(CWEEK, array()); // week nav bar 1-53 } - if ( count($this->date_components)==2 ) + if ( count($page['chronology_date'])==2 ) { $this->build_nav_bar(CDAY); // days nav bar Mon-Sun } @@ -112,7 +106,8 @@ function generate_category_content($url_base, $view_type) */ function get_date_where($max_levels=3) { - $date = $this->date_components; + global $page; + $date = $page['chronology_date']; while (count($date)>$max_levels) { array_pop($date); diff --git a/include/functions.inc.php b/include/functions.inc.php index c70789f46..948f33f44 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -223,7 +223,7 @@ function get_picture_size( $original_width, $original_height, $width = $original_width; $height = $original_height; $is_original_size = true; - + if ( $max_width != "" ) { if ( $original_width > $max_width ) @@ -249,13 +249,13 @@ function get_picture_size( $original_width, $original_height, if ( ( $ratioWidth > 1 ) or ( $ratioHeight > 1 ) ) { if ( $ratioWidth < $ratioHeight ) - { + { $width = floor( $original_width / $ratioHeight ); $height = $max_height; } else - { - $width = $max_width; + { + $width = $max_width; $height = floor( $original_height / $ratioWidth ); } $is_original_size = false; @@ -330,7 +330,7 @@ function add_style( $string, $search, $style ) '<span style="'.$style.'">\\0</span>', $remaining ); $return_string.= $treatment; - + return $return_string; } @@ -340,7 +340,7 @@ function replace_search( $string, $search ) { // FIXME : with new advanced search, this function needs a rewrite return $string; - + $words = explode( ',', $search ); $style = 'background-color:white;color:red;'; foreach ( $words as $word ) { @@ -359,7 +359,7 @@ function pwg_log( $file, $category, $picture = '' ) { $login = ($user['id'] == $conf['guest_id']) ? 'guest' : addslashes($user['username']); - + $query = ' INSERT INTO '.HISTORY_TABLE.' (date,login,IP,file,category,picture) @@ -387,7 +387,7 @@ function format_date($date, $type = 'us', $show_time = false) global $lang; list($year,$month,$day,$hour,$minute,$second) = array(0,0,0,0,0,0); - + switch ( $type ) { case 'us' : @@ -432,10 +432,10 @@ function format_date($date, $type = 'us', $show_time = false) function pwg_query($query) { global $conf,$page,$debug,$t2; - + $start = get_moment(); $result = mysql_query($query) or my_error($query."\n"); - + $time = get_moment() - $start; if (!isset($page['count_queries'])) @@ -443,10 +443,10 @@ function pwg_query($query) $page['count_queries'] = 0; $page['queries_time'] = 0; } - + $page['count_queries']++; $page['queries_time']+= $time; - + if ($conf['show_queries']) { $output = ''; @@ -459,10 +459,10 @@ function pwg_query($query) $output.= "\n".'(total time : '; $output.= number_format( ($time+$start-$t2), 3, '.', ' ').' s)'; $output.= "</pre>\n"; - + $debug .= $output; } - + return $result; } @@ -500,10 +500,10 @@ function redirect( $url ) $title = 'redirection'; include( PHPWG_ROOT_PATH.'include/page_header.php' ); - + $template->set_filenames( array( 'redirect' => 'redirect.tpl' ) ); $template->parse('redirect'); - + include( PHPWG_ROOT_PATH.'include/page_tail.php' ); exit(); @@ -518,10 +518,10 @@ function redirect( $url ) function get_query_string_diff($rejects = array()) { $query_string = ''; - + $str = $_SERVER['QUERY_STRING']; parse_str($str, $vars); - + $is_first = true; foreach ($vars as $key => $value) { @@ -553,7 +553,7 @@ function get_pwg_themes() $themes = array(); $template_dir = PHPWG_ROOT_PATH.'template'; - + foreach (get_dirs($template_dir) as $template) { foreach (get_dirs($template_dir.'/'.$template.'/theme') as $theme) @@ -595,7 +595,7 @@ function get_thumbnail_src($path, $tn_ext = '') $src = get_themeconf('mime_icon_dir'); $src.= strtolower(get_extension($path)).'.png'; } - + return $src; } @@ -622,7 +622,7 @@ function my_error($header) function array_from_query($query, $fieldname) { $array = array(); - + $result = pwg_query($query); while ($row = mysql_fetch_array($result)) { @@ -641,10 +641,10 @@ function array_from_query($query, $fieldname) function get_day_list($blockname, $selection) { global $template; - + $template->assign_block_vars( $blockname, array('SELECTED' => '', 'VALUE' => 0, 'OPTION' => '--')); - + for ($i = 1; $i <= 31; $i++) { $selected = ''; @@ -668,7 +668,7 @@ function get_day_list($blockname, $selection) function get_month_list($blockname, $selection) { global $template, $lang; - + $template->assign_block_vars( $blockname, array('SELECTED' => '', 'VALUE' => 0, @@ -697,9 +697,9 @@ function get_month_list($blockname, $selection) function fill_caddie($elements_id) { global $user; - + include_once(PHPWG_ROOT_PATH.'admin/include/functions.php'); - + $query = ' SELECT element_id FROM '.CADDIE_TABLE.' @@ -749,7 +749,7 @@ function l10n($key) { echo '[l10n] language key "'.$key.'" is not defined<br />'; } - + return isset($lang[$key]) ? $lang[$key] : $key; } @@ -797,14 +797,14 @@ function get_search_array($search_id) { die('Search id must be an integer'); } - + $query = ' SELECT rules FROM '.SEARCH_TABLE.' WHERE id = '.$search_id.' ;'; list($serialized_rules) = mysql_fetch_row(pwg_query($query)); - + return unserialize($serialized_rules); } @@ -820,11 +820,11 @@ SELECT rules function get_sql_search_clause($search_id) { $search = get_search_array($search_id); - + // SQL where clauses are stored in $clauses array during query // construction $clauses = array(); - + foreach (array('file','name','comment','keywords','author') as $textfield) { if (isset($search['fields'][$textfield])) @@ -847,7 +847,7 @@ function get_sql_search_clause($search_id) ); } } - + if (isset($search['fields']['allwords'])) { $fields = array('file', 'name', 'comment', 'keywords', 'author'); @@ -875,12 +875,12 @@ function get_sql_search_clause($search_id) ) ); } - + array_walk( $word_clauses, create_function('&$s','$s="(".$s.")";') ); - + array_push( $clauses, "\n ". @@ -892,7 +892,7 @@ function get_sql_search_clause($search_id) ) ); } - + foreach (array('date_available', 'date_creation') as $datefield) { if (isset($search['fields'][$datefield])) @@ -902,26 +902,26 @@ function get_sql_search_clause($search_id) $datefield." = '".$search['fields'][$datefield]['date']."'" ); } - + foreach (array('after','before') as $suffix) { $key = $datefield.'-'.$suffix; - + if (isset($search['fields'][$key])) { array_push( $clauses, - + $datefield. ($suffix == 'after' ? ' >' : ' <'). ($search['fields'][$key]['inc'] ? '=' : ''). " '".$search['fields'][$key]['date']."'" - + ); } } } - + if (isset($search['fields']['cat'])) { if ($search['fields']['cat']['sub_inc']) @@ -933,22 +933,22 @@ function get_sql_search_clause($search_id) { $cat_ids = $search['fields']['cat']['words']; } - + $local_clause = 'category_id IN ('.implode(',', $cat_ids).')'; array_push($clauses, $local_clause); } - + // adds brackets around where clauses $clauses = prepend_append_array_items($clauses, '(', ')'); - + $where_separator = implode( "\n ".$search['mode'].' ', $clauses ); - + $search_clause = $where_separator; - + if (isset($forbidden)) { $search_clause.= "\n AND ".$forbidden; @@ -986,7 +986,7 @@ function get_available_upgrade_ids() $upgrades_path = PHPWG_ROOT_PATH.'install/db'; $available_upgrade_ids = array(); - + if ($contents = opendir($upgrades_path)) { while (($node = readdir($contents)) !== false) @@ -1015,11 +1015,8 @@ function make_index_URL($params = array()) PHPWG_ROOT_PATH.'category.php?' .'/'.make_section_in_URL($params) ; - - if (isset($params['start']) and $params['start'] > 0) - { - $url.= '/start-'.$params['start']; - } + + $url = add_well_known_params_in_url($url, $params); return $url; } @@ -1106,19 +1103,40 @@ function make_picture_URL($params) { die('make_picture_URL: image_id is a required parameter'); } - + $url = PHPWG_ROOT_PATH.'picture.php?' .'/'.$params['image_id'] .'/'.make_section_in_URL($params) ; - // first comment to start on + $url = add_well_known_params_in_url($url, $params); + return $url; +} + +/** + *adds to the url the chronology and start parameters +*/ +function add_well_known_params_in_url($url, $params) +{ + if ( isset($params['chronology']) ) + { + $url .= '/'. $params['chronology']['field']; + $url .= '-'. $params['chronology']['style']; + if ( isset($params['chronology']['view']) ) + { + $url .= '-'. $params['chronology']['view']; + } + if ( isset($params['chronology_date']) ) + { + $url .= '-'. implode('-', $params['chronology_date'] ); + } + } + if (isset($params['start']) and $params['start'] > 0) { $url.= '/start-'.$params['start']; } - return $url; } @@ -1134,7 +1152,7 @@ function make_picture_URL($params) function make_section_in_URL($params) { $section_string = ''; - + if (!isset($params['section'])) { if (isset($params['category'])) @@ -1159,7 +1177,7 @@ function make_section_in_URL($params) { $params['section'] = 'categories'; } - + switch($params['section']) { case 'categories' : @@ -1172,7 +1190,7 @@ function make_section_in_URL($params) { $section_string.= 'category/'.$params['category']; } - + break; } case 'tags' : @@ -1188,7 +1206,7 @@ function make_section_in_URL($params) { $section_string.= '/'.$tag; } - + break; } case 'search' : @@ -1197,7 +1215,7 @@ function make_section_in_URL($params) { die('make_section_in_URL: require a search identifier'); } - + $section_string.= 'search/'.$params['search']; break; @@ -1210,7 +1228,7 @@ function make_section_in_URL($params) } $section_string.= 'list/'.implode(',', $params['list']); - + break; } default : diff --git a/include/functions_calendar.inc.php b/include/functions_calendar.inc.php index f9404467a..e673e326a 100644 --- a/include/functions_calendar.inc.php +++ b/include/functions_calendar.inc.php @@ -24,27 +24,8 @@ // | USA. | // +-----------------------------------------------------------------------+ -define('CAL_VIEW_LIST', 'l'); -define('CAL_VIEW_CALENDAR', 'c'); - -function get_calendar_parameter($options, &$parameters ) -{ - if ( count($parameters) and isset($options[$parameters[0]]) ) - { - return array_shift($parameters); - } - else - { - foreach ($options as $option => $data) - { - if ( empty( $data['default_link'] ) ) - { - break; - } - } - return $option; - } -} +define('CAL_VIEW_LIST', 'list'); +define('CAL_VIEW_CALENDAR', 'calendar'); function initialize_calendar() { @@ -53,17 +34,17 @@ function initialize_calendar() //------------------ initialize the condition on items to take into account --- $inner_sql = ' FROM ' . IMAGES_TABLE; - if (!isset($page['cat']) or is_numeric($page['cat'])) + if (!isset($page['category']) or is_numeric($page['category'])) { // we will regenerate the items by including subcats elements $page['cat_nb_images'] = 0; $page['items'] = array(); $inner_sql .= ' INNER JOIN '.IMAGE_CATEGORY_TABLE.' ON id = image_id'; - if (isset($page['cat']) and is_numeric($page['cat'])) + if (isset($page['category']) and is_numeric($page['category'])) { $sub_ids = array_diff( - get_subcat_ids(array($page['cat'])), + get_subcat_ids(array($page['category'])), explode(',', $user['forbidden_categories']) ); @@ -92,129 +73,123 @@ WHERE id IN (' . implode(',',$page['items']) .')'; //-------------------------------------- initialize the calendar parameters --- pwg_debug('start initialize_calendar'); - // the parameters look like (FIELD)?(STYLE)?(VIEW)?(DATE COMPONENTS)? - // FIELD = (created-|posted-) - // STYLE = (m-|w-) - // VIEW = (l-|c-) - // DATE COMPONENTS= YEAR(-MONTH/WEEK)?(-DAY)? $fields = array( // Created 'created' => array( - 'default_link' => 'created-', 'label' => l10n('Creation date'), - 'db_field' => 'date_creation', ), // Posted 'posted' => array( - 'default_link' => 'posted-', 'label' => l10n('Post date'), - 'db_field' => 'date_available', ), ); $styles = array( // Monthly style 'monthly' => array( - 'default_link' => '', 'include' => 'calendar_monthly.class.php', 'view_calendar' => true, ), // Weekly style 'weekly' => array( - 'default_link' => 'weekly-', 'include' => 'calendar_weekly.class.php', 'view_calendar' => false, ), ); - $views = array( - // list view - CAL_VIEW_LIST => array( - 'default_link' => '', - ), - // calendar view - CAL_VIEW_CALENDAR => array( - 'default_link' => CAL_VIEW_CALENDAR.'-', - ), - ); - - $requested = explode('-', $_GET['calendar']); + $views = array(CAL_VIEW_LIST,CAL_VIEW_CALENDAR); // Retrieve calendar field - $cal_field = get_calendar_parameter($fields, $requested); + if ( !isset( $fields[ $page['chronology']['field'] ] ) ) + { + die('bad field'); + } // Retrieve style - $cal_style = get_calendar_parameter($styles, $requested); + if ( !isset( $styles[ $page['chronology']['style'] ] ) ) + { + $page['chronology']['style'] = 'monthly'; + } + $cal_style = $page['chronology']['style']; include(PHPWG_ROOT_PATH.'include/'. $styles[$cal_style]['include']); $calendar = new Calendar(); // Retrieve view - $cal_view = get_calendar_parameter($views, $requested); - if ( CAL_VIEW_CALENDAR==$cal_view and !$styles[$cal_style]['view_calendar'] ) + + if ( !isset($page['chronology']['view']) or + !in_array( $page['chronology']['view'], $views ) ) + { + $page['chronology']['view'] = CAL_VIEW_LIST; + } + + if ( CAL_VIEW_CALENDAR==$page['chronology']['view'] and + !$styles[$cal_style]['view_calendar'] ) { - $cal_view=CAL_VIEW_LIST; + + $page['chronology']['view'] = CAL_VIEW_LIST; } + $cal_view = $page['chronology']['view']; // perform a sanity check on $requested - while (count($requested) > 3) + if (!isset($page['chronology_date'])) + { + $page['chronology_date'] = array(); + } + while ( count($page['chronology_date']) > 3) { - array_pop($requested); + array_pop($page['chronology_date']); } $any_count = 0; - for ($i = 0; $i < count($requested); $i++) + for ($i = 0; $i < count($page['chronology_date']); $i++) { - if ($requested[$i] == 'any') + if ($page['chronology_date'][$i] == 'any') { if ($cal_view == CAL_VIEW_CALENDAR) {// we dont allow any in calendar view - while ($i < count($requested)) + while ($i < count($page['chronology_date'])) { - array_pop($requested); + array_pop($page['chronology_date']); } break; } $any_count++; } - elseif ($requested[$i] == '') + elseif ($page['chronology_date'][$i] == '') { - while ($i < count($requested)) + while ($i < count($page['chronology_date'])) { - array_pop($requested); + array_pop($page['chronology_date']); } } else { - $requested[$i] = (int)$requested[$i]; + $page['chronology_date'][$i] = (int)$page['chronology_date'][$i]; } } if ($any_count == 3) { - array_pop($requested); + array_pop($page['chronology_date']); } - $calendar->initialize($fields[$cal_field]['db_field'], $inner_sql, $requested); + $calendar->initialize($inner_sql); //echo ('<pre>'. var_export($calendar, true) . '</pre>'); - $url_base = get_query_string_diff(array('start', 'calendar')); +/* $url_base = get_query_string_diff(array('start', 'calendar')); $url_base = PHPWG_ROOT_PATH.'category.php' .$url_base .(empty($url_base) ? '?' : '&') .'calendar='.$cal_field.'-' - ; + ;*/ $must_show_list = true; // true until calendar generates its own display if (basename($_SERVER["PHP_SELF"]) == 'category.php') { $template->assign_block_vars('calendar', array()); - if ($calendar->generate_category_content( - $url_base.$cal_style.'-'.$cal_view.'-', - $cal_view - ) - ) + if ($calendar->generate_category_content()) { unset( $page['thumbnails_include'], @@ -228,27 +203,39 @@ WHERE id IN (' . implode(',',$page['items']) .')'; $template->assign_block_vars( 'calendar.views', array() ); foreach ($styles as $style => $style_data) { - foreach ($views as $view => $view_data) + foreach ($views as $view) { if ( $style_data['view_calendar'] or $view != CAL_VIEW_CALENDAR) { $selected = ''; - $url = $url_base.$style.'-'.$view; - if ($style==$cal_style) + $chronology = $page['chronology']; + $chronology['style'] = $style; + $chronology['view'] = $view; + + if ($style!=$cal_style) { - $url .= '-'.implode('-', $calendar->date_components); - if ( $view==$cal_view ) + $chronology_date = array(); + if ( isset($page['chronology_date'][0]) ) { - $selected = 'SELECTED'; + array_push($chronology_date, $page['chronology_date'][0]); } } else { - if (isset($calendar->date_components[0])) - { - $url .= '-' . $calendar->date_components[0]; - } + $chronology_date = $page['chronology_date']; + } + $url = duplicate_index_url( + array( + 'chronology' => $chronology, + 'chronology_date' => $chronology_date, + ) + ); + + if ($style==$cal_style and $view==$cal_view ) + { + $selected = 'SELECTED'; } + $template->assign_block_vars( 'calendar.views.view', array( @@ -260,9 +247,11 @@ WHERE id IN (' . implode(',',$page['items']) .')'; } } } - $calendar_title = - '<a href="'.$url_base.$cal_style.'-'.$cal_view.'">' - .$fields[$cal_field]['label'].'</a>'; + $url = duplicate_index_url( + array('chronology_date'=>array()), array('start') + ); + $calendar_title = '<a href="'.$url.'">' + .$fields[$chronology['field']]['label'].'</a>'; $calendar_title.= $calendar->get_display_name(); //this should be an assign_block_vars, but I need to assign 'calendar' //above and at that point I don't have the title yet. diff --git a/include/section_init.inc.php b/include/section_init.inc.php index c707e1e85..0bb82eadf 100644 --- a/include/section_init.inc.php +++ b/include/section_init.inc.php @@ -78,17 +78,17 @@ foreach (array_keys($_GET) as $keynum => $key) die('Fatal: picture identifier is missing'); } $page['image_id'] = $matches[1]; - + $next_token++; } - + if (0 === strpos($tokens[$next_token], 'cat')) { $page['section'] = 'categories'; $next_token++; - + if (isset($tokens[$next_token]) - and preg_match('/(\d+)/', $tokens[$next_token], $matches)) + and preg_match('/^(\d+)/', $tokens[$next_token], $matches)) { $page['category'] = $matches[1]; $next_token++; @@ -98,16 +98,16 @@ foreach (array_keys($_GET) as $keynum => $key) { $page['section'] = 'tags'; $page['tags'] = array(); - + $next_token++; - + for ($i = $next_token; ; $i++) { if (!isset($tokens[$i])) { break; } - + preg_match('/^(\d+)/', $tokens[$i], $matches); if (!isset($matches[1])) { @@ -122,7 +122,7 @@ foreach (array_keys($_GET) as $keynum => $key) } array_push($page['tags'], $matches[1]); } - + $next_token = $i; } else if (0 === strpos($tokens[$next_token], 'fav')) @@ -154,7 +154,7 @@ foreach (array_keys($_GET) as $keynum => $key) { $page['section'] = 'search'; $next_token++; - + preg_match('/(\d+)/', $tokens[$next_token], $matches); if (!isset($matches[1])) { @@ -184,24 +184,36 @@ foreach (array_keys($_GET) as $keynum => $key) $page['section'] = 'categories'; $next_token++; } - + for ($i = $next_token; ; $i++) { if (!isset($tokens[$i])) { break; } - + if (preg_match('/^start-(\d+)/', $tokens[$i], $matches)) { $page['start'] = $matches[1]; } - if (preg_match('/^calendar-(.+)$/', $tokens[$i], $matches)) + if (preg_match('/^posted|created/', $tokens[$i] )) { - // TODO: decide with rvelices how we name calendar/chronology is the - // URL - $_GET['calendar'] = $matches[1]; + $chronology_tokens = explode('-', $tokens[$i] ); + $page['chronology']['field'] = $chronology_tokens[0]; + array_shift($chronology_tokens); + $page['chronology']['style'] = $chronology_tokens[0]; + array_shift($chronology_tokens); + if ( count($chronology_tokens)>0 ) + { + if ('list'==$chronology_tokens[0] or + 'calendar'==$chronology_tokens[0]) + { + $page['chronology']['view'] = $chronology_tokens[0]; + array_shift($chronology_tokens); + } + $page['chronology_date'] = $chronology_tokens; + } } } } @@ -219,7 +231,7 @@ if (isset($_COOKIE['pwg_image_order']) $conf['order_by'] = str_replace( 'ORDER BY ', - 'ORDER BY '.$orders[ $_COOKIE['pwg_image_order'] ][1].',', + 'ORDER BY '.$orders[ $_COOKIE['pwg_image_order'] ][1].',', $conf['order_by'] ); $page['super_order_by'] = true; @@ -233,7 +245,7 @@ if ('categories' == $page['section']) if (isset($page['category'])) { $result = get_cat_info($page['category']); - + $page = array_merge( $page, array( @@ -246,11 +258,11 @@ if ('categories' == $page['section']) 'cat_commentable' => $result['commentable'], 'cat_id_uppercat' => $result['id_uppercat'], 'uppercats' => $result['uppercats'], - + 'title' => get_cat_display_name($result['name'], '', false), ) ); - + if (!isset($_GET['calendar'])) { $query = ' @@ -261,7 +273,7 @@ SELECT image_id '.$conf['order_by'].' ;'; $page['items'] = array_from_query($query, 'image_id'); - + $page['thumbnails_include'] = $result['nb_images'] > 0 ? 'include/category_default.inc.php' @@ -387,7 +399,7 @@ SELECT DISTINCT(id) '.$conf['order_by'].' LIMIT 0, '.$conf['top_number'].' ;'; - + $page = array_merge( $page, array( @@ -404,7 +416,7 @@ SELECT DISTINCT(id) { $page['super_order_by'] = true; $conf['order_by'] = ' ORDER BY average_rate DESC, id ASC'; - + $query =' SELECT DISTINCT(id) FROM '.IMAGES_TABLE.' @@ -436,7 +448,7 @@ SELECT DISTINCT(id) AND '.$forbidden.' '.$conf['order_by'].' ;'; - + $page = array_merge( $page, array( @@ -446,7 +458,7 @@ SELECT DISTINCT(id) ) ); } - + if (!isset($page['cat_nb_images'])) { $page['cat_nb_images'] = count($page['items']); @@ -457,7 +469,7 @@ SELECT DISTINCT(id) // | chronology | // +-----------------------------------------------------------------------+ -if (isset($_GET['calendar'])) +if (isset($page['chronology'])) { include_once( PHPWG_ROOT_PATH.'include/functions_calendar.inc.php' ); initialize_calendar(); |