From 1c12224457aa3407d3dde3ec65aac41ed80f359c Mon Sep 17 00:00:00 2001 From: Awilum Date: Fri, 19 Apr 2019 11:03:27 +0300 Subject: [PATCH] Flextype Admin: Classes removed. We will use controllers instead of them. --- .../admin/classes/DashboardManager.php | 13 - site/plugins/admin/classes/EntriesManager.php | 672 ------------------ .../admin/classes/FieldsetsManager.php | 290 -------- .../admin/classes/InformationManager.php | 65 -- site/plugins/admin/classes/PluginsManager.php | 33 - .../plugins/admin/classes/SettingsManager.php | 141 ---- .../plugins/admin/classes/SnippetsManager.php | 178 ----- .../admin/classes/TemplatesManager.php | 136 ---- site/plugins/admin/classes/UsersManager.php | 128 ---- 9 files changed, 1656 deletions(-) delete mode 100644 site/plugins/admin/classes/DashboardManager.php delete mode 100644 site/plugins/admin/classes/EntriesManager.php delete mode 100644 site/plugins/admin/classes/FieldsetsManager.php delete mode 100644 site/plugins/admin/classes/InformationManager.php delete mode 100644 site/plugins/admin/classes/PluginsManager.php delete mode 100644 site/plugins/admin/classes/SettingsManager.php delete mode 100644 site/plugins/admin/classes/SnippetsManager.php delete mode 100644 site/plugins/admin/classes/TemplatesManager.php delete mode 100644 site/plugins/admin/classes/UsersManager.php diff --git a/site/plugins/admin/classes/DashboardManager.php b/site/plugins/admin/classes/DashboardManager.php deleted file mode 100644 index b18083fb..00000000 --- a/site/plugins/admin/classes/DashboardManager.php +++ /dev/null @@ -1,13 +0,0 @@ -get('/admin/entries', function (Request $request, Response $response, array $args) { - return 'asd'; -})->setName('entries'); - - -class EntriesManager -{ - - public static function getEntriesManager() : void - { - Registry::set('sidebar_menu_item', 'entries'); - - $query = EntriesManager::getEntriesQuery(); - - switch (Http::getUriSegment(2)) { - case 'add': - EntriesManager::addEntry(); - break; - case 'delete': - EntriesManager::deleteEntry(); - break; - case 'duplicate': - EntriesManager::duplicateEntry(); - break; - case 'rename': - EntriesManager::renameEntry(); - break; - case 'type': - EntriesManager::typeEntry(); - break; - case 'move': - EntriesManager::moveEntry(); - break; - case 'edit': - EntriesManager::editEntry(); - break; - default: - EntriesManager::listEntry(); - break; - } - } - - public static function getMediaList(string $entry, bool $path = false) : array - { - $files = []; - - foreach (array_diff(scandir(PATH['entries'] . '/' . $entry), ['..', '.']) as $file) { - if (strpos(Registry::get('settings.entries.media.accept_file_types'), $file_ext = substr(strrchr($file, '.'), 1)) !== false) { - if (strpos($file, strtolower($file_ext), 1)) { - if ($path) { - $files[Http::getBaseUrl() . '/' . $entry . '/' . $file] = Http::getBaseUrl() . '/' . $entry . '/' . $file; - } else { - $files[$file] = $file; - } - } - } - } - - return $files; - } - - protected static function getEntriesQuery() : string - { - if (Http::get('entry') && Http::get('entry') != '') { - $query = Http::get('entry'); - } else { - $query = ''; - } - - return $query; - } - - protected static function listEntry() : void - { - Themes::view('admin/views/templates/content/entries/list') - ->assign('entries_list', Entries::fetchAll(EntriesManager::getEntriesQuery(), 'date', 'DESC')) - ->display(); - } - - protected static function processFilesManager() : void - { - $files_directory = PATH['entries'] . '/' . Http::get('entry') . '/'; - - if (Http::get('delete_file') != '') { - if (Token::check((Http::get('token')))) { - Filesystem::delete($files_directory . Http::get('delete_file')); - Notification::set('success', __('admin_message_entry_file_deleted')); - Http::redirect(Http::getBaseUrl() . '/admin/entries/edit?entry=' . Http::get('entry') . '&media=true'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - if (Http::post('upload_file')) { - if (Token::check(Http::post('token'))) { - - $file = EntriesManager::uploadFile($_FILES['file'], $files_directory, Registry::get('settings.entries.media.accept_file_types'), 27000000); - - if ($file !== false) { - - if (in_array(pathinfo($file)['extension'], ['jpg', 'jpeg', 'png', 'gif'])) { - - // open an image file - $img = Image::make($file); - - // now you are able to resize the instance - if (Registry::get('settings.entries.media.upload_images_width') > 0 && Registry::get('settings.entries.media.upload_images_height') > 0) { - $img->resize(Registry::get('settings.entries.media.upload_images_width'), Registry::get('settings.entries.media.upload_images_height'), function($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }); - } elseif (Registry::get('settings.entries.media.upload_images_width') > 0) { - $img->resize(Registry::get('settings.entries.media.upload_images_width'), null, function($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }); - } elseif (Registry::get('settings.entries.media.upload_images_height') > 0) { - $img->resize(null, Registry::get('settings.entries.media.upload_images_height'), function($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }); - } - - // finally we save the image as a new file - $img->save($file, Registry::get('settings.entries.media.upload_images_quality')); - - // destroy - $img->destroy(); - } - - Notification::set('success', __('admin_message_entry_file_uploaded')); - Http::redirect(Http::getBaseUrl() . '/admin/entries/edit?entry=' . Http::get('entry') . '&media=true'); - } else { - Notification::set('error', __('admin_message_entry_file_not_uploaded')); - Http::redirect(Http::getBaseUrl() . '/admin/entries/edit?entry=' . Http::get('entry') . '&media=true'); - } - - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - - protected static function editEntry() : void - { - $entry = Entries::fetch(Http::get('entry')); - - if (Http::get('media') && Http::get('media') == 'true') { - EntriesManager::processFilesManager(); - - Themes::view('admin/views/templates/content/entries/media') - ->assign('entry_name', Http::get('entry')) - ->assign('files', EntriesManager::getMediaList(Http::get('entry')), true) - ->assign('entry', $entry) - ->display(); - } else { - if (Http::get('source') && Http::get('source') == 'true') { - - $action = Http::post('action'); - - if (isset($action) && $action == 'save-form') { - if (Token::check((Http::post('token')))) { - if (Filesystem::write( - PATH['entries'] . '/' . Http::post('entry_name') . '/entry.yaml', - Http::post('entry_content') - )) { - Notification::set('success', __('admin_message_entry_changes_saved')); - } else { - Notification::set('success', __('admin_message_entry_changes_not_saved')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/entries/edit?entry=' . Http::post('entry_name') . '&source=true'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - $entry_content = Filesystem::read(PATH['entries'] . '/' . Http::get('entry') . '/entry.yaml'); - - Themes::view('admin/views/templates/content/entries/source') - ->assign('entry_name', Http::get('entry')) - ->assign('entry_content', $entry_content) - ->assign('entry', $entry) - ->assign('files', EntriesManager::getMediaList(Http::get('entry')), true) - ->display(); - } else { - - $action = Http::post('action'); - $indenter = new Indenter(); - - if (isset($action) && $action == 'save-form') { - if (Token::check((Http::post('token')))) { - - $entry = Entries::fetch(Http::get('entry')); - Arr::delete($entry, 'slug'); - - $data = []; - - $_data = $_POST; - Arr::delete($_data, 'token'); - Arr::delete($_data, 'action'); - - foreach ($_data as $key => $_d) { - $data[$key] = $indenter->indent($_d); - } - - $data = array_merge($entry, $data); - - if (Entries::update(Http::get('entry'), $data)) { - Notification::set('success', __('admin_message_entry_changes_saved')); - } else { - Notification::set('error', __('admin_message_entry_changes_not_saved')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/entries/edit?entry=' . Http::get('entry')); - } - } - - // Fieldset for current entry template - $fieldset_path = PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . (isset($entry['fieldset']) ? $entry['fieldset'] : 'default') . '.yaml'; - $fieldset = YamlParser::decode(Filesystem::read($fieldset_path)); - is_null($fieldset) and $fieldset = []; - - Themes::view('admin/views/templates/content/entries/content') - ->assign('entry_name', Http::get('entry')) - ->assign('entry', $entry) - ->assign('fieldset', $fieldset) - ->assign('templates', Themes::getTemplates()) - ->assign('files', EntriesManager::getMediaList(Http::get('entry')), true) - ->display(); - } - } - } - - protected static function duplicateEntry() : void - { - if (Http::get('entry') != '') { - if (Token::check((Http::get('token')))) { - - if (Entries::copy(Http::get('entry'), Http::get('entry') . '-duplicate-' . date("Ymd_His"), true)) { - Notification::set('success', __('admin_message_entry_duplicated')); - } else { - Notification::set('error', __('admin_message_entry_was_not_duplicated')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/entries/?entry=' . implode('/', array_slice(explode("/", Http::get('entry')), 0, -1))); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - - protected static function moveEntry() : void - { - $entry = Entries::fetch(Http::get('entry')); - - $move_entry = Http::post('move_entry'); - - if (isset($move_entry)) { - if (Token::check((Http::post('token')))) { - if (!Entries::has(Http::post('parent_entry') . '/' . Http::post('name_current'))) { - if (Entries::rename( - Http::post('entry_path_current'), - Http::post('parent_entry') . '/' . Text::safeString(Http::post('name_current'), '-', true) - )) { - Notification::set('success', __('admin_message_entry_moved')); - } else { - Notification::set('error', __('admin_message_entry_was_not_moved')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/entries/?entry=' . Http::post('parent_entry')); - - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - $_entries_list = Entries::fetchAll('', 'slug'); - $entries_list['/'] = '/'; - foreach ($_entries_list as $_entry) { - if ($_entry['slug'] != '') { - $entries_list[$_entry['slug']] = $_entry['slug']; - } else { - $entries_list[Registry::get('settings.entries.main')] = Registry::get('settings.entries.main'); - } - } - - Themes::view('admin/views/templates/content/entries/move') - ->assign('entry_path_current', Http::get('entry')) - ->assign('entries_list', $entries_list) - ->assign('name_current', Arr::last(explode("/", Http::get('entry')))) - ->assign('entry_parent', implode('/', array_slice(explode("/", Http::get('entry')), 0, -1))) - ->assign('entry', $entry) - ->display(); - } - - protected static function deleteEntry() : void - { - if (Http::get('entry') != '') { - if (Token::check((Http::get('token')))) { - - if (Entries::delete(Http::get('entry'))) { - Notification::set('success', __('admin_message_entry_deleted')); - } else { - Notification::set('error', __('admin_message_entry_was_not_deleted')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/entries/?entry=' . Http::get('entry_current')); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - - protected static function renameEntry() : void - { - $entry = Entries::fetch(Http::get('entry')); - - $rename_entry = Http::post('rename_entry'); - - if (isset($rename_entry)) { - if (Token::check((Http::post('token')))) { - if (!Entries::has(Http::post('name'))) { - if (Entries::rename( - Http::post('entry_path_current'), - Http::post('entry_parent') . '/' . Text::safeString(Http::post('name'), '-', true) - )) { - Notification::set('success', __('admin_message_entry_renamed')); - } else { - Notification::set('error', __('admin_message_entry_was_not_renamed')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/entries/?entry=' . Http::post('entry_parent')); - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - Themes::view('admin/views/templates/content/entries/rename') - ->assign('name_current', Arr::last(explode("/", Http::get('entry')))) - ->assign('entry_path_current', Http::get('entry')) - ->assign('entry_parent', implode('/', array_slice(explode("/", Http::get('entry')), 0, -1))) - ->assign('entry', $entry) - ->display(); - } - - protected static function typeEntry() : void - { - $type_entry = Http::post('type_entry'); - - if (isset($type_entry)) { - if (Token::check((Http::post('token')))) { - - $entry = Entries::fetch(Http::get('entry')); - Arr::delete($entry, 'slug'); - - $data = []; - $_data = $_POST; - Arr::delete($_data, 'token'); - Arr::delete($_data, 'type_entry'); - Arr::delete($_data, 'entry'); - - $data = array_merge($entry, $_data); - - if (Entries::update(Http::get('entry'), $data)) { - Notification::set('success', __('admin_message_entry_changes_saved')); - } else { - Notification::set('success', __('admin_message_entry_was_not_moved')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/entries?entry=' . implode('/', array_slice(explode("/", Http::get('entry')), 0, -1))); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - $entry = Entries::fetch(Http::get('entry')); - - $fieldsets = []; - - // Get fieldsets files - $_fieldsets = Filesystem::listContents(PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/'); - - // If there is any template file then go... - if (count($_fieldsets) > 0) { - foreach ($_fieldsets as $fieldset) { - if ($fieldset['type'] == 'file' && $fieldset['extension'] == 'yaml') { - $fieldset_content = YamlParser::decode(Filesystem::read($fieldset['path'])); - if (isset($fieldset_content['sections']) && isset($fieldset_content['sections']['main']) && isset($fieldset_content['sections']['main']['fields'])) { - $fieldsets[$fieldset['basename']] = $fieldset_content['title']; - } - } - } - } - - Themes::view('admin/views/templates/content/entries/type') - ->assign('fieldset', $entry['fieldset']) - ->assign('fieldsets', $fieldsets) - ->display(); - } - - protected static function addEntry() : void - { - $create_entry = Http::post('create_entry'); - - if (isset($create_entry)) { - if (Token::check((Http::post('token')))) { - - // Set parent entry - if (Http::post('parent_entry')) { - $parent_entry = '/' . Http::post('parent_entry'); - } else { - $parent_entry = '/'; - } - - // Set new entry name - $entry = $parent_entry . Text::safeString(Http::post('slug'), '-', true); - - // Check if new entry exists - if (!Entries::has($entry)) { - - // Get fieldset - $fieldset = YamlParser::decode(Filesystem::read(PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::post('fieldset') . '.yaml')); - - // We need to check if template for current fieldset is exists - // if template is not exist then default template will be used! - $template_path = PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/templates/' . Http::post('fieldset') . '.php'; - if (Filesystem::has($template_path)) { - $template = Http::post('fieldset'); - } else { - $template = 'default'; - } - - // Init entry data - $data = []; - $default_data = []; - - // Define data values based on POST data - $default_data['title'] = Http::post('title'); - $default_data['template'] = $template; - $default_data['fieldset'] = Http::post('fieldset'); - $default_data['date'] = date(Registry::get('settings.date_format'), time()); - - // Predefine data values based on selected fieldset - foreach ($fieldset['sections'] as $section) { - foreach ($section as $key => $field) { - - // Get values from default data - if (isset($default_data[$key])) { - - $_value = $default_data[$key]; - - // Get values from fieldsets predefined field values - } elseif (isset($field['value'])) { - - $_value = $field['value']; - - // or set empty value - } else { - $_value = ''; - } - - $data[$key] = $_value; - } - } - - // Merge data - $data = array_replace_recursive($data, $default_data); - - // Create a new entry! - if (Entries::create($entry, $data)) { - Notification::set('success', __('admin_message_entry_created')); - } else { - Notification::set('success', __('admin_message_entry_was_not_created')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/entries/?entry=' . Http::post('parent_entry')); - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - $fieldsets = []; - - // Get fieldsets files - $_fieldsets = Filesystem::listContents(PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/'); - - // If there is any template file then go... - if (count($_fieldsets) > 0) { - foreach ($_fieldsets as $fieldset) { - if ($fieldset['type'] == 'file' && $fieldset['extension'] == 'yaml') { - $fieldset_content = YamlParser::decode(Filesystem::read($fieldset['path'])); - if (isset($fieldset_content['sections']) && isset($fieldset_content['sections']['main']) && isset($fieldset_content['sections']['main']['fields'])) { - $fieldsets[$fieldset['basename']] = $fieldset_content['title']; - } - } - } - } - - Themes::view('admin/views/templates/content/entries/add') - ->assign('fieldsets', $fieldsets) - ->assign('entries_list', Entries::fetchAll('', 'slug')) - ->display(); - } - - /** - * Upload files on the Server with several type of Validations! - * - * Entries::uploadFile($_FILES['file'], $files_directory); - * - * @param array $file Uploaded file data - * @param string $upload_directory Upload directory - * @param string $allowed Allowed file extensions - * @param int $max_size Max file size in bytes - * @param string $filename New filename - * @param bool $remove_spaces Remove spaces from the filename - * @param int $max_width Maximum width of image - * @param int $max_height Maximum height of image - * @param bool $exact Match width and height exactly? - * @param int $chmod Chmod mask - * @return string on success, full path to new file - * @return false on failure - */ - public static function uploadFile( - array $file, - string $upload_directory, - string $allowed = 'jpeg, png, gif, jpg', - int $max_size = 3000000, - string $filename = null, - bool $remove_spaces = true, - int $max_width = null, - int $max_height = null, - bool $exact = false, - int $chmod = 0644 - ) { - // - // Tests if a successful upload has been made. - // - if (isset($file['error']) - and isset($file['tmp_name']) - and $file['error'] === UPLOAD_ERR_OK - and is_uploaded_file($file['tmp_name'])) { - - // - // Tests if upload data is valid, even if no file was uploaded. - // - if (isset($file['error']) - and isset($file['name']) - and isset($file['type']) - and isset($file['tmp_name']) - and isset($file['size'])) { - - // - // Test if an uploaded file is an allowed file type, by extension. - // - if (strpos($allowed, strtolower(pathinfo($file['name'], PATHINFO_EXTENSION))) !== false) { - - // - // Validation rule to test if an uploaded file is allowed by file size. - // - if (($file['error'] != UPLOAD_ERR_INI_SIZE) - and ($file['error'] == UPLOAD_ERR_OK) - and ($file['size'] <= $max_size)) { - - // - // Validation rule to test if an upload is an image and, optionally, is the correct size. - // - if (in_array(mime_content_type($file['tmp_name']), ['image/jpeg', 'image/jpg', 'image/png', 'image/gif'])) { - function validateImage($file, $max_width, $max_height, $exact) - { - try { - // Get the width and height from the uploaded image - list($width, $height) = getimagesize($file['tmp_name']); - } catch (ErrorException $e) { - // Ignore read errors - } - - if (empty($width) or empty($height)) { - // Cannot get image size, cannot validate - return false; - } - - if (!$max_width) { - // No limit, use the image width - $max_width = $width; - } - - if (!$max_height) { - // No limit, use the image height - $max_height = $height; - } - - if ($exact) { - // Check if dimensions match exactly - return ($width === $max_width and $height === $max_height); - } else { - // Check if size is within maximum dimensions - return ($width <= $max_width and $height <= $max_height); - } - - return false; - } - - if (validateImage($file, $max_width, $max_height, $exact) === false) { - return false; - } - } - - if (!isset($file['tmp_name']) or !is_uploaded_file($file['tmp_name'])) { - - // Ignore corrupted uploads - return false; - } - - if ($filename === null) { - - // Use the default filename - $filename = $file['name']; - } - - if ($remove_spaces === true) { - - // Remove spaces from the filename - $filename = Text::safeString(pathinfo($filename)['filename'], '-', true) . '.' . pathinfo($filename)['extension']; - } - - if (!is_dir($upload_directory) or !is_writable(realpath($upload_directory))) { - throw new \RuntimeException("Directory {$upload_directory} must be writable"); - } - - // Make the filename into a complete path - $filename = realpath($upload_directory) . DIRECTORY_SEPARATOR . $filename; - - if (move_uploaded_file($file['tmp_name'], $filename)) { - - // Set permissions on filename - chmod($filename, $chmod); - - // Return new file path - return $filename; - } - } - } - } - } - - return false; - } - -} diff --git a/site/plugins/admin/classes/FieldsetsManager.php b/site/plugins/admin/classes/FieldsetsManager.php deleted file mode 100644 index 45d13f34..00000000 --- a/site/plugins/admin/classes/FieldsetsManager.php +++ /dev/null @@ -1,290 +0,0 @@ - 'form']); - $form .= Form::hidden('token', Token::generate()); - $form .= Form::hidden('action', 'save-form'); - - if (count($fieldset['sections']) > 0) { - - $form .= ''; - - $form .= '
'; - - foreach ($fieldset['sections'] as $key => $section) { - - $form .= '
'; - $form .= '
'; - - foreach ($section['fields'] as $element => $property) { - - // Create attributes - $property['attributes'] = Arr::keyExists($property, 'attributes') ? $property['attributes'] : []; - - // Create attribute class - $property['attributes']['class'] = Arr::keyExists($property, 'attributes.class') ? 'form-control ' . $property['attributes']['class'] : 'form-control'; - - // Create attribute size - $property['size'] = Arr::keyExists($property, 'size') ? $property['size'] : 'col-12'; - - // Create attribute value - $property['value'] = Arr::keyExists($property, 'value') ? $property['value'] : ''; - - $pos = strpos($element, '.'); - - if ($pos === false) { - $form_element_name = $element; - } else { - $form_element_name = str_replace(".", "][", "$element") . ']'; - } - - $pos = strpos($form_element_name, ']'); - - if ($pos !== false) { - $form_element_name = substr_replace($form_element_name, '', $pos, strlen(']')); - } - - // Form value - $form_value = Arr::keyExists($values, $element) ? Arr::get($values, $element) : $property['value']; - - // Form label - $form_label = Form::label($element, __($property['title'])); - - // Form elements - switch ($property['type']) { - - // Simple text-input, for multi-line fields. - case 'textarea': - $form_element = Form::textarea($element, $form_value, $property['attributes']); - break; - - // The hidden field is like the text field, except it's hidden from the content editor. - case 'hidden': - $form_element = Form::hidden($element, $form_value); - break; - - // A WYSIWYG HTML field. - case 'html': - $property['attributes']['class'] .= ' js-html-editor'; - $form_element = Form::textarea($element, $form_value, $property['attributes']); - break; - - // Selectbox field - case 'select': - $form_element = Form::select($form_element_name, $property['options'], $form_value, $property['attributes']); - break; - - // Template select field for selecting entry template - case 'template_select': - $form_element = Form::select($form_element_name, Themes::getTemplates(), $form_value, $property['attributes']); - break; - - // Visibility select field for selecting entry visibility state - case 'visibility_select': - $form_element = Form::select($form_element_name, ['draft' => __('admin_entries_draft'), 'visible' => __('admin_entries_visible'), 'hidden' => __('admin_entries_hidden')], (!empty($form_value) ? $form_value : 'visible'), $property['attributes']); - break; - - // Media select field - case 'media_select': - $form_element = Form::select($form_element_name, EntriesManager::getMediaList(Http::get('entry'), false), $form_value, $property['attributes']); - break; - - // Simple text-input, for single-line fields. - default: - $form_element = Form::input($form_element_name, $form_value, $property['attributes']); - break; - } - - // Render form elments with labels - if ($property['type'] == 'hidden') { - $form .= $form_element; - } else { - $form .= '
'; - $form .= $form_label . $form_element; - $form .= '
'; - } - } - - $form .= '
'; - $form .= '
'; - } - - $form .= '
'; - } - - $form .= Form::close(); - - return $form; - } - - protected static function addFieldsets() - { - $create_fieldset = Http::post('create_fieldset'); - - if (isset($create_fieldset)) { - if (Token::check((Http::post('token')))) { - - $file = PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Text::safeString(Http::post('name'), '-', true) . '.yaml'; - - if (!Filesystem::has($file)) { - // Create a fieldset! - if (Filesystem::write( - $file, - YamlParser::encode(['title' => Http::post('title')]) - )) { - Notification::set('success', __('admin_message_fieldset_created')); - Http::redirect(Http::getBaseUrl() . '/admin/fieldsets'); - } - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - Themes::view('admin/views/templates/extends/fieldsets/add') - ->display(); - } - - protected static function renameFieldsets() - { - $rename_fieldset = Http::post('rename_fieldset'); - - if (isset($rename_fieldset)) { - if (Token::check((Http::post('token')))) { - if (!Filesystem::has(PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::post('name') . '.yaml')) { - if (rename( - PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::post('name_current') . '.yaml', - PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::post('name') . '.yaml') - ) { - Notification::set('success', __('admin_message_fieldset_renamed')); - Http::redirect(Http::getBaseUrl() . '/admin/fieldsets'); - } - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - Themes::view('admin/views/templates/extends/fieldsets/rename') - ->assign('name_current', Http::get('fieldset')) - ->display(); - } - - protected static function duplicateFieldsets() - { - if (Http::get('fieldset') != '') { - if (Token::check((Http::get('token')))) { - Filesystem::copy(PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::get('fieldset') . '.yaml', - PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::get('fieldset') . '-duplicate-' . date("Ymd_His") . '.yaml'); - Notification::set('success', __('admin_message_fieldset_duplicated')); - Http::redirect(Http::getBaseUrl() . '/admin/fieldsets'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - - protected static function deleteFieldsets() - { - if (Http::get('fieldset') != '') { - if (Token::check((Http::get('token')))) { - Filesystem::delete(PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::get('fieldset') . '.yaml'); - Notification::set('success', __('admin_message_fieldset_deleted')); - Http::redirect(Http::getBaseUrl() . '/admin/fieldsets'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - - protected static function editFieldsets() - { - $action = Http::post('action'); - - if (isset($action) && $action == 'save-form') { - if (Token::check((Http::post('token')))) { - - // Save a fieldset! - if (Filesystem::write( - PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::post('name') . '.yaml', - Http::post('fieldset') - )) { - Notification::set('success', __('admin_message_fieldset_saved')); - Http::redirect(Http::getBaseUrl() . '/admin/fieldsets/edit?fieldset=' . Http::post('name')); - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - Themes::view('admin/views/templates/extends/fieldsets/edit') - ->assign('fieldset', Filesystem::read(PATH['themes'] . '/' . Registry::get('settings.theme') . '/fieldsets/' . Http::get('fieldset') . '.yaml')) - ->display(); - } - - protected static function listFieldsets() - { - Themes::view('admin/views/templates/extends/fieldsets/list') - ->assign('fieldsets_list', Fieldsets::fetchList()) - ->display(); - } -} diff --git a/site/plugins/admin/classes/InformationManager.php b/site/plugins/admin/classes/InformationManager.php deleted file mode 100644 index 8cbbb99f..00000000 --- a/site/plugins/admin/classes/InformationManager.php +++ /dev/null @@ -1,65 +0,0 @@ -get('/admin/information', InformationController::class . ':index')->setName('admin.information'); - -class InformationController { - - protected $container; - - // constructor receives container instance - public function __construct(ContainerInterface $container) { - $this->container = $container; - } - - public function index() - { - if (function_exists('apache_get_modules')) { - if (!in_array('mod_rewrite', apache_get_modules())) { - $apache_mod_rewrite_installed = false; - } else { - $apache_mod_rewrite_installed = true; - } - } else { - $apache_mod_rewrite_installed = true; - } - - if (!function_exists('password_hash')) { - $password_hash_installed = false; - } else { - $password_hash_installed = true; - } - - if (!function_exists('password_verify')) { - $password_verify_installed = false; - } else { - $password_verify_installed = true; - } - - return $this->view->render($response, - 'plugins/admin/views/templates/system/information/index.html', [ - 'menu_item' => 'information', - 'php_uname' => php_uname(), - 'webserver' => isset($_SERVER['SERVER_SOFTWARE']) ? $_SERVER['SERVER_SOFTWARE'] : @getenv('SERVER_SOFTWARE'), - 'php_sapi_name' => php_sapi_name(), - 'apache_mod_rewrite_installed' => $apache_mod_rewrite_installed, - 'password_verify_installed' => $password_verify_installed, - 'password_hash_installed' => $password_hash_installed, - 'links' => [ - 'information' => [ - 'link' => '/admin/information', - 'title' => __('admin_information'), - 'attributes' => ['class' => 'navbar-item active'] - ], - ] - - ]); - } -} diff --git a/site/plugins/admin/classes/PluginsManager.php b/site/plugins/admin/classes/PluginsManager.php deleted file mode 100644 index 4ac67936..00000000 --- a/site/plugins/admin/classes/PluginsManager.php +++ /dev/null @@ -1,33 +0,0 @@ -get('/admin/plugins', function (Request $request, Response $response, array $args) { - return $this->view->render($response, - 'plugins/admin/views/templates/extends/plugins/index.html', [ - 'plugins_list' => $this->get('registry')->get('plugins'), - 'menu_item' => 'plugins' - ]); -})->setName('plugins'); - -$app->post('/admin/plugins/change_status', function (Request $request, Response $response, array $args) { - - $data = $request->getParsedBody(); - - $plugin_settings = YamlParser::decode(Filesystem::read(PATH['plugins'] . '/' . $data['plugin'] . '/' . 'settings.yaml')); - Arr::set($plugin_settings, 'enabled', ($data['status'] == 'true' ? true : false)); - Filesystem::write(PATH['plugins'] . '/' . $data['plugin'] . '/' . 'settings.yaml', YamlParser::encode($plugin_settings)); - $this->get('cache')->clear(); - -})->setName('plugins-change-status'); diff --git a/site/plugins/admin/classes/SettingsManager.php b/site/plugins/admin/classes/SettingsManager.php deleted file mode 100644 index 9e35c5ba..00000000 --- a/site/plugins/admin/classes/SettingsManager.php +++ /dev/null @@ -1,141 +0,0 @@ -get('/admin/settings', function (Request $request, Response $response, array $args) { - - $entries = []; - foreach ($this->entries->fetchAll('', 'date', 'DESC') as $entry) { - $entries[$entry['slug']] = $entry['title']; - } - - $themes = []; - foreach (Filesystem::listContents(PATH['themes']) as $theme) { - if ($theme['type'] == 'dir' && Filesystem::has($theme['path'] . '/' . $theme['dirname'] . '.yaml')) { - $themes[$theme['dirname']] = $theme['dirname']; - } - } - - $available_locales = Filesystem::listContents(PATH['plugins'] . '/admin/languages/'); - $system_locales = $this->plugins->getLocales(); - $locales = []; - foreach ($available_locales as $locale) { - if ($locale['type'] == 'file' && $locale['extension'] == 'yaml') { - $locales[$locale['basename']] = $system_locales[$locale['basename']]['nativeName']; - } - } - - $cache_driver = ['auto' => 'Auto Detect', - 'file' => 'File', - 'apcu' => 'APCu', - 'wincache' => 'WinCache', - 'memcached' => 'Memcached', - 'redis' => 'Redis', - 'sqlite3' => 'SQLite3', - 'zend' => 'Zend', - 'array' => 'Array']; - - return $this->view->render($response, - 'plugins/admin/views/templates/system/settings/index.html', [ - 'timezones' => Date::timezones(), - 'settings' => $this->registry->get('settings'), - 'cache_driver' => $cache_driver, - 'locales' => $locales, - 'entries' => $entries, - 'themes' => $themes, - 'links' => [ - 'settings' => [ - 'link' => '/admin/settings', - 'title' => __('admin_settings'), - 'attributes' => ['class' => 'navbar-item active'] - ] - ], - 'buttons' => [ - 'save' => [ - 'link' => 'javascript:;', - 'title' => __('admin_save'), - 'attributes' => ['class' => 'js-save-form-submit float-right btn'] - ], - 'settings_clear_cache' => [ - 'link' => '/admin/settings?clear_cache=1&token=' . Token::generate(), - 'title' => __('admin_clear_cache'), - 'attributes' => ['class' => 'float-right btn'] - ] - ] - ]); -})->setName('information'); - -class SettingsManager -{ - public static function getSettingsManager() - { - Registry::set('sidebar_menu_item', 'settings'); - - SettingsManager::clearCache(); - SettingsManager::saveSettings(); - - Themes::view('admin/views/templates/system/settings/list') - ->assign('settings', Registry::get('settings')) - ->assign('cache_driver', SettingsManager::cacheDriverList()) - ->assign('locales', SettingsManager::localesList()) - ->assign('entries', SettingsManager::entriesList()) - ->assign('themes', SettingsManager::themesList()) - ->display(); - } - - private static function saveSettings() - { - if (Http::post('action') !== null && Http::post('action') == 'save-form' && Http::post('token') !== null) { - if (Token::check((Http::post('token')))) { - - $settings = $_POST; - - Arr::delete($settings, 'token'); - Arr::delete($settings, 'action'); - Arr::set($settings, 'errors.display', (Http::post('errors.display') == '1' ? true : false)); - Arr::set($settings, 'cache.enabled', (Http::post('cache.enabled') == '1' ? true : false)); - Arr::set($settings, 'cache.lifetime', (int) Http::post('cache.lifetime')); - Arr::set($settings, 'entries.media.upload_images_quality', (int) Http::post('entries.media.upload_images_quality')); - Arr::set($settings, 'entries.media.upload_images_width', (int) Http::post('entries.media.upload_images_width')); - Arr::set($settings, 'entries.media.upload_images_height', (int) Http::post('entries.media.upload_images_height')); - - if (Filesystem::write(PATH['config']['site'] . '/settings.yaml', YamlParser::encode(array_merge(Registry::get('settings'), $settings)))) { - Notification::set('success', __('admin_message_settings_saved')); - } else { - Notification::set('error', __('admin_message_settings_was_not_saved')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/settings'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - - private static function clearCache() - { - // Clear cache - if (Http::get('clear_cache') !== null && Http::get('clear_cache') == '1' && Http::get('token') !== null) { - if (Token::check((Http::get('token')))) { - Cache::clear(); - Notification::set('success', __('admin_message_cache_files_deleted')); - Http::redirect(Http::getBaseUrl() . '/admin/settings'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - -} diff --git a/site/plugins/admin/classes/SnippetsManager.php b/site/plugins/admin/classes/SnippetsManager.php deleted file mode 100644 index 422746ee..00000000 --- a/site/plugins/admin/classes/SnippetsManager.php +++ /dev/null @@ -1,178 +0,0 @@ -assign('snippet', Filesystem::read(PATH['snippets'] . '/' . Http::get('snippet') . '.php')) - ->display(); - } - - private static function listSnippet() - { - $snippets = []; - - foreach (Filesystem::listContents(PATH['snippets']) as $snippet) { - if ($snippet['type'] == 'file' && $snippet['extension'] == 'php') { - $snippets[$snippet['basename']] = $snippet['basename']; - } - } - - Themes::view('admin/views/templates/extends/snippets/list') - ->assign('snippets_list', $snippets) - ->display(); - } - - private static function duplicateSnippet() - { - if (Http::get('snippet') != '') { - if (Token::check((Http::get('token')))) { - if (Snippets::copy(Http::get('snippet'), - Http::get('snippet') . '-duplicate-' . date("Ymd_His"))) { - Notification::set('success', __('admin_message_snippet_duplicated')); - } else { - Notification::set('error', __('admin_message_snippet_was_not_duplicated')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/snippets'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - - private static function renameSnippet() - { - $rename_snippet = Http::post('rename_snippet'); - - if (isset($rename_snippet)) { - if (Token::check((Http::post('token')))) { - if (!Snippets::has(Http::post('name'))) { - if (Snippets::rename( - Http::post('name_current'), - Http::post('name')) - ) { - Notification::set('success', __('admin_message_snippet_renamed')); - } else { - Notification::set('error', __('admin_message_snippet_was_not_renamed')); - } - Http::redirect(Http::getBaseUrl() . '/admin/snippets'); - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - Themes::view('admin/views/templates/extends/snippets/rename') - ->assign('name_current', Http::get('snippet')) - ->display(); - } - - private static function deleteSnippet() - { - if (Http::get('snippet') != '') { - if (Token::check((Http::get('token')))) { - - if (Snippets::delete(Http::get('snippet'))) { - Notification::set('success', __('admin_message_snippet_deleted')); - } else { - Notification::set('error', __('admin_message_snippet_was_not_deleted')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/snippets'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - } - - private static function addSnippet() - { - $create_snippet = Http::post('create_snippet'); - - if (isset($create_snippet)) { - if (Token::check((Http::post('token')))) { - - $snippet_name = Text::safeString(Http::post('name'), '-', true); - - if (!Snippets::has($snippet_name)) { - - // Create a snippet! - if (Snippets::create($snippet_name)) { - Notification::set('success', __('admin_message_snippet_created')); - } else { - Notification::set('error', __('admin_message_snippet_was_not_created')); - } - - Http::redirect(Http::getBaseUrl() . '/admin/snippets'); - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - Themes::view('admin/views/templates/extends/snippets/add') - ->display(); - } -} diff --git a/site/plugins/admin/classes/TemplatesManager.php b/site/plugins/admin/classes/TemplatesManager.php deleted file mode 100644 index 29395210..00000000 --- a/site/plugins/admin/classes/TemplatesManager.php +++ /dev/null @@ -1,136 +0,0 @@ -display(); - break; - case 'delete': - if (Http::get('template') != '') { - if (Token::check((Http::get('token')))) { - $type = (Http::get('type') && Http::get('type') == 'partial') ? 'partial' : 'template'; - Filesystem::delete(PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/' . $type . 's' . '/' . Http::get('template') . '.php'); - Notification::set('success', __('admin_message_template_deleted')); - Http::redirect(Http::getBaseUrl() . '/admin/templates'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - break; - case 'rename': - $rename_template = Http::post('rename_template'); - - if (isset($rename_template)) { - if (Token::check((Http::post('token')))) { - $type = (Http::post('type') && Http::post('type') == 'partial') ? 'partial' : 'template'; - $type_current = (Http::post('type_current') && Http::post('type_current') == 'partial') ? 'partial' : 'template'; - if (!Filesystem::has(PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/' . $type . 's' . '/' . Http::post('name') . '.php')) { - if (rename( - PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/' . $type_current . 's' . '/' . Http::post('name_current') . '.php', - PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/' . $type . 's' . '/' . Http::post('name') . '.php') - ) { - Notification::set('success', __('admin_message_template_renamed')); - Http::redirect(Http::getBaseUrl() . '/admin/templates'); - } - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - Themes::view('admin/views/templates/extends/templates/rename') - ->assign('name_current', Http::get('template')) - ->assign('type', ((Http::get('type') && Http::get('type') == 'partial') ? 'partial' : 'template')) - ->display(); - break; - case 'duplicate': - if (Http::get('template') != '') { - if (Token::check((Http::get('token')))) { - $type = (Http::get('type') && Http::get('type') == 'partial') ? 'partial' : 'template'; - Filesystem::copy(PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/' . $type . 's' . '/' . Http::get('template') . '.php', - PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/' . $type . 's' . '/' . Http::get('template') . '-duplicate-' . date("Ymd_His") . '.php'); - Notification::set('success', __('admin_message_template_duplicated')); - Http::redirect(Http::getBaseUrl() . '/admin/templates'); - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - break; - case 'edit': - $action = Http::post('action'); - - if (isset($action) && $action == 'save-form') { - if (Token::check((Http::post('token')))) { - - $type = (Http::post('type') && Http::post('type') == 'partial') ? 'partial' : 'template'; - - // Save a template! - if (Filesystem::write( - PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/' . $type . 's' . '/' . Http::post('name') . '.php', - Http::post('template') - )) { - Notification::set('success', __('admin_message_template_saved')); - Http::redirect(Http::getBaseUrl() . '/admin/templates/edit?template=' . Http::post('name') . '&type=' . $type); - } - } else { - throw new \RuntimeException("Request was denied because it contained an invalid security token. Please refresh the page and try again."); - } - } - - $type = (Http::get('type') && Http::get('type') == 'partial') ? 'partials' : 'templates'; - - Themes::view('admin/views/templates/extends/templates/edit') - ->assign('template', Filesystem::read(PATH['themes'] . '/' . Registry::get('settings.theme') . '/views/' . $type . '/' . Http::get('template') . '.php')) - ->assign('type', ((Http::get('type') && Http::get('type') == 'partial') ? 'partial' : 'template')) - ->display(); - break; - default: - - Themes::view('admin/views/templates/extends/templates/list') - ->assign('templates_list', Themes::getTemplates()) - ->assign('partials_list', Themes::getPartials()) - ->display(); - break; - } - } -} diff --git a/site/plugins/admin/classes/UsersManager.php b/site/plugins/admin/classes/UsersManager.php deleted file mode 100644 index c1d7c397..00000000 --- a/site/plugins/admin/classes/UsersManager.php +++ /dev/null @@ -1,128 +0,0 @@ -get('/admin/login', UsersController::class . ':login')->setName('admin.login'); -$app->get('/admin/profile', UsersController::class . ':profile')->setName('admin.profile'); -$app->get('/admin/logout', UsersController::class . ':processLogoutForm')->setName('admin.logout'); -$app->get('/admin/registration', UsersController::class . ':registration')->setName('admin.registration'); -$app->post('/admin/registration', UsersController::class . ':processRegistrationForm'); -$app->post('/admin/login', UsersController::class . ':processLoginForm'); - -class UsersController { - - protected $container; - - // constructor receives container instance - public function __construct(ContainerInterface $container) { - $this->container = $container; - } - - public function login($request, $response, $args) - { - if (!Users::isLoggedIn()) { - return $this->container->get('view')->render($response, - 'plugins/admin/views/templates/users/login.html', [ - 'user_is_logged' => Users::isLoggedIn() - ]); - } else { - return $response->withRedirect($this->container->get('router')->urlFor('admin.registration')); - } - } - - public function profile($request, $response, $args) - { - if (Users::isLoggedIn()) { - return $this->container->get('view')->render($response, - 'plugins/admin/views/templates/users/profile.html', [ - 'username' => Session::get('username'), - 'rolename' => Session::get('role'), - 'sidebar_menu_item' => 'profile', - 'user_is_logged' => 'user_is_logged!' - ]); - } else { - return $response->withRedirect($this->container->get('router')->urlFor('admin.login')); - } - } - - public function processLoginForm($request, $response, $args) - { - if (Filesystem::has($_user_file = PATH['site'] . '/accounts/' . $data['username'] . '.yaml')) { - - $user_file = YamlParser::decode(Filesystem::read($_user_file)); - - if (password_verify(trim($data['password']), $user_file['hashed_password'])) { - Session::set('username', $user_file['username']); - Session::set('role', $user_file['role']); - - return $response->withRedirect('admin/entries'); - - } else { - //Notification::set('error', __('admin_message_wrong_username_password')); - } - } else { - //Notification::set('error', __('admin_message_wrong_username_password')); - } - } - - public function processLogoutForm($request, $response, $args) - { - Session::destroy(); - return $response->withRedirect('/admin'); - } - - public function registration($request, $response, $args) - { - if (!Users::isLoggedIn()) { - return $this->view->render($response, - 'plugins/admin/views/templates/users/registration.html'); - } else { - return $response->withRedirect($this->container->get('router')->urlFor('admin.login')); - } - } - - public function processRegistrationForm($request, $response, $args) - { - if (!Filesystem::has($_user_file = PATH['site'] . '/accounts/' . Text::safeString($data['username']) . '.yaml')) { - if (Filesystem::write( - PATH['site'] . '/accounts/' . $data['username'] . '.yaml', - YamlParser::encode(['username' => Text::safeString($data['username']), - 'hashed_password' => password_hash($data['password'], PASSWORD_BCRYPT), - 'email' => $data['email'], - 'role' => 'admin', - 'state' => 'enabled']))) { - return $response->withRedirect('admin/entries'); - } else { - //return false; - } - } else { - //return false; - } - } -} - -class Users -{ - public static function isUsersExists() : bool - { - // Get Users Profiles - $users = Filesystem::listContents(PATH['site'] . '/accounts/'); - - // If any users exists then return true - return ($users && count($users) > 0) ? true : false; - } - - public static function isLoggedIn() : bool - { - return (Session::exists('role') && Session::get('role') == 'admin') ? true : false; - } -}