Merge branch 'feature/478-last-visit'
This commit is contained in:
commit
ba2b2ab574
5 changed files with 119 additions and 31 deletions
|
@ -411,6 +411,20 @@ function pwg_log($image_id = null, $image_type = null, $format_id = null)
|
||||||
{
|
{
|
||||||
global $conf, $user, $page;
|
global $conf, $user, $page;
|
||||||
|
|
||||||
|
$update_last_visit = true;
|
||||||
|
$update_last_visit = trigger_change('pwg_log_update_last_visit', $update_last_visit);
|
||||||
|
|
||||||
|
if ($update_last_visit)
|
||||||
|
{
|
||||||
|
$query = '
|
||||||
|
UPDATE '.USER_INFOS_TABLE.'
|
||||||
|
SET last_visit = NOW(),
|
||||||
|
lastmodified = lastmodified
|
||||||
|
WHERE user_id = '.$user['id'].'
|
||||||
|
';
|
||||||
|
pwg_query($query);
|
||||||
|
}
|
||||||
|
|
||||||
$do_log = $conf['log'];
|
$do_log = $conf['log'];
|
||||||
if (is_admin())
|
if (is_admin())
|
||||||
{
|
{
|
||||||
|
|
|
@ -1614,4 +1614,46 @@ UPDATE '.USER_AUTH_KEYS_TABLE.'
|
||||||
;';
|
;';
|
||||||
pwg_query($query);
|
pwg_query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the last visit (datetime) of a user, based on history table
|
||||||
|
*
|
||||||
|
* @since 2.9
|
||||||
|
* @param int $user_id
|
||||||
|
* @param boolean $save_in_user_infos to store result in user_infos.last_visit
|
||||||
|
* @return string date & time of last visit
|
||||||
|
*/
|
||||||
|
function get_user_last_visit_from_history($user_id, $save_in_user_infos=false)
|
||||||
|
{
|
||||||
|
$last_visit = null;
|
||||||
|
|
||||||
|
$query = '
|
||||||
|
SELECT
|
||||||
|
date,
|
||||||
|
time
|
||||||
|
FROM '.HISTORY_TABLE.'
|
||||||
|
WHERE user_id = '.$user_id.'
|
||||||
|
ORDER BY id DESC
|
||||||
|
LIMIT 1
|
||||||
|
;';
|
||||||
|
$result = pwg_query($query);
|
||||||
|
while ($row = pwg_db_fetch_assoc($result))
|
||||||
|
{
|
||||||
|
$last_visit = $row['date'].' '.$row['time'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($save_in_user_infos)
|
||||||
|
{
|
||||||
|
$query = '
|
||||||
|
UPDATE '.USER_INFOS_TABLE.'
|
||||||
|
SET last_visit = '.(is_null($last_visit) ? 'NULL' : "'".$last_visit."'").',
|
||||||
|
last_visit_from_history = \'true\',
|
||||||
|
lastmodified = lastmodified
|
||||||
|
WHERE user_id = '.$user_id.'
|
||||||
|
';
|
||||||
|
pwg_query($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $last_visit;
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -123,7 +123,8 @@ function ws_users_getList($params, &$service)
|
||||||
|
|
||||||
$ui_fields = array(
|
$ui_fields = array(
|
||||||
'status','level','language','theme','nb_image_page','recent_period','expand',
|
'status','level','language','theme','nb_image_page','recent_period','expand',
|
||||||
'show_nb_comments','show_nb_hits','enabled_high','registration_date'
|
'show_nb_comments','show_nb_hits','enabled_high','registration_date',
|
||||||
|
'last_visit'
|
||||||
);
|
);
|
||||||
foreach ($ui_fields as $field)
|
foreach ($ui_fields as $field)
|
||||||
{
|
{
|
||||||
|
@ -154,6 +155,12 @@ SELECT DISTINCT ';
|
||||||
$query.= '"" AS groups';
|
$query.= '"" AS groups';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($display['ui.last_visit']))
|
||||||
|
{
|
||||||
|
if (!$first) $query.= ', ';
|
||||||
|
$query.= 'ui.last_visit_from_history AS last_visit_from_history';
|
||||||
|
}
|
||||||
|
|
||||||
$query.= '
|
$query.= '
|
||||||
FROM '. USERS_TABLE .' AS u
|
FROM '. USERS_TABLE .' AS u
|
||||||
INNER JOIN '. USER_INFOS_TABLE .' AS ui
|
INNER JOIN '. USER_INFOS_TABLE .' AS ui
|
||||||
|
@ -210,42 +217,25 @@ SELECT user_id, group_id
|
||||||
|
|
||||||
if (isset($params['display']['last_visit']))
|
if (isset($params['display']['last_visit']))
|
||||||
{
|
{
|
||||||
$query = '
|
foreach ($users as $cur_user)
|
||||||
SELECT
|
|
||||||
MAX(id) as history_id
|
|
||||||
FROM '.HISTORY_TABLE.'
|
|
||||||
WHERE user_id IN ('.implode(',', array_keys($users)).')
|
|
||||||
GROUP BY user_id
|
|
||||||
;';
|
|
||||||
$history_ids = array_from_query($query, 'history_id');
|
|
||||||
|
|
||||||
if (count($history_ids) == 0)
|
|
||||||
{
|
{
|
||||||
$history_ids[] = -1;
|
$last_visit = $cur_user['last_visit'];
|
||||||
}
|
$users[ $cur_user['id'] ]['last_visit'] = $last_visit;
|
||||||
|
|
||||||
$query = '
|
if (!get_boolean($cur_user['last_visit_from_history']) and empty($last_visit))
|
||||||
SELECT
|
{
|
||||||
user_id,
|
$last_visit = get_user_last_visit_from_history($cur_user['id'], true);
|
||||||
date,
|
$users[ $cur_user['id'] ]['last_visit'] = $last_visit;
|
||||||
time
|
}
|
||||||
FROM '.HISTORY_TABLE.'
|
|
||||||
WHERE id IN ('.implode(',', $history_ids).')
|
|
||||||
;';
|
|
||||||
$result = pwg_query($query);
|
|
||||||
while ($row = pwg_db_fetch_assoc($result))
|
|
||||||
{
|
|
||||||
$last_visit = $row['date'].' '.$row['time'];
|
|
||||||
$users[ $row['user_id'] ]['last_visit'] = $last_visit;
|
|
||||||
|
|
||||||
if (isset($params['display']['last_visit_string']))
|
if (isset($params['display']['last_visit_string']))
|
||||||
{
|
{
|
||||||
$users[ $row['user_id'] ]['last_visit_string'] = format_date($last_visit, array('day', 'month', 'year'));
|
$users[ $cur_user['id'] ]['last_visit_string'] = format_date($last_visit, array('day', 'month', 'year'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($params['display']['last_visit_since']))
|
if (isset($params['display']['last_visit_since']))
|
||||||
{
|
{
|
||||||
$users[ $row['user_id'] ]['last_visit_since'] = time_since($last_visit, 'day');
|
$users[ $cur_user['id'] ]['last_visit_since'] = time_since($last_visit, 'day');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -632,4 +622,4 @@ SELECT
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
40
install/db/149-database.php
Normal file
40
install/db/149-database.php
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
<?php
|
||||||
|
// +-----------------------------------------------------------------------+
|
||||||
|
// | Piwigo - a PHP based photo gallery |
|
||||||
|
// +-----------------------------------------------------------------------+
|
||||||
|
// | Copyright(C) 2008-2016 Piwigo Team http://piwigo.org |
|
||||||
|
// | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net |
|
||||||
|
// | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick |
|
||||||
|
// +-----------------------------------------------------------------------+
|
||||||
|
// | This program is free software; you can redistribute it and/or modify |
|
||||||
|
// | it under the terms of the GNU General Public License as published by |
|
||||||
|
// | the Free Software Foundation |
|
||||||
|
// | |
|
||||||
|
// | This program is distributed in the hope that it will be useful, but |
|
||||||
|
// | WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
|
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
||||||
|
// | General Public License for more details. |
|
||||||
|
// | |
|
||||||
|
// | You should have received a copy of the GNU General Public License |
|
||||||
|
// | along with this program; if not, write to the Free Software |
|
||||||
|
// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
|
||||||
|
// | USA. |
|
||||||
|
// +-----------------------------------------------------------------------+
|
||||||
|
|
||||||
|
if (!defined('PHPWG_ROOT_PATH'))
|
||||||
|
{
|
||||||
|
die('Hacking attempt!');
|
||||||
|
}
|
||||||
|
|
||||||
|
$upgrade_description = 'add last_visit+last_visit_from_history in user_infos table';
|
||||||
|
|
||||||
|
// we use PREFIX_TABLE, in case Piwigo uses an external user table
|
||||||
|
pwg_query('
|
||||||
|
ALTER TABLE `'.PREFIX_TABLE.'user_infos`
|
||||||
|
ADD COLUMN `last_visit` datetime default NULL,
|
||||||
|
ADD COLUMN `last_visit_from_history` enum(\'true\',\'false\') NOT NULL default \'false\'
|
||||||
|
;');
|
||||||
|
|
||||||
|
echo "\n".$upgrade_description."\n";
|
||||||
|
|
||||||
|
?>
|
|
@ -460,6 +460,8 @@ CREATE TABLE `piwigo_user_infos` (
|
||||||
`level` tinyint unsigned NOT NULL default '0',
|
`level` tinyint unsigned NOT NULL default '0',
|
||||||
`activation_key` varchar(255) default NULL,
|
`activation_key` varchar(255) default NULL,
|
||||||
`activation_key_expire` datetime default NULL,
|
`activation_key_expire` datetime default NULL,
|
||||||
|
`last_visit` datetime default NULL,
|
||||||
|
`last_visit_from_history` enum('true','false') NOT NULL default 'false',
|
||||||
`lastmodified` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
`lastmodified` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY (`user_id`),
|
PRIMARY KEY (`user_id`),
|
||||||
KEY `lastmodified` (`lastmodified`)
|
KEY `lastmodified` (`lastmodified`)
|
||||||
|
|
Loading…
Reference in a new issue