/** * Run DB migrations from migration .sql files * @return int count of applied migrations */ public function runMigrations() { // Check we havy any if (!file_exists(DIR_MIGRATIONS)) { return 0; } // Check we have DB structure and any migration applied $migrated_files = []; if (SQL::getTables()) { // Have DB already? $migrations = new MigrationEntityRepository(); $migrated_files = $migrations->getPairs('filename', 'filename'); } $existing_files = FileSystem::scanDirs(DIR_MIGRATIONS); if (!$existing_files) { return 0; } $to_migrate = []; // Filters migrations that are already done foreach ($existing_files as $file) { if (isset($migrated_files[$file['name']])) { continue; } $to_migrate[] = $file['name']; } // Run new migrations foreach ($to_migrate as $file) { $this->runMigrationFile($file); $this->setMigrationFileAsCompleted($file); } return count($to_migrate); }
/** * */ public function endLog() { if (!file_exists(DIR_FRONT_LOGS)) { FileSystem::mkDir(DIR_FRONT_LOGS); } if (count($this->stringBuffer)) { error_log(rtrim(join(PHP_EOL, $this->stringBuffer), PHP_EOL) . PHP_EOL, 3, DIR_FRONT_LOGS . $this->file); } }
/** * @param string $str * @param string $flag */ public function write($str = '', $flag = ILogger::WRITE_LOG) { static $log_id = ''; if (!$log_id) { $log_id = uniqid(); } // Create directory if (!file_exists(DIR_FRONT_LOGS)) { FileSystem::mkDir(DIR_FRONT_LOGS); } error_log(date('d.m.Y H:i:s') . "\t{$log_id}\t{$str}\n", 3, DIR_FRONT_LOGS . 'common.log'); }
/** * @return array */ public function getPluginFilePairs() { if ($this->plugin_files) { // Already have found filed return $this->plugin_files; } foreach (Finder::getInstance()->getPathFolders(Finder::TYPE_PLUGINS) as $folder) { $folder = DIR_BASE . $folder; FileSystem::mkDir($folder); // Skip folder links $cms_plugin_files = array_diff(scandir($folder), ['.', '..']); // Make simple names for rendering in selects foreach ($cms_plugin_files as $k => $v) { $this->plugin_files[$v] = str_replace('plugin.php', '', $v); } } return $this->plugin_files; }
/** * Save log into file, and try to send via email to Developers */ public static function flushLog() { $last_flush_time = Settings::get('cms_tools_application_log_flush'); if (NOW - $last_flush_time < 453600) { return; // We do not need stats too often, wait 7 days } // Send data to original developer site of the existing domain self::sendInformation(); // Now prepare file with aggregated data $app_log = new AppLogEntityRepository(); $app_log->addSimpleSelectFields(['id', 'ts', 'user_id', 'url', 'msg', 'p', 'do']); if ($last_flush_time) { $app_log->setWhereOld($last_flush_time); } $app_log->addOrderByField('ts', true); $app_log->setGenerateOutputWithIterator(false); $users = new AdminUserRepository(); $users->setGenerateOutputWithIterator(false); $users->addSimpleSelectFieldsAsString('CONCAT(`' . $users->getDbTableName() . '`.`name`, " ", `' . $users->getDbTableName() . '`.`surname`) AS `user`'); $app_log->mergeWithCollection($users, 'user_id'); $data_log = $app_log->getAsArrayOfObjectData(true); $usage = new AdminUsageEntityRepository(); $data_usage = $usage->getAsArrayOfObjectData(true); if ($data_log || $data_usage) { $data = ['data' => ['domain' => CFG_DOMAIN, 'ts' => NOW], 'logs' => ['app_log' => $data_log, 'usage' => $data_usage]]; // Save in file if (!file_exists(DIR_CACHE)) { FileSystem::mkDir(DIR_CACHE); } file_put_contents(DIR_CACHE . 'log_data', gzencode(json_encode($data))); // Send stats Mailer::getInstance()->setSubject('Application and Usage log from ' . Configuration::getInstance()->get('site')['name'] . '(till ' . date(CFG_CMS_DATETIME_FORMAT, NOW) . ')')->setSender(Configuration::getInstance()->get('site')['email'])->setRecipient(CMS_SUPPORT_EMAIL)->setMessage('View attached file')->addAttachment(DIR_CACHE . 'log_data')->send(); $usage->deleteObjectCollection(); } Settings::getInstance()->set('cms_tools_application_log_flush', NOW); }
} $save_ext = $params; break; case 'watermark': if (!$params) { break; } $check_size_allowed($params); if (!preg_match('/^[0-9]+$/', $params)) { if (!Settings::isProductionState()) { exit('Error processing params for action "watermark". Example: 1 or main'); } die; } $data = q_assoc_row('SELECT `image`, `image_pos` FROM `cms_img_proc_perms` WHERE `rule` = "&watermark=' . sql_prepare($params) . '" LIMIT 1'); if (!$data || !$data['image'] || !$data['image_pos']) { if (!Settings::isProductionState()) { exit('Error. Incorrect parameters for action "watermark"'); } die; } $image->watermark($data['image'], $data['image_pos']); break; } } FileSystem::mkdir(DIR_CACHE . 'images/' . $path); if (!$image->save(DIR_CACHE . 'images/' . QUERY, $ext, 90) && !Settings::isProductionState()) { dump('Not enough memory to resize and sharpen image "' . $path . $file . '".'); } unset($image); go('/' . QUERY);
/** * Action for Create directory */ public function _create_directory() { $dir = $_GET['path']; if ($dir && $dir[0] == '/') { $dir = substr($dir, 1); } FileSystem::mkDir(DIR_BASE . $dir . $_POST['name']); App::add('Diretory "' . $dir . $_POST['name'] . '" created'); Messages::sendGreenAlert('Diretory "' . $dir . $_POST['name'] . '" created'); go('?p=' . P . '&do=show_files&nomenu&path=' . $dir); }
/** * @return Element */ public function getFieldView() { $field = NULL; // Type switch ($this->field_type) { default: case 'text': $field = CmsInputText::getInstance($this->component_name); break; case 'textarea': $field = CmsTextarea::getInstance($this->component_name); // Height if (isset($this->field_value['rows'])) { $field->setRowCount($this->field_value['rows']); } break; case 'checkbox': $field = CmsCheckbox::getInstance($this->component_name); // Checked if (!isset($this->field_value['checked']) && isset($this->data[$this->component_name])) { $this->field_value['checked'] = $this->data[$this->component_name]; } if (isset($this->field_value['checked'])) { $field->setChecked($this->field_value['checked']); } break; case 'checkbox_list': $field = CmsCheckboxList::getInstance($this->component_name); if (isset($this->field_value['checkboxes'])) { $field->setCheckboxes($this->field_value['checkboxes']); } if (!isset($this->field_value['selected']) && isset($this->data[$this->component_name])) { $this->field_value['selected'] = unserialize($this->data[$this->component_name]); } if (isset($this->field_value['selected'])) { $field->setChecked(array_keys($this->field_value['selected'])); } $field->setListView(true); break; case 'options': case 'select': $field = CmsSelect::getInstance($this->component_name); // Options if (isset($this->field_value['options'])) { $field->setOptions($this->field_value['options']); } // Selected options if (!isset($this->field_value['selected']) && isset($this->data[$this->component_name])) { $this->field_value['selected'] = $this->data[$this->component_name]; } if (isset($this->field_value['selected'])) { $field->setSelected($this->field_value['selected']); $this->selected = $this->field_value['selected']; } else { $this->selected = false; } break; case 'multiselect': $field = CmsMultipleSelect::getInstance($this->component_name); if (isset($this->field_value['options'])) { $field->setOptions($this->field_value['options']); } if (!isset($this->field_value['selected']) && isset($this->data[$this->component_name])) { $this->field_value['selected'] = $this->data[$this->component_name]; } if (isset($this->field_value['selected'])) { $field->setSelected($this->field_value['selected']); $this->selected = $this->field_value['selected']; } else { $this->selected = false; } $field->helper(false); break; case 'tags': $field = CmsInputTags::getInstance($this->component_name); break; case 'custom': // Skip because we have separate page for it break; } // Required for Widgets if ($field) { $field->setAttribute('data-page_id', $this->page_id); } // Set Widget switch ($this->widget_type) { case '': break; case 'wysiwyg': $field->enableWysiwyg(); break; case 'tinymce': $field->enableWysiwyg(); break; case 'calendar': $widget = new Calendar(); if (isset($this->field_value['format'])) { $widget->dateFormat($this->field_value['format']); } if (isset($this->field_value['showtime'])) { $widget->showTime($this->field_value['showtime']); } $field->setWidget($widget); break; case 'files': $widget = new FileManager(); // Path to opened folder if (isset($this->field_value['path'])) { if (!file_exists(DIR_BASE . $this->field_value['path'])) { FileSystem::mkDir(DIR_BASE . $this->field_value['path']); } $widget->path($this->field_value['path']); } // Allowed extensions if (isset($this->field_value['allowed_extensions'])) { $widget->setAllowedExtensions($this->field_value['allowed_extensions']); } $field->setWidget($widget); break; case 'pages': $field->setWidget(new SitemapPages()); break; case 'map': $field->enableGoogleMap(); break; } // Special features for field if (isset($this->field_value['hint'])) { $field->setHintText($this->field_value['hint']); } return $field; }
/** * @param bool $download_as_file * @return string */ public function exportAsSerializedData($download_as_file = false) { if (!$this->getCollectedObjects()) { $this->collectObjects(false, true); } $objects = []; $object = NULL; foreach ($this->getCollectedObjects() as $object) { /** @var Entity $object */ $objects[] = $object; } if (!$objects) { error('No Objects selected'); } $data = []; $data['objects'] = serialize($objects); $data['class'] = Converter::getPathToClassFile($object); $data['class'] = str_replace(DIR_BASE, '', $data['class']); $data = serialize($data); if (!$download_as_file) { return $data; } FileSystem::streamOutput(Converter::classWithNamespaceToUnqualifiedShort($object) . '.cms_obj', $data); return $data; }
/** * @return bool */ public function deleteAll() { return FileSystem::remdir(DIR_CACHE); }