* @copyright Copyright (c) Alex Tselegidis * @license https://opensource.org/licenses/GPL-3.0 - GPLv3 * @link https://easyappointments.org * @since v1.3.2 * ---------------------------------------------------------------------------- */ use Jsvrcek\ICS\Exception\CalendarEventException; require_once __DIR__ . '/Google.php'; require_once __DIR__ . '/Caldav.php'; /** * Console controller. * * Handles all the Console related operations. */ class Console extends EA_Controller { /** * Console constructor. */ public function __construct() { if (!is_cli()) { exit('No direct script access allowed'); } parent::__construct(); $this->load->dbutil(); $this->load->library('instance'); $this->load->model('admins_model'); $this->load->model('customers_model'); $this->load->model('providers_model'); $this->load->model('services_model'); $this->load->model('settings_model'); } /** * Perform a console installation. * * Use this method to install Easy!Appointments directly from the terminal. * * Usage: * * php index.php console install * * @throws Exception */ public function install(): void { $this->instance->migrate('fresh'); $password = $this->instance->seed(); response( PHP_EOL . '⇾ Installation completed, login with "administrator" / "' . $password . '".' . PHP_EOL . PHP_EOL, ); } /** * Migrate the database to the latest state. * * Use this method to upgrade an Easy!Appointments instance to the latest database state. * * Notice: * * Do not use this method to install the app as it will not seed the database with the initial entries (admin, * provider, service, settings etc.). * * Usage: * * php index.php console migrate * * php index.php console migrate fresh * * @param string $type */ public function migrate(string $type = ''): void { $this->instance->migrate($type); } /** * Seed the database with test data. * * Use this method to add test data to your database * * Usage: * * php index.php console seed * @throws Exception */ public function seed(): void { $this->instance->seed(); } /** * Create a database backup file. * * Use this method to back up your Easy!Appointments data. * * Usage: * * php index.php console backup * * php index.php console backup /path/to/backup/folder * * @throws Exception */ public function backup(): void { $this->instance->backup($GLOBALS['argv'][3] ?? null); } /** * Trigger the synchronization of all provider calendars with Google Calendar. * * Use this method in a cronjob to automatically sync events between Easy!Appointments and Google Calendar. * * Notice: * * Google syncing must first be enabled for each individual provider from inside the backend calendar page. * * Usage: * * php index.php console sync * * @throws CalendarEventException * @throws Exception * @throws Throwable */ public function sync(): void { $providers = $this->providers_model->get(); foreach ($providers as $provider) { if (filter_var($provider['settings']['google_sync'], FILTER_VALIDATE_BOOLEAN)) { Google::sync((string) $provider['id']); } if (filter_var($provider['settings']['caldav_sync'], FILTER_VALIDATE_BOOLEAN)) { Caldav::sync((string) $provider['id']); } } } /** * Show help information about the console capabilities. * * Use this method to see the available commands. * * Usage: * * php index.php console help */ public function help(): void { $help = [ '', 'Easy!Appointments ' . config('version'), '', 'Usage:', '', '⇾ php index.php console [command] [arguments]', '', 'Commands:', '', '⇾ php index.php console migrate', '⇾ php index.php console migrate fresh', '⇾ php index.php console migrate up', '⇾ php index.php console migrate down', '⇾ php index.php console seed', '⇾ php index.php console install', '⇾ php index.php console backup', '⇾ php index.php console sync', '', '', ]; response(implode(PHP_EOL, $help)); } }