added superexpert mode
This commit is contained in:
@@ -144,6 +144,62 @@ class User extends mfBaseModel {
|
||||
return true;
|
||||
}
|
||||
|
||||
public function superexpertStart($duration = 1800) {
|
||||
if(!$this->can("Superexpert")) return false;
|
||||
|
||||
$ts = $this->getFlag("superexpert_lock_date");
|
||||
$ts->value(date("U") + $duration);
|
||||
$ts->save();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function superexpertStop($duration = 1800) {
|
||||
if(!$this->can("Superexpert")) return false;
|
||||
|
||||
$ts = $this->getFlag("superexpert_lock_date");
|
||||
$ts->value(0);
|
||||
$ts->save();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function superexpertExtend($duration = 1800) {
|
||||
if(!$this->can("Superexpert")) return false;
|
||||
|
||||
$ts = $this->getFlag("superexpert_lock_date");
|
||||
$ts->value(date("U") + $duration);
|
||||
$ts->save();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function superexpertEnabled() {
|
||||
if(!$this->can("Superexpert")) return false;
|
||||
|
||||
$tsFlag = $this->getFlag("superexpert_lock_date");
|
||||
$ts = $tsFlag->value();
|
||||
|
||||
if(!is_numeric($ts) || !$ts) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$now = date("U");
|
||||
|
||||
// if superexpert is longer than 60 minutes -> disable
|
||||
if($ts > $now + 3601) {
|
||||
$tsFlag->value(null);
|
||||
$tsFlag->save();
|
||||
return false;
|
||||
}
|
||||
|
||||
if($ts > $now) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getFlag($name) {
|
||||
return new WorkerFlag($this->id, $name);
|
||||
}
|
||||
|
||||
@@ -109,8 +109,7 @@ class UserController extends mfBaseController
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected function saveAction()
|
||||
{
|
||||
$r = $this->request;
|
||||
@@ -342,4 +341,75 @@ class UserController extends mfBaseController
|
||||
|
||||
return $me->isAdmin();
|
||||
}
|
||||
|
||||
protected function apiAction() {
|
||||
if(!$this->me->is(["Admin"])) {
|
||||
$this->redirect("Dashboard");
|
||||
}
|
||||
$do = $this->request->do;
|
||||
$data = [];
|
||||
|
||||
switch($do) {
|
||||
case "sse":
|
||||
$return = $this->startSuperexpertApi();
|
||||
break;
|
||||
case "ese":
|
||||
$return = $this->extendSuperexpertApi();
|
||||
break;
|
||||
case "endse":
|
||||
$return = $this->endSuperexpertApi();
|
||||
break;
|
||||
default:
|
||||
$return = false;
|
||||
}
|
||||
|
||||
if(!is_array($return) || !count($return)) {
|
||||
$data = ["status" => "error"];
|
||||
$this->returnJson($data);
|
||||
}
|
||||
$data['status'] = "OK";
|
||||
$data['result'] = $return;
|
||||
$this->returnJson($data);
|
||||
}
|
||||
|
||||
private function startSuperexpertApi() {
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
|
||||
if($me->superexpertEnabled() ) {
|
||||
// superexpert mode started already
|
||||
return false;
|
||||
}
|
||||
|
||||
$me->superexpertStart(1800);
|
||||
|
||||
return ["valid_to" => $me->getFlag("superexpert_lock_date")->value()];
|
||||
}
|
||||
|
||||
private function extendSuperexpertApi() {
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
|
||||
if(!$me->superexpertEnabled() ) {
|
||||
// superexpert mode must be started already
|
||||
$this->log->debug("se not started");
|
||||
return false;
|
||||
}
|
||||
$this->log->debug("ese");
|
||||
$me->superexpertExtend(1800);
|
||||
|
||||
return ["valid_to" => $me->getFlag("superexpert_lock_date")->value()];
|
||||
}
|
||||
|
||||
private function endSuperexpertApi() {
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
|
||||
if($me->superexpertEnabled() ) {
|
||||
$me->superexpertStop();
|
||||
}
|
||||
|
||||
|
||||
return ["valid_to" => null];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user