. * */ namespace Vvveb\Controller\Settings; use function Vvveb\__; use function Vvveb\availableCurrencies; use Vvveb\Controller\Base; use function Vvveb\friendlyDate; use Vvveb\Sql\CountrySQL; use Vvveb\Sql\regionSQL; use Vvveb\Sql\SiteSQL; use Vvveb\System\CacheManager; use Vvveb\System\Event; use Vvveb\System\Extensions\Themes; use Vvveb\System\Images; use Vvveb\System\Media\Image; use Vvveb\System\Sites; use Vvveb\System\Validator; class Site extends Base { private function data() { $countryModel = new CountrySQL(); $options = $this->global; $options['status'] = 1; unset($options['limit']); $country = $countryModel->getAll($options); $this->view->countries = $country['country'] ?? []; //set Regions for default store country /* $region = new RegionSQL(); $regions = $countryModel->getAll($options); $options['country_id'] = $country_id; $this->view->regions = $regions['region'] ?? []; */ $this->view->regionsUrl = url(['module' => 'checkout/checkout', 'action' => 'regions']); } function dateFormat() { $format = $this->request->get['format'] ?? false; die(date($format)); } private function invoiceFormatPreview($format) { $data = ['order_id' => 777, 'customer_order_id' => 'OI888', 'user_id' => 1000, 'site_id' => 1]; return \Vvveb\invoiceFormat($format, $data); } private function orderIdFormatPreview($format) { $data = ['order_id' => 777, 'customer_order_id' => 'OI888', 'user_id' => 1000, 'site_id' => 1]; return \Vvveb\invoiceFormat($format, $data); } function invoiceFormat() { $format = $this->request->get['format'] ?? false; if ($format) { $format = $this->invoiceFormatPreview($format); } die($format); } function orderIdFormat() { $format = $this->request->get['format'] ?? false; if ($format) { $format = $this->invoiceFormatPreview($format); } die($format); } function regions() { $country_id = $this->request->get['country_id'] ?? false; $regions = []; if ($country_id) { $region = new RegionSQL(); $options = $this->global; $options['status'] = 1; unset($options['limit']); $options['country_id'] = $country_id; $regions = $region->getAll($options)['region'] ?? []; } $this->response->setType('json'); $this->response->output($regions); } function add() { $this->save(); } function save() { $siteValidator = new Validator(['site']); $settingsValidator = new Validator(['site-settings']); $view = $this->view; $site = $this->request->post['site'] ?? []; $settings = $this->request->post['settings'] ?? []; if (($errors = $siteValidator->validate($site)) === true && ($errors = $settingsValidator->validate($settings)) === true) { $sites = new SiteSQL(); if (! isset($site['host']) || ! $site['host']) { $site['host'] = strtolower($site['name']) . '.*'; } $site['key'] = strtolower(Sites::siteKey($site['host'])); foreach ($settings['description'] as &$lang) { foreach ($lang as $field => &$value) { $value = \Vvveb\sanitizeHTML($value); } } foreach ($this->view->languagesList as $slug => $lng) { if ($lng['language_id'] == $settings['language_id']) { $settings['language'] = $slug; break; } } $currencies = availableCurrencies(); foreach ($currencies as $currency_id => $currency) { if ($currency['currency_id'] == $settings['currency_id']) { $settings['currency'] = $currency_id; break; } } //array_walk_recursive($settings['description'], '\Vvveb\sanitizeHTML'); if (isset($this->request->get['site_id']) && ($site_id = $this->request->get['site_id'])) { $data['site_id'] = (int)$site_id; $site['settings'] = json_encode($settings); $data['site'] = $site; $site['id'] = $data['site_id']; $result = $sites->edit($data); //Sites::saveSite($site); unset($site['settings']); Sites::setSiteDataById($data['site_id'], null, $site); list($site, $settings, $site_id, $data) = Event :: trigger(__CLASS__,__FUNCTION__, $site, $settings, $site_id, $data); if ($result >= 0) { //CacheManager::delete('site'); CacheManager::delete(); $message = __('Site saved!'); $view->success['get'] = $message; //$this->redirect(['module'=>'settings/sites', 'success'=> $message]); } else { $this->view->errors = [$sites->error]; } } else { $data['site'] = $site; $data['site']['settings'] = json_encode($settings); $return = $sites->add($data); $site_id = $return['site']; $site['state'] = 'live'; $site['id'] = $site_id; Sites::saveSite($site); list($site, $settings, $site_id, $data) = Event :: trigger(__CLASS__,__FUNCTION__, $site, $settings, $site_id, $data); if (! $site_id) { $view->errors = [$sites->error]; } else { //CacheManager::delete('site'); CacheManager::delete(); $message = __('Site saved!'); $view->success['get'] = $message; $this->redirect(['module'=>'settings/site', 'success' => $message, 'site_id' => $site_id]); } } } else { $view->errors = $errors; } $this->index(); } function index() { $themeList = Themes:: getList(); $site_id = $this->request->get['site_id'] ?? null; $view = $this->view; $site = []; $siteSql = new SiteSQL(); if ($site_id) { $site = $siteSql->get(['site_id' => $site_id]); $data = Sites::getSiteById($site_id); if (! $site || ! $data) { return $this->notFound(); } if ($data) { $site = $data + $site; } } $default = '{"logo":"logo.png","logo-sticky":"logo.png","logo-dark":"logo-white.png","logo-dark-sticky":"logo-white.png","favicon":"favicon.ico","webbanner":"biglogo.png", "country_id":223, "region_id":3655}'; $setting = json_decode($site['settings'] ?? $default, true); foreach (['favicon', 'logo', 'logo-sticky', 'logo-dark', 'logo-dark-sticky', 'webbanner'] as $img) { if (isset($setting[$img])) { $setting[$img . '-src'] = Images::image($setting[$img]); } } $data = $siteSql->getData(['language_id' => $this->global['language_id']] + ($setting ?? []) + $this->global); $data['complete_status_id'] = $data['processing_status_id'] = ($data['order_status_id'] ?? []); $data['timezone'] = []; $timestamp = date_create('now'); $timezones = timezone_identifiers_list(); foreach ($timezones as $timezone) { date_timezone_set($timestamp, timezone_open($timezone)); $hour = ' (' . date_format($timestamp, 'P') . ')'; $data['timezone'][$timezone] = $timezone . $hour; } $admin_path = \Vvveb\adminPath(); $domain = Sites::urlSplit(); //$data['subtract'] = [1 => __('Yes'), 0 => __('No')]; //Subtract stock options $date_format = ['F j, Y', 'Y-m-d', 'm/d/Y', 'd/m/Y']; $time_format = ['g:i a', 'g:i A', 'H:i']; foreach ($date_format as $format) { $data['date_format'][$format] = date($format); } $data['date_format']['human'] = friendlyDate(time() - 360000); foreach ($time_format as $format) { $data['time_format'][$format] = date($format); } list($site, $setting, $site_id, $data) = Event :: trigger(__CLASS__,__FUNCTION__, $site, $setting, $site_id, $data); if (! defined('CLI')) { $view->domain = ''; if ($domain) { $view->domain = ($domain['domain'] ?? '') . '.' . ($domain['tld'] ?? ''); } $setting['invoice_format_preview'] = $this->invoiceFormatPreview($setting['invoice_format'] ?? ''); $setting['order_id_format_preview'] = $this->invoiceFormatPreview($setting['order_id_format'] ?? ''); $view->set($data); //$site['full-url'] = $site ? ('//' . Sites::url($site['host']) . (V_SUBDIR_INSTALL ? V_SUBDIR_INSTALL : '') . ($site['path'] ?? '' ? '/' . $site['path'] : '')) : ''; $site['full-url'] = $site ? ('//' . $site['url']) : ''; $view->site = $site + $setting; $view->setting = $setting; $view->resize = ['cs' => __('Crop & Resize'), 's' => __('Stretch'), 'c' => __('Crop')]; $view->formats = Image::formats(); $view->themeList = $themeList; $view->subdir = V_SUBDIR_INSTALL ? V_SUBDIR_INSTALL : ''; $view->templateList = \Vvveb\getTemplateList(false, ['email']); $view->currenciesList = availableCurrencies(); $controllerPath = $admin_path . 'index.php?module=media/media'; $view->scanUrl = "$controllerPath&action=scan"; $view->uploadUrl = "$controllerPath&action=upload"; $view->deleteUrl = "$controllerPath&action=delete"; $view->renameUrl = "$controllerPath&action=rename"; } } }