From 1fe7705a0203294303a0280bd07a0a88b30621e8 Mon Sep 17 00:00:00 2001 From: DiscuzX <153619335@qq.com> Date: Sun, 14 Mar 2021 22:32:43 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E7=AB=99=E7=82=B9=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=AE=9E=E6=97=B6=E4=B8=8A=E4=B8=8B=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- upload/source/admincp/admincp_tasks.php | 1 + .../source/class/table/table_common_task.php | 58 ++++++++++++++++++- upload/source/module/home/home_task.php | 2 + 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/upload/source/admincp/admincp_tasks.php b/upload/source/admincp/admincp_tasks.php index 4564efd68..497ea833f 100644 --- a/upload/source/admincp/admincp_tasks.php +++ b/upload/source/admincp/admincp_tasks.php @@ -538,6 +538,7 @@ if(!($operation)) { C::t('common_taskvar')->update_by_taskid($id, $item, array('value' => is_array($value) ? serialize($value) : $value)); } } + C::t('common_task')->update_available(1); cpmsg('tasks_succeed', "action=tasks", 'succeed'); diff --git a/upload/source/class/table/table_common_task.php b/upload/source/class/table/table_common_task.php index 264887727..1d738307b 100644 --- a/upload/source/class/table/table_common_task.php +++ b/upload/source/class/table/table_common_task.php @@ -52,8 +52,62 @@ class table_common_task extends discuz_table return DB::query("UPDATE %t SET achievers=achievers+%s WHERE taskid=%d", array($this->_table, $v, $taskid)); } - public function update_available() { - DB::query("UPDATE %t SET available='2' WHERE available='1' AND starttime>'0' AND starttime<=%d AND (endtime IS NULL OR endtime>%d)", array($this->_table, TIMESTAMP, TIMESTAMP), false, true); + public function update_available($update = 0) { + global $_G; + $updatetasknext = 0; + loadcache('tasknext'); + $tasknext = getglobal('cache/tasknext'); + if(!is_array($tasknext)) { + $tasknext = array(); + } + if(!isset($tasknext['starttime']) || $tasknext['starttime'] > TIMESTAMP + 86400) { + $tasknext['starttime'] = 0; + } + if(!isset($tasknext['endtime']) || $tasknext['endtime'] > TIMESTAMP + 86400) { + $tasknext['endtime'] = 0; + } + echo '
1 '.TIMESTAMP.'
'; + print_r($tasknext); + if(TIMESTAMP >= $tasknext['starttime'] || TIMESTAMP >= $tasknext['endtime'] || $update) { + echo '
5
'; + print_r($tasknext); + $processname = 'update_task_available'; + if($update || !discuz_process::islocked($processname, 600)) { + + echo '
2
'; + print_r($tasknext); + if(TIMESTAMP >= $tasknext['starttime'] || $update) { + //上线开始的活动 + DB::query("UPDATE %t SET available='2' WHERE available='1' AND starttime<=%d AND (endtime='0' OR endtime>%d)", array($this->_table, TIMESTAMP, TIMESTAMP), false, true); + //下个活动开始时间 + $starttime = DB::result_first("SELECT starttime FROM %t WHERE available='1' AND starttime>'0' AND (endtime='0' OR endtime>%d) ORDER BY starttime ASC", array($this->_table, TIMESTAMP, TIMESTAMP)); + //下次触发时间不超过24小时 + $tasknext['starttime'] = $starttime ? min($starttime, TIMESTAMP + 86400) : TIMESTAMP + 86400; + + echo '
3
'; + print_r($tasknext); + $updatetasknext = 1; + } + + if(TIMESTAMP >= $tasknext['endtime'] || $update) { + //隐藏未开始或者结束的活动 + DB::query("UPDATE %t SET available='1' WHERE available='2' AND (starttime>%d || (endtime<=%d && endtime>'0'))", array($this->_table, TIMESTAMP, TIMESTAMP), false, true); + //下个活动结束时间 + $endtime = DB::result_first("SELECT endtime FROM %t WHERE available='2' AND endtime>'0' ORDER BY endtime ASC", array($this->_table)); + //下次触发时间不超过24小时 + $tasknext['endtime'] = $endtime ? min($endtime, TIMESTAMP + 86400) : TIMESTAMP + 86400; + + echo '
4
'; + print_r($tasknext); + $updatetasknext = 1; + } + + if($updatetasknext) { + savecache('tasknext', $tasknext); + } + discuz_process::unlock($processname); + } + } } public function fetch_all_by_status($uid, $status) { diff --git a/upload/source/module/home/home_task.php b/upload/source/module/home/home_task.php index f4824f74b..784eb6562 100644 --- a/upload/source/module/home/home_task.php +++ b/upload/source/module/home/home_task.php @@ -19,6 +19,8 @@ if(!$_G['setting']['taskon'] && $_G['adminid'] != 1) { showmessage('task_close'); } +C::t('common_task')->update_available(); + require_once libfile('class/task'); $tasklib = & task::instance(); -- Gitee From 3aedaf66a5fbda823b4c5e19ad9abf4205a946dc Mon Sep 17 00:00:00 2001 From: DiscuzX <153619335@qq.com> Date: Sun, 14 Mar 2021 22:33:34 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- upload/source/include/cron/cron_cleanup_daily.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/upload/source/include/cron/cron_cleanup_daily.php b/upload/source/include/cron/cron_cleanup_daily.php index 9c5922aaf..6960dc5ca 100644 --- a/upload/source/include/cron/cron_cleanup_daily.php +++ b/upload/source/include/cron/cron_cleanup_daily.php @@ -13,8 +13,6 @@ if(!defined('IN_DISCUZ')) { require_once libfile('function/cache'); updatecache('forumrecommend'); -C::t('common_task')->update_available(); - if(C::t('common_advertisement')->close_endtime()) { updatecache(array('setting', 'advs')); } -- Gitee From d58e76781bdaacc22d09d49afff0f20a9b0f7a6f Mon Sep 17 00:00:00 2001 From: DiscuzX <153619335@qq.com> Date: Sun, 14 Mar 2021 22:41:12 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- upload/source/class/table/table_common_task.php | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/upload/source/class/table/table_common_task.php b/upload/source/class/table/table_common_task.php index 1d738307b..36d90d096 100644 --- a/upload/source/class/table/table_common_task.php +++ b/upload/source/class/table/table_common_task.php @@ -66,16 +66,9 @@ class table_common_task extends discuz_table if(!isset($tasknext['endtime']) || $tasknext['endtime'] > TIMESTAMP + 86400) { $tasknext['endtime'] = 0; } - echo '
1 '.TIMESTAMP.'
'; - print_r($tasknext); if(TIMESTAMP >= $tasknext['starttime'] || TIMESTAMP >= $tasknext['endtime'] || $update) { - echo '
5
'; - print_r($tasknext); $processname = 'update_task_available'; if($update || !discuz_process::islocked($processname, 600)) { - - echo '
2
'; - print_r($tasknext); if(TIMESTAMP >= $tasknext['starttime'] || $update) { //上线开始的活动 DB::query("UPDATE %t SET available='2' WHERE available='1' AND starttime<=%d AND (endtime='0' OR endtime>%d)", array($this->_table, TIMESTAMP, TIMESTAMP), false, true); @@ -83,9 +76,6 @@ class table_common_task extends discuz_table $starttime = DB::result_first("SELECT starttime FROM %t WHERE available='1' AND starttime>'0' AND (endtime='0' OR endtime>%d) ORDER BY starttime ASC", array($this->_table, TIMESTAMP, TIMESTAMP)); //下次触发时间不超过24小时 $tasknext['starttime'] = $starttime ? min($starttime, TIMESTAMP + 86400) : TIMESTAMP + 86400; - - echo '
3
'; - print_r($tasknext); $updatetasknext = 1; } @@ -96,9 +86,6 @@ class table_common_task extends discuz_table $endtime = DB::result_first("SELECT endtime FROM %t WHERE available='2' AND endtime>'0' ORDER BY endtime ASC", array($this->_table)); //下次触发时间不超过24小时 $tasknext['endtime'] = $endtime ? min($endtime, TIMESTAMP + 86400) : TIMESTAMP + 86400; - - echo '
4
'; - print_r($tasknext); $updatetasknext = 1; } -- Gitee From 8d19ff72d579f6a385b6ca9752d5da24af317cce Mon Sep 17 00:00:00 2001 From: DiscuzX <153619335@qq.com> Date: Mon, 15 Mar 2021 12:22:53 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BB=8Etable=E4=B8=AD=E5=89=A5=E7=A6=BB?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E9=80=BB=E8=BE=91=EF=BC=9B=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81=EF=BC=88?= =?UTF-8?q?=E6=9C=AA=E5=90=AF=E7=94=A8=E3=80=81=E6=9C=AA=E4=B8=8A=E7=BA=BF?= =?UTF-8?q?=E3=80=81=E8=BF=9B=E8=A1=8C=E4=B8=AD=E3=80=81=E5=B7=B2=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- upload/source/admincp/admincp_tasks.php | 16 ++++- upload/source/class/class_task.php | 46 +++++++++++++++ .../source/class/table/table_common_task.php | 59 ++++++------------- upload/source/language/lang_admincp.php | 5 ++ upload/source/module/home/home_task.php | 3 +- 5 files changed, 83 insertions(+), 46 deletions(-) diff --git a/upload/source/admincp/admincp_tasks.php b/upload/source/admincp/admincp_tasks.php index 497ea833f..3300d7bb6 100644 --- a/upload/source/admincp/admincp_tasks.php +++ b/upload/source/admincp/admincp_tasks.php @@ -40,7 +40,7 @@ if(!($operation)) { showsetting('tasks_on', 'taskonnew', $_G['setting']['taskon'], 'radio'); showtablefooter(); showtableheader('tasks_list', 'fixpadding'); - showsubtitle(array('display_order', 'available', 'name', 'tasks_reward', 'time', '')); + showsubtitle(array('display_order', 'available', 'name', 'tasks_reward', 'time', 'tasks_status', '')); $starttasks = array(); foreach(C::t('common_task')->fetch_all_data() as $task) { @@ -78,12 +78,22 @@ if(!($operation)) { $task['time'] = cplang('nolimit'); } + if($task['available'] == 2 && ($task['starttime'] > TIMESTAMP || ($task['endtime'] && $task['endtime'] <= TIMESTAMP))) { + $task['available'] = 1; + C::t('common_task')->update($task['taskid'], array('available' => 1)); + } + if($task['available'] == 1 && (!$task['starttime'] || $task['starttime'] <= TIMESTAMP) && (!$task['endtime'] || $task['endtime'] > TIMESTAMP)) { + $task['available'] = 2; + C::t('common_task')->update($task['taskid'], array('available' => 2)); + } + showtablerow('', array('class="td25"', 'class="td25"'), array( '', "", "", $reward, $task['time'].'', + ($task['available'] == 1 ? ($task['endtime'] && $task['endtime'] <= TIMESTAMP ? cplang('tasks_status_3') : cplang('tasks_status_1')) : ($task['available'] == 2 ? cplang('tasks_status_2') : cplang('tasks_status_0'))), "$lang[edit]  $lang[delete]" )); @@ -538,7 +548,9 @@ if(!($operation)) { C::t('common_taskvar')->update_by_taskid($id, $item, array('value' => is_array($value) ? serialize($value) : $value)); } } - C::t('common_task')->update_available(1); + require_once libfile('class/task'); + $tasklib = & task::instance(); + $tasklib->update_available(1); cpmsg('tasks_succeed', "action=tasks", 'succeed'); diff --git a/upload/source/class/class_task.php b/upload/source/class/class_task.php index e9e410704..fa590ae52 100644 --- a/upload/source/class/class_task.php +++ b/upload/source/class/class_task.php @@ -519,6 +519,52 @@ class task { return true; } + function update_available($update = 0) { + global $_G; + $updatetasknext = 0; + loadcache('tasknext'); + $tasknext = getglobal('cache/tasknext'); + if(!is_array($tasknext)) { + $tasknext = array(); + } + if(!isset($tasknext['starttime']) || $tasknext['starttime'] > TIMESTAMP + 86400) { + $tasknext['starttime'] = 0; + } + if(!isset($tasknext['endtime']) || $tasknext['endtime'] > TIMESTAMP + 86400) { + $tasknext['endtime'] = 0; + } + if(TIMESTAMP >= $tasknext['starttime'] || TIMESTAMP >= $tasknext['endtime'] || $update) { + $processname = 'update_task_available'; + if($update || !discuz_process::islocked($processname, 600)) { + if(TIMESTAMP >= $tasknext['starttime'] || $update) { + //߿ʼĻ + C::t('common_task')->update_available(2); + //¸ʼʱ + $starttime = C::t('common_task')->fetch_next_starttime(); + //´δʱ䲻24Сʱ + $tasknext['starttime'] = $starttime ? min($starttime, TIMESTAMP + 86400) : TIMESTAMP + 86400; + $updatetasknext = 1; + } + + if(TIMESTAMP >= $tasknext['endtime'] || $update) { + //δʼ߽Ļ + C::t('common_task')->update_available(1); + //¸ʱ + $endtime = C::t('common_task')->fetch_next_endtime(); + //´δʱ䲻24Сʱ + $tasknext['endtime'] = $endtime ? min($endtime, TIMESTAMP + 86400) : TIMESTAMP + 86400; + $updatetasknext = 1; + } + + if($updatetasknext) { + savecache('tasknext', $tasknext); + } + discuz_process::unlock($processname); + } + } + return true; + } + function reward() { switch($this->task['reward']) { case 'credit': return $this->reward_credit($this->task['prize'], $this->task['bonus']); break; diff --git a/upload/source/class/table/table_common_task.php b/upload/source/class/table/table_common_task.php index 36d90d096..39c0554f3 100644 --- a/upload/source/class/table/table_common_task.php +++ b/upload/source/class/table/table_common_task.php @@ -52,51 +52,26 @@ class table_common_task extends discuz_table return DB::query("UPDATE %t SET achievers=achievers+%s WHERE taskid=%d", array($this->_table, $v, $taskid)); } - public function update_available($update = 0) { - global $_G; - $updatetasknext = 0; - loadcache('tasknext'); - $tasknext = getglobal('cache/tasknext'); - if(!is_array($tasknext)) { - $tasknext = array(); - } - if(!isset($tasknext['starttime']) || $tasknext['starttime'] > TIMESTAMP + 86400) { - $tasknext['starttime'] = 0; - } - if(!isset($tasknext['endtime']) || $tasknext['endtime'] > TIMESTAMP + 86400) { - $tasknext['endtime'] = 0; - } - if(TIMESTAMP >= $tasknext['starttime'] || TIMESTAMP >= $tasknext['endtime'] || $update) { - $processname = 'update_task_available'; - if($update || !discuz_process::islocked($processname, 600)) { - if(TIMESTAMP >= $tasknext['starttime'] || $update) { - //上线开始的活动 - DB::query("UPDATE %t SET available='2' WHERE available='1' AND starttime<=%d AND (endtime='0' OR endtime>%d)", array($this->_table, TIMESTAMP, TIMESTAMP), false, true); - //下个活动开始时间 - $starttime = DB::result_first("SELECT starttime FROM %t WHERE available='1' AND starttime>'0' AND (endtime='0' OR endtime>%d) ORDER BY starttime ASC", array($this->_table, TIMESTAMP, TIMESTAMP)); - //下次触发时间不超过24小时 - $tasknext['starttime'] = $starttime ? min($starttime, TIMESTAMP + 86400) : TIMESTAMP + 86400; - $updatetasknext = 1; - } - - if(TIMESTAMP >= $tasknext['endtime'] || $update) { - //隐藏未开始或者结束的活动 - DB::query("UPDATE %t SET available='1' WHERE available='2' AND (starttime>%d || (endtime<=%d && endtime>'0'))", array($this->_table, TIMESTAMP, TIMESTAMP), false, true); - //下个活动结束时间 - $endtime = DB::result_first("SELECT endtime FROM %t WHERE available='2' AND endtime>'0' ORDER BY endtime ASC", array($this->_table)); - //下次触发时间不超过24小时 - $tasknext['endtime'] = $endtime ? min($endtime, TIMESTAMP + 86400) : TIMESTAMP + 86400; - $updatetasknext = 1; - } - - if($updatetasknext) { - savecache('tasknext', $tasknext); - } - discuz_process::unlock($processname); - } + public function update_available($available = 2) { + if($available == 2) { + //上线开始的活动 + DB::query("UPDATE %t SET available='2' WHERE available='1' AND starttime<=%d AND (endtime='0' OR endtime>%d)", array($this->_table, TIMESTAMP, TIMESTAMP), false, true); + } else { + //隐藏未开始或者结束的活动 + DB::query("UPDATE %t SET available='1' WHERE available='2' AND (starttime>%d || (endtime<=%d && endtime>'0'))", array($this->_table, TIMESTAMP, TIMESTAMP), false, true); } } + public function fetch_next_starttime() { + //下个活动开始时间 + return DB::result_first("SELECT starttime FROM %t WHERE available='1' AND starttime>'0' AND (endtime='0' OR endtime>%d) ORDER BY starttime ASC", array($this->_table, TIMESTAMP, TIMESTAMP)); + } + + public function fetch_next_endtime() { + //下个活动结束时间 + return DB::result_first("SELECT endtime FROM %t WHERE available='2' AND endtime>'0' ORDER BY endtime ASC", array($this->_table)); + } + public function fetch_all_by_status($uid, $status) { switch($status) { case 'doing': diff --git a/upload/source/language/lang_admincp.php b/upload/source/language/lang_admincp.php index 57bfd9cdd..9ec92cb3d 100644 --- a/upload/source/language/lang_admincp.php +++ b/upload/source/language/lang_admincp.php @@ -5542,6 +5542,11 @@ $lang = array 'tasks_install' => '安装', 'tasks_upgrade' => '升级', 'tasks_uninstall' => '卸载', + 'tasks_status' => '状态', + 'tasks_status_0' => '未启用', + 'tasks_status_1' => '未上线', + 'tasks_status_2' => '进行中', + 'tasks_status_3' => '已结束', 'tasks_tips' => '
  • 只有标记为“可用”状态的任务,会员才能访问并申请。
  • ', 'tasks_tips_edit' => '
  • 只有任务标示为“可用”状态,会员才可能看到并参与他。
  • 任务是可以设置开始时间的,您可以预定某个任务何时开始。如果没有设置,那么这个任务默认就是开始了。
  • ', diff --git a/upload/source/module/home/home_task.php b/upload/source/module/home/home_task.php index 784eb6562..b2e9fa52c 100644 --- a/upload/source/module/home/home_task.php +++ b/upload/source/module/home/home_task.php @@ -19,10 +19,9 @@ if(!$_G['setting']['taskon'] && $_G['adminid'] != 1) { showmessage('task_close'); } -C::t('common_task')->update_available(); - require_once libfile('class/task'); $tasklib = & task::instance(); +$tasklib->update_available(); $_G['mnid'] = 'mn_common'; $id = intval($_GET['id']); -- Gitee