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' => '