Pastebin

main_listener

von Mike-on-Tour (16.09.2020 11:40)
Beschreibung:
Fix zum Beseitigen der Warnung bzgl. 'SECS_PER_DAY'
Snippet erstellt:
16.09.2020 11:40
Snippet wird automatisch gelöscht:
15.11.2020 10:40

Dein Code:
  1. <?php
  2. /**
  3. *
  4. * @package UserReminder v1.2.1
  5. * @copyright (c) 2019, 2020 Mike-on-Tour
  6. * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
  7. *
  8. */
  9.  
  10. namespace mot\userreminder\event;
  11.  
  12. /**
  13.  * @ignore
  14.  */
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16.  
  17. /**
  18.  * Event listener
  19.  */
  20. class main_listener implements EventSubscriberInterface
  21. {
  22.  
  23.         public static function getSubscribedEvents()
  24.         {
  25.                 return array(
  26.                         'core.session_create_after'             => 'check_user_login',
  27.                 );
  28.         }
  29.  
  30.         /** @var \phpbb\config\config */
  31.         protected $config;
  32.  
  33.         /** @var \phpbb\db\driver\driver_interface */
  34.         protected $db;
  35.  
  36.         /** @var \mot\userreminder\common */
  37.         protected $common;
  38.  
  39.         /**
  40.          * Constructor
  41.          *
  42.          * @param \phpbb\config\config $config   Config object
  43.          * @param \phpbb\db\driver\driver_interface $db Database object
  44.          */
  45.         public function __construct(\phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \mot\userreminder\common $common)
  46.         {
  47.                 $this->config = $config;
  48.                 $this->db = $db;
  49.                 $this->common = $common;
  50.                 define("SECS_PER_DAY", 86400);
  51.         }
  52.  
  53.  
  54.         /**
  55.         * Set the reminding times to Zero every time a user logs into the forum in order to delete any reminders in case this user has been reminded and logs on again.
  56.         * In addition we set the value of "mot_last_login" to the time stamp the user logged in to make sure that there is no gap in which this "newborn" user gets reminded again.
  57.         * If in automatic mode check for users in need of being reminded or deleted
  58.         *
  59.         * @param session_data
  60.         *       Array[session_user_id, session_start, session_last_visit, session_time, session_browser, session_forwarded_for, session_ip, session_autologin, session_admin, session_viewonline,
  61.         *               session_page, session_forum_id, session_id]
  62.         *
  63.         */
  64.         public function check_user_login($event)
  65.         {
  66.                 /*
  67.                 * First we set the times of first and second reminder to Zero to flag this user as active again in order to delete any reminders this user might have
  68.                 */
  69.  
  70.                 $session_data = $event['session_data'];
  71.                 if ($session_data['session_user_id'] > 1)               // avoid updating the guest account (user_id == 1 when logging off)
  72.                 {
  73.                         // we set the current time variable first
  74.                         $now = time();
  75.  
  76.                         $sql_ary = array(
  77.                                 'mot_reminded_one'      => 0,
  78.                                 'mot_reminded_two'      => 0,
  79.                                 'mot_last_login'        => $now,
  80.                         );
  81.  
  82.                         $query = 'UPDATE ' . USERS_TABLE . '
  83.                                                 SET ' . $this->db->sql_build_array('UPDATE', $sql_ary) . '
  84.                                                 WHERE user_id = ' . (int) $session_data['session_user_id'];
  85.                         $this->db->sql_query($query);
  86.  
  87.                         /*
  88.                         * Now we check whether reminder mails should be sent automatically and if yes we check what users are supposed to get a reminding email
  89.                         */
  90.                         if ($this->config['mot_ur_autoremind'] == 1)
  91.                         {
  92.                                 $day_limit = $now - (SECS_PER_DAY * $this->config['mot_ur_inactive_days']);
  93.  
  94.                                 // ignore inactive users, anonymous (=== guest) and bots
  95.                                 // ignore users who have never posted anything
  96.                                 $query = 'SELECT user_id ' .
  97.                                                 'FROM  ' . USERS_TABLE . '
  98.                                                 WHERE ' . $this->db->sql_in_set('user_type', array(USER_NORMAL,USER_FOUNDER)) . '
  99.                                                 AND user_posts > 0
  100.                                                 AND (
  101.                                                 (mot_last_login <= ' . (int) $day_limit . ' AND mot_reminded_one = 0) ' .       // get all inactive users who have not been reminded yet
  102.                                                 'OR (mot_reminded_one > 0 AND mot_reminded_two = 0)) ';                                         // get all inactive users due for the second reminder
  103.  
  104.                                 if ($this->config['mot_ur_protected_members'] != '')                    // prevent sql errors due to empty string
  105.                                 {
  106.                                         $query .= ' AND user_id NOT IN (' . $this->config['mot_ur_protected_members'] . ')';
  107.                                 }
  108.                                 $query .= ' ORDER BY user_id';
  109.  
  110.                                 $result = $this->db->sql_query($query);
  111.                                 $reminders = $this->db->sql_fetchrowset($result);
  112.                                 $this->db->sql_freeresult($result);
  113.  
  114.                                 $marked = array();
  115.                                 foreach ($reminders as $value)
  116.                                 {
  117.                                         $marked[] = $value['user_id'];
  118.                                 }
  119.                                 $this->common->remind_users($marked);
  120.                         }
  121.  
  122.                         /*
  123.                         * Now we check whether users should be deleted automatically and if yes we check what users are supposed to get deleted and do it
  124.                         */
  125.                         if ($this->config['mot_ur_autodelete'] == 1)
  126.                         {
  127.                                 $day_limit = $now - (SECS_PER_DAY * $this->config['mot_ur_days_until_deleted']);
  128.  
  129.                                 $marked_users = array();
  130.  
  131.                                 // ignore users who have never posted anything (they are dealt with in the "zeroposter" tab)
  132.                                 // get only users who have been reminded twice
  133.                                 $query = 'SELECT user_id
  134.                                                 FROM  ' . USERS_TABLE . '
  135.                                                 WHERE ' . $this->db->sql_in_set('user_type', array(USER_NORMAL,USER_FOUNDER)) . '
  136.                                                 AND user_posts > 0
  137.                                                 AND mot_reminded_two > 0
  138.                                                 AND mot_reminded_two <= ' . (int) $day_limit;                   // get all users who have been inactive since the 2nd reminder for at least the number of days specified in settings
  139.  
  140.                                 if ($this->config['mot_ur_protected_members'] != '')    // prevent sql errors due to empty string
  141.                                 {
  142.                                         $query .= ' AND user_id NOT IN (' . $this->config['mot_ur_protected_members'] . ')';
  143.                                 }
  144.                                 $query .= ' ORDER BY user_id';
  145.  
  146.                                 $result = $this->db->sql_query($query);
  147.                                 $user_result = $this->db->sql_fetchrowset($result);
  148.                                 $this->db->sql_freeresult($result);
  149.                                 foreach ($user_result as $value)
  150.                                 {
  151.                                         $marked_users[] = $value['user_id'];
  152.                                 }
  153.                                 $this->common->delete_users($marked_users);
  154.                         }
  155.                 }
  156.  
  157.         }
  158.  
  159. }
  160.  

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. Alternativ kannst du den gesamten Eintrag auch als Datei herunterladen.