grav = Grav::instance(); $this->active = false; $uri = $this->grav['uri']; $this->plugin = $plugin; $post = !empty($_POST) ? $_POST : []; $this->post = $this->getPost($post); // Ensure the controller should be running if (Utils::isAdminPlugin()) { $routeDetails = $this->grav['admin']->getRouteDetails(); $target = array_pop($routeDetails); $this->git = new GitSync(); // return null if this is not running if ($target !== $plugin->name) { return; } $this->action = !empty($this->post['action']) ? $this->post['action'] : $uri->param('action'); $this->target = $target; $this->active = true; $this->admin = Grav::instance()['admin']; $task = !empty($post['task']) ? $post['task'] : $uri->param('task'); if ($task && ($this->target === $plugin->name || $uri->route() === '/lessons')) { $this->task = $task; $this->active = true; } } } public function taskTestConnection() { $post = $this->post; $test = base64_decode($post['test']) ?: null; $data = $test ? json_decode($test, false) : new \stdClass(); try { $testResult = Helper::testRepository($data->user, $data->password, $data->repository, $data->branch); if (!empty($testResult)) { echo json_encode([ 'status' => 'success', 'message' => 'The connection to the repository has been successful.' ]); } else { echo json_encode([ 'status' => 'error', 'message' => 'Branch "' . $data->branch .'" not found in the repository.' ]); } } catch (\Exception $e) { $invalid = str_replace($data->password, '{password}', $e->getMessage()); echo json_encode([ 'status' => 'error', 'message' => $invalid ]); } exit; } public function taskSynchronize() { try { $this->plugin->synchronize(); echo json_encode([ 'status' => 'success', 'message' => 'GitSync has successfully synchronized with the repository.' ]); } catch (\Exception $e) { $invalid = str_replace($this->git->getConfig('password', null), '{password}', $e->getMessage()); echo json_encode([ 'status' => 'error', 'message' => $invalid ]); } exit; } public function taskResetLocal() { try { $this->plugin->reset(); echo json_encode([ 'status' => 'success', 'message' => 'GitSync has successfully reset your local changes and synchronized with the repository.' ]); } catch (\Exception $e) { $invalid = str_replace($this->git->getConfig('password', null), '{password}', $e->getMessage()); echo json_encode([ 'status' => 'error', 'message' => $invalid ]); } exit; } /** * Performs a task or action on a post or target. * * @return bool */ public function execute() { $params = []; // Handle Task & Action if ($this->post && $this->task) { // validate nonce if (!$this->validateNonce()) { return false; } $method = $this->task_prefix . ucfirst($this->task); } elseif ($this->target) { if (!$this->action) { return false; } $method = strtolower($this->action) . ucfirst($this->target); } else { return false; } if (!method_exists($this, $method)) { return false; } $success = $this->{$method}(...$params); // Grab redirect parameter. $redirect = $this->post['_redirect'] ?? null; unset($this->post['_redirect']); // Redirect if requested. if ($redirect) { $this->setRedirect($redirect); } return $success; } /** * @return bool */ public function isActive() { return (bool) $this->active; } }