Newer
Older
smart-home-server / server / SHServ / Controllers / ScriptsRESTAPIController.php
<?php

/*
TODO:
 + Создание метода для получения state скрипта
 + Вывод списков скриптов с полем state
 + Интегрировать поведение относительно поля state при запуске скриптов. Выключенные скрипты не должны быть запущены.
 - Реализовать апдейт скриптов
 */

namespace SHServ\Controllers;

use \SHServ\Middleware\ControlScripts;
use \SHServ\Models\Scripts;

class ScriptsRESTAPIController extends \SHServ\Middleware\Controller {
	public function run_action_script($alias, $params) {
		$result = ControlScripts::run_action_script($alias, $params);

		if(!$result) {
			return $this -> utils() -> response_error("action_script_not_found");
		}

		return $this -> utils() -> response_success([
			"return" => $result
		]);
	}

	public function actions_scripts_list() {
		$data = (new Scripts()) -> actions_scripts_list();

		return $this -> utils() -> response_success([
			"scripts" => $data,
			"total" => count($data)
		]);
	}

	public function regular_scripts_list() {
		$data = (new Scripts()) -> regular_scripts_list();

		return $this -> utils() -> response_success([
			"scripts" => $data,
			"total" => count($data)
		]);
	}

	public function scope_list() {
		$scripts_model = new Scripts();
		$scopes = $scripts_model -> get_scopes_list();

		return $this -> utils() -> response_success([
			"scopes" => $scopes,
			"total" => count($scopes)
		]);
	}

	public function scope_file($name) {
		$scripts_model = new Scripts();
		$scopes = $scripts_model -> get_scopes_list();

		$file = "";
		foreach($scopes as $scope) {
			if($name != $scope["name"]) {
				continue;
			}

			$file = file_get_contents($scope["path"] . "/" . $scope["filename"]);

			break;
		}

		if(!$file) {
			return $this -> utils() -> response_error("scope_not_found");
		}

		return $file;
	}

	public function scope_update($name, $path, $file) {
		if(!strlen($file)) {
			return $this -> utils() -> response_error("empty_field", ["file"]);
		}

		$scripts_model = new Scripts();
		if(!$scripts_model -> scope_is_exists($name)) {
			return $this -> utils() -> response_error("scope_not_found");
		}

		$filepath = "{$path}/{$name}";
		$filepath = strpos($filepath, ".php") ? $filepath : $filepath . ".php";

		if(!file_exists($filepath)) {
			return $this -> utils() -> response_error("file_not_exists");
		}

		$result = file_put_contents($filepath, $file);
		return $result 
			? $this -> utils() -> response_success(["result" => true])
			: $this -> utils() -> response_error("undefined_error");
	}

	public function scope_remove($name) {
		$scripts_model = new Scripts();

		return $scopes = $scripts_model -> remove_scope($name)
			? $this -> utils() -> response_success()
			: $this -> utils() -> response_error("undefined_error");
	}

	public function scope_enable($uniq_name) {
		return (new Scripts()) -> enable_script("scope", $uniq_name) 
			? $this -> utils() -> response_success()
			: $this -> utils() -> response_error("undefined_error");
	}

	public function scope_disable($uniq_name) {
		return (new Scripts()) -> disable_script("scope", $uniq_name) 
			? $this -> utils() -> response_success()
			: $this -> utils() -> response_error("undefined_error");
	}

	public function regular_script_enable($uniq_name) {
		return (new Scripts()) -> enable_script("regular", $uniq_name) 
			? $this -> utils() -> response_success()
			: $this -> utils() -> response_error("undefined_error");
	}

	public function regular_script_disable($uniq_name) {
		return (new Scripts()) -> disable_script("regular", $uniq_name) 
			? $this -> utils() -> response_success()
			: $this -> utils() -> response_error("undefined_error");
	}

	public function action_script_enable($uniq_name) {
		return (new Scripts()) -> enable_script("action", $uniq_name) 
			? $this -> utils() -> response_success()
			: $this -> utils() -> response_error("undefined_error");
	}

	public function action_script_disable($uniq_name) {
		return (new Scripts()) -> disable_script("action", $uniq_name) 
			? $this -> utils() -> response_success()
			: $this -> utils() -> response_error("undefined_error");
	}
}