[ Index ] |
PHP Cross Reference of phpBB-3.2.11-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * 4 * This file is part of the phpBB Forum Software package. 5 * 6 * @copyright (c) phpBB Limited <https://www.phpbb.com> 7 * @license GNU General Public License, version 2 (GPL-2.0) 8 * 9 * For full copyright and license information, please see 10 * the docs/CREDITS.txt file. 11 * 12 */ 13 14 namespace phpbb\cron\task\core; 15 16 /** 17 * Prune one forum of its shadow topics cron task. 18 * 19 * It is intended to be used when cron is invoked via web. 20 * This task can decide whether it should be run using data obtained by viewforum 21 * code, without making additional database queries. 22 */ 23 class prune_shadow_topics extends \phpbb\cron\task\base implements \phpbb\cron\task\parametrized 24 { 25 protected $phpbb_root_path; 26 protected $php_ext; 27 protected $config; 28 protected $db; 29 protected $log; 30 protected $user; 31 32 /** 33 * If $forum_data is given, it is assumed to contain necessary information 34 * about a single forum that is to be pruned. 35 * 36 * If $forum_data is not given, forum id will be retrieved via $request->variable() 37 * and a database query will be performed to load the necessary information 38 * about the forum. 39 */ 40 protected $forum_data; 41 42 /** 43 * Constructor. 44 * 45 * @param string $phpbb_root_path The root path 46 * @param string $php_ext PHP file extension 47 * @param \phpbb\config\config $config The config 48 * @param \phpbb\db\driver\driver_interface $db The db connection 49 * @param \phpbb\log\log $log The phpBB log system 50 * @param \phpbb\user $user The phpBB user object 51 */ 52 public function __construct($phpbb_root_path, $php_ext, \phpbb\config\config $config, \phpbb\db\driver\driver_interface $db, \phpbb\log\log $log, \phpbb\user $user) 53 { 54 $this->phpbb_root_path = $phpbb_root_path; 55 $this->php_ext = $php_ext; 56 $this->config = $config; 57 $this->db = $db; 58 $this->log = $log; 59 $this->user = $user; 60 } 61 62 /** 63 * Manually set forum data. 64 * 65 * @param array $forum_data Information about a forum to be pruned. 66 */ 67 public function set_forum_data($forum_data) 68 { 69 $this->forum_data = $forum_data; 70 } 71 72 /** 73 * Runs this cron task. 74 * 75 * @return null 76 */ 77 public function run() 78 { 79 if (!function_exists('auto_prune')) 80 { 81 include($this->phpbb_root_path . 'includes/functions_admin.' . $this->php_ext); 82 } 83 84 if ($this->forum_data['prune_shadow_days']) 85 { 86 $this->auto_prune_shadow_topics($this->forum_data['forum_id'], 'shadow', $this->forum_data['forum_flags'], $this->forum_data['prune_shadow_days'], $this->forum_data['prune_shadow_freq']); 87 } 88 } 89 90 /** 91 * Returns whether this cron task can run, given current board configuration. 92 * 93 * This cron task will not run when system cron is utilised, as in 94 * such cases prune_all_forums task would run instead. 95 * 96 * Additionally, this task must be given the forum data, either via 97 * the constructor or parse_parameters method. 98 * 99 * @return bool 100 */ 101 public function is_runnable() 102 { 103 return !$this->config['use_system_cron'] && $this->forum_data; 104 } 105 106 /** 107 * Returns whether this cron task should run now, because enough time 108 * has passed since it was last run. 109 * 110 * Forum pruning interval is specified in the forum data. 111 * 112 * @return bool 113 */ 114 public function should_run() 115 { 116 return $this->forum_data['enable_shadow_prune'] && $this->forum_data['prune_shadow_next'] < time(); 117 } 118 119 /** 120 * Returns parameters of this cron task as an array. 121 * The array has one key, f, whose value is id of the forum to be pruned. 122 * 123 * @return array 124 */ 125 public function get_parameters() 126 { 127 return array('f' => $this->forum_data['forum_id']); 128 } 129 130 /** 131 * Parses parameters found in $request, which is an instance of 132 * \phpbb\request\request_interface. 133 * 134 * It is expected to have a key f whose value is id of the forum to be pruned. 135 * 136 * @param \phpbb\request\request_interface $request Request object. 137 * 138 * @return null 139 */ 140 public function parse_parameters(\phpbb\request\request_interface $request) 141 { 142 $this->forum_data = null; 143 if ($request->is_set('f')) 144 { 145 $forum_id = $request->variable('f', 0); 146 147 $sql = 'SELECT forum_id, prune_shadow_next, enable_shadow_prune, prune_shadow_days, forum_flags, prune_shadow_freq 148 FROM ' . FORUMS_TABLE . " 149 WHERE forum_id = $forum_id"; 150 $result = $this->db->sql_query($sql); 151 $row = $this->db->sql_fetchrow($result); 152 $this->db->sql_freeresult($result); 153 154 if ($row) 155 { 156 $this->forum_data = $row; 157 } 158 } 159 } 160 161 /** 162 * Automatically prune shadow topics 163 * Based on fuunction auto_prune() 164 * @param int $forum_id Forum ID of forum that should be pruned 165 * @param string $prune_mode Prune mode 166 * @param int $prune_flags Prune flags 167 * @param int $prune_days Prune date in days 168 * @param int $prune_freq Prune frequency 169 * @return null 170 */ 171 protected function auto_prune_shadow_topics($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_freq) 172 { 173 $sql = 'SELECT forum_name 174 FROM ' . FORUMS_TABLE . " 175 WHERE forum_id = $forum_id"; 176 $result = $this->db->sql_query($sql, 3600); 177 $row = $this->db->sql_fetchrow($result); 178 $this->db->sql_freeresult($result); 179 180 if ($row) 181 { 182 $prune_date = time() - ($prune_days * 86400); 183 $next_prune = time() + ($prune_freq * 86400); 184 185 prune($forum_id, $prune_mode, $prune_date, $prune_flags, true); 186 187 $sql = 'UPDATE ' . FORUMS_TABLE . " 188 SET prune_shadow_next = $next_prune 189 WHERE forum_id = $forum_id"; 190 $this->db->sql_query($sql); 191 192 $user_id = (empty($this->user->data)) ? ANONYMOUS : $this->user->data['user_id']; 193 $user_ip = (empty($this->user->ip)) ? '' : $this->user->ip; 194 195 $this->log->add('admin', $user_id, $user_ip, 'LOG_PRUNE_SHADOW', false, array($row['forum_name'])); 196 } 197 198 return; 199 } 200 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Nov 11 20:33:01 2020 | Cross-referenced by PHPXref 0.7.1 |