mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-08-07 09:13:02 +02:00
Feature 511 : fix problems with calendar functions
add pwg_db_concat() function git-svn-id: http://piwigo.org/svn/trunk@4833 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
@@ -220,6 +220,7 @@ $this->get_date_where($level).'
|
||||
;';
|
||||
|
||||
$level_items = simple_hash_from_query($query, 'period', 'nb_images');
|
||||
$level_items = array_to_int($level_items);
|
||||
|
||||
if ( count($level_items)==1 and
|
||||
count($page['chronology_date'])<count($this->calendar_levels)-1)
|
||||
@@ -291,13 +292,14 @@ GROUP BY period';
|
||||
|
||||
$current = implode('-', $page['chronology_date'] );
|
||||
$upper_items = array_from_query( $query, 'period');
|
||||
$upper_items = array_to_int($upper_items);
|
||||
|
||||
usort($upper_items, 'date_compare');
|
||||
usort($upper_items, 'version_compare');
|
||||
$upper_items_rank = array_flip($upper_items);
|
||||
if ( !isset($upper_items_rank[$current]) )
|
||||
{
|
||||
array_push($upper_items, $current);// just in case (external link)
|
||||
usort($upper_items, 'date_compare');
|
||||
usort($upper_items, 'version_compare');
|
||||
$upper_items_rank = array_flip($upper_items);
|
||||
}
|
||||
$current_rank = $upper_items_rank[$current];
|
||||
|
||||
@@ -458,6 +458,12 @@ function do_maintenance_all_tables()
|
||||
}
|
||||
}
|
||||
|
||||
function pwg_db_concat($array)
|
||||
{
|
||||
$string = implode($array, ',');
|
||||
return 'CONCAT('. $string.')';
|
||||
}
|
||||
|
||||
function pwg_db_concat_ws($array, $separator)
|
||||
{
|
||||
$string = implode($array, ',');
|
||||
|
||||
@@ -392,6 +392,12 @@ WHERE tablename like \''.$prefixeTable.'%\'';
|
||||
);
|
||||
}
|
||||
|
||||
function pwg_db_concat($array)
|
||||
{
|
||||
$string = implode($array, ',');
|
||||
return 'ARRAY_TO_STRING(ARRAY['.$string.'])';
|
||||
}
|
||||
|
||||
function pwg_db_concat_ws($array, $separator)
|
||||
{
|
||||
$string = implode($array, ',');
|
||||
|
||||
@@ -54,7 +54,9 @@ function pwg_db_connect($host, $user, $password, $database)
|
||||
}
|
||||
|
||||
$link->createFunction('now', 'pwg_now', 0);
|
||||
$link->createFunction('unix_timestamp', 'pwg_unix_timestamp', 0);
|
||||
$link->createFunction('md5', 'md5', 1);
|
||||
$link->createFunction('if', 'pwg_if', 3);
|
||||
|
||||
$link->createAggregate('std', 'pwg_std_step', 'pwg_std_finalize');
|
||||
$link->createFunction('regexp', 'pwg_regexp', 2);
|
||||
@@ -401,6 +403,11 @@ WHERE name LIKE \''.$prefixeTable.'%\'';
|
||||
);
|
||||
}
|
||||
|
||||
function pwg_db_concat($array)
|
||||
{
|
||||
return implode($array, ' || ');
|
||||
}
|
||||
|
||||
function pwg_db_concat_ws($array, $separator)
|
||||
{
|
||||
$glue = sprintf(' || \'%s\' || ', $separator);
|
||||
@@ -468,7 +475,7 @@ function pwg_db_get_recent_period_expression($period, $date='CURRENT_DATE')
|
||||
$date = '\''.$date.'\'';
|
||||
}
|
||||
|
||||
return 'date('.$date.',\''.$period.' DAY\')';
|
||||
return 'date('.$date.',\''.-$period.' DAY\')';
|
||||
}
|
||||
|
||||
function pwg_db_get_recent_period($period, $date='CURRENT_DATE')
|
||||
@@ -511,12 +518,12 @@ function pwg_db_get_dayofmonth($date)
|
||||
|
||||
function pwg_db_get_dayofweek($date)
|
||||
{
|
||||
return 'strftime(\'%w\','.$date.')+1';
|
||||
return 'strftime(\'%w\','.$date.')';
|
||||
}
|
||||
|
||||
function pwg_db_get_weekday($date)
|
||||
{
|
||||
return 'strftime(\'%w\','.$date.')';
|
||||
return 'strftime(\'%w\',date('.$date.',\'-1 DAY\'))';
|
||||
}
|
||||
|
||||
// my_error returns (or send to standard output) the message concerning the
|
||||
@@ -548,6 +555,23 @@ function pwg_now()
|
||||
return date('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
function pwg_unix_timestamp()
|
||||
{
|
||||
return time();
|
||||
}
|
||||
|
||||
function pwg_if($expression, $value1, $value2)
|
||||
{
|
||||
if ($expression)
|
||||
{
|
||||
return $value1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $value2;
|
||||
}
|
||||
}
|
||||
|
||||
function pwg_regexp($pattern, $string)
|
||||
{
|
||||
$pattern = sprintf('`%s`', $pattern);
|
||||
|
||||
@@ -290,23 +290,35 @@ WHERE id IN (' . implode(',',$page['items']) .')';
|
||||
pwg_debug('end initialize_calendar');
|
||||
}
|
||||
|
||||
/*
|
||||
* callback to sort array with date comparaison
|
||||
*
|
||||
**/
|
||||
function date_compare(&$a, &$b)
|
||||
function array_to_int($array)
|
||||
{
|
||||
$parts = explode('-', $a);
|
||||
foreach ($parts as &$p) {
|
||||
$p = (int)$p;
|
||||
foreach ($array as $k => $v)
|
||||
{
|
||||
if ((int)$k==$k)
|
||||
{
|
||||
$key = (int) $k;
|
||||
}
|
||||
else
|
||||
{
|
||||
$key = $k;
|
||||
}
|
||||
if (is_array($v))
|
||||
{
|
||||
$result[$key] = array_to_int($v);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (is_int($v))
|
||||
{
|
||||
$value = (int) $v;
|
||||
}
|
||||
else
|
||||
{
|
||||
$value = $v;
|
||||
}
|
||||
$result[$key] = $value;
|
||||
}
|
||||
}
|
||||
$a = implode('-', $parts);
|
||||
$parts = explode('-', $b);
|
||||
foreach ($parts as &$p) {
|
||||
$p = (int)$p;
|
||||
}
|
||||
$b = implode('-', $parts);
|
||||
|
||||
return strcmp($a, $b);
|
||||
return $result;
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user