diff options
-rw-r--r-- | include/functions.inc.php | 14 | ||||
-rw-r--r-- | include/functions_user.inc.php | 42 | ||||
-rw-r--r-- | include/ws_functions/pwg.users.php | 52 | ||||
-rw-r--r-- | install/config.sql | 2 | ||||
-rw-r--r-- | install/db/149-database.php | 40 | ||||
-rw-r--r-- | install/piwigo_structure-mysql.sql | 2 |
6 files changed, 120 insertions, 32 deletions
diff --git a/include/functions.inc.php b/include/functions.inc.php index 018747817..5cef77f62 100644 --- a/include/functions.inc.php +++ b/include/functions.inc.php @@ -411,6 +411,20 @@ function pwg_log($image_id = null, $image_type = null, $format_id = null) { 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']; if (is_admin()) { diff --git a/include/functions_user.inc.php b/include/functions_user.inc.php index de8f87c7f..6a910c511 100644 --- a/include/functions_user.inc.php +++ b/include/functions_user.inc.php @@ -1614,4 +1614,46 @@ UPDATE '.USER_AUTH_KEYS_TABLE.' ;'; 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; +} ?> diff --git a/include/ws_functions/pwg.users.php b/include/ws_functions/pwg.users.php index eaa96c9c1..1a55fcf90 100644 --- a/include/ws_functions/pwg.users.php +++ b/include/ws_functions/pwg.users.php @@ -123,7 +123,8 @@ function ws_users_getList($params, &$service) $ui_fields = array( '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) { @@ -154,6 +155,12 @@ SELECT DISTINCT '; $query.= '"" AS groups'; } + if (isset($display['ui.last_visit'])) + { + if (!$first) $query.= ', '; + $query.= 'ui.last_visit_from_history AS last_visit_from_history'; + } + $query.= ' FROM '. USERS_TABLE .' AS u INNER JOIN '. USER_INFOS_TABLE .' AS ui @@ -210,42 +217,25 @@ SELECT user_id, group_id if (isset($params['display']['last_visit'])) { - $query = ' -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; - } - - $query = ' -SELECT - user_id, - date, - time - FROM '.HISTORY_TABLE.' - WHERE id IN ('.implode(',', $history_ids).') -;'; - $result = pwg_query($query); - while ($row = pwg_db_fetch_assoc($result)) + foreach ($users as $cur_user) { - $last_visit = $row['date'].' '.$row['time']; - $users[ $row['user_id'] ]['last_visit'] = $last_visit; - + $last_visit = $cur_user['last_visit']; + $users[ $cur_user['id'] ]['last_visit'] = $last_visit; + + if (!get_boolean($cur_user['last_visit_from_history']) and empty($last_visit)) + { + $last_visit = get_user_last_visit_from_history($cur_user['id'], true); + $users[ $cur_user['id'] ]['last_visit'] = $last_visit; + } + 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'])) { - $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 )); } -?>
\ No newline at end of file +?> diff --git a/install/config.sql b/install/config.sql index d247b93c0..b1f8e17fe 100644 --- a/install/config.sql +++ b/install/config.sql @@ -15,7 +15,7 @@ INSERT INTO piwigo_config (param,value,comment) VALUES ('email_admin_on_comment_ INSERT INTO piwigo_config (param,value,comment) VALUES ('email_admin_on_comment_deletion','false','Send an email to the administrators when a comment is deleted'); INSERT INTO piwigo_config (param,value,comment) VALUES ('gallery_locked','false','Lock your gallery temporary for non admin users'); INSERT INTO piwigo_config (param,value,comment) VALUES ('gallery_title','','Title at top of each page and for RSS feed'); -INSERT INTO piwigo_config (param,value,comment) VALUES ('rate','true','Rating pictures feature is enabled'); +INSERT INTO piwigo_config (param,value,comment) VALUES ('rate','false','Rating pictures feature is enabled'); INSERT INTO piwigo_config (param,value,comment) VALUES ('rate_anonymous','true','Rating pictures feature is also enabled for visitors'); INSERT INTO piwigo_config (param,value,comment) VALUES ('page_banner','','html displayed on the top each page of your gallery'); INSERT INTO piwigo_config (param,value,comment) VALUES ('history_admin','false','keep a history of administrator visits on your website'); diff --git a/install/db/149-database.php b/install/db/149-database.php new file mode 100644 index 000000000..a42af507a --- /dev/null +++ b/install/db/149-database.php @@ -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"; + +?> diff --git a/install/piwigo_structure-mysql.sql b/install/piwigo_structure-mysql.sql index 1c7853edc..76e9fe90b 100644 --- a/install/piwigo_structure-mysql.sql +++ b/install/piwigo_structure-mysql.sql @@ -460,6 +460,8 @@ CREATE TABLE `piwigo_user_infos` ( `level` tinyint unsigned NOT NULL default '0', `activation_key` varchar(255) 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, PRIMARY KEY (`user_id`), KEY `lastmodified` (`lastmodified`) |