/** * render the view * * @since 3.0.0 * * @param integer $moduleId identifier of the module * * @return string */ public function render($moduleId = null) { $output = Hook::trigger('adminModuleFormStart'); $module = Db::forTablePrefix('modules')->whereIdIs($moduleId)->findOne(); /* html elements */ $titleElement = new Html\Element(); $titleElement->init('h2', ['class' => 'rs-admin-title-content']); $titleElement->text($module->name); $linkElement = new Html\Element(); $linkElement->init('a'); $itemElement = new Html\Element(); $itemElement->init('li'); $listElement = new Html\Element(); $listElement->init('ul', ['class' => 'rs-admin-js-list-tab rs-admin-list-tab']); $formElement = new AdminForm($this->_registry, $this->_language); $formElement->init(['form' => ['action' => $this->_registry->get('parameterRoute') . ($module->id ? 'admin/process/modules/' . $module->id : 'admin/process/modules'), 'class' => 'rs-admin-js-tab rs-admin-js-validate-form rs-admin-component-tab rs-admin-form-default rs-admin-fn-clearfix'], 'link' => ['cancel' => ['href' => $this->_registry->get('modulesEdit') && $this->_registry->get('modulesUninstall') ? $this->_registry->get('parameterRoute') . 'admin/view/modules' : $this->_registry->get('parameterRoute') . 'admin'], 'uninstall' => ['href' => $module->alias ? $this->_registry->get('parameterRoute') . 'admin/uninstall/modules/' . $module->alias . '/' . $this->_registry->get('token') : null]]]); /* docs directory */ $docsDirectory = new Directory(); $docsDirectory->init('modules/' . $module->alias . '/docs'); $docsDirectoryArray = $docsDirectory->getArray(); /* collect item output */ $tabCounter = 1; $tabRoute = $this->_registry->get('parameterRoute') . $this->_registry->get('fullRoute'); $outputItem = $itemElement->copy()->addClass('rs-admin-js-item-active rs-admin-item-active')->html($linkElement->copy()->attr('href', $tabRoute . '#tab-' . $tabCounter++)->text($this->_language->get('module'))); /* process directory */ foreach ($docsDirectoryArray as $value) { $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-' . $tabCounter++)->text(pathinfo($value, PATHINFO_FILENAME))); } /* collect item output */ $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-' . $tabCounter++)->text($this->_language->get('customize'))); $listElement->append($outputItem); /* create the form */ $tabCounter = 1; $formElement->append($listElement)->append('<div class="rs-admin-js-box-tab rs-admin-box-tab rs-admin-box-tab">')->append('<fieldset id="tab-' . $tabCounter++ . '" class="rs-admin-js-set-tab rs-admin-js-set-active rs-admin-set-tab rs-admin-set-active"><ul><li>')->label($this->_language->get('name'), ['for' => 'name'])->text(['autofocus' => 'autofocus', 'id' => 'name', 'name' => 'name', 'required' => 'required', 'value' => $module->name])->append('</li><li>')->label($this->_language->get('description'), ['for' => 'description'])->textarea(['class' => 'rs-admin-js-auto-resize rs-admin-field-textarea rs-admin-field-small', 'id' => 'description', 'name' => 'description', 'rows' => 1, 'value' => $module->description])->append('</li></ul></fieldset>'); /* second tab */ if ($docsDirectoryArray) { /* process directory */ foreach ($docsDirectoryArray as $value) { $formElement->append('<fieldset id="tab-' . $tabCounter++ . '" class="rs-admin-js-set-tab rs-admin-set-tab">')->append(Template\Tag::partial('modules/' . $module->alias . '/docs/' . $value))->append('</fieldset>'); } } /* last tab */ $formElement->append('<fieldset id="tab-' . $tabCounter++ . '" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('status'), ['for' => 'status'])->select(Helper\Option::getToggleArray(), ['id' => 'status', 'name' => 'status', 'value' => intval($module->status)])->append('</li>'); if ($this->_registry->get('groupsEdit')) { $formElement->append('<li>')->label($this->_language->get('access'), ['for' => 'access'])->select(Helper\Option::getAccessArray('groups'), ['id' => 'access', 'name' => 'access[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getAccessArray('groups')), 'value' => $module->access])->append('</li>'); } $formElement->append('</ul></fieldset></div>')->token()->cancel(); if ($this->_registry->get('modulesUninstall')) { $formElement->uninstall(); } if ($this->_registry->get('modulesEdit')) { $formElement->save(); } /* collect output */ $output .= $titleElement . $formElement; $output .= Hook::trigger('adminModuleFormEnd'); return $output; }
/** * render the view * * @since 3.0.0 * * @param integer $userId identifier of the user * * @return string */ public function render($userId = null) { $output = Hook::trigger('adminUserFormStart'); $user = Db::forTablePrefix('users')->whereIdIs($userId)->findOne(); /* html elements */ $titleElement = new Html\Element(); $titleElement->init('h2', ['class' => 'rs-admin-title-content']); $titleElement->text($user->name ? $user->name : $this->_language->get('user_new')); $linkElement = new Html\Element(); $linkElement->init('a'); $itemElement = new Html\Element(); $itemElement->init('li'); $listElement = new Html\Element(); $listElement->init('ul', ['class' => 'rs-admin-js-list-tab rs-admin-list-tab']); $formElement = new AdminForm($this->_registry, $this->_language); $formElement->init(['form' => ['action' => $this->_registry->get('parameterRoute') . ($user->id ? 'admin/process/users/' . $user->id : 'admin/process/users'), 'class' => 'rs-admin-js-tab rs-admin-js-validate-form rs-admin-component-tab rs-admin-form-default rs-admin-fn-clearfix'], 'link' => ['cancel' => ['href' => $this->_registry->get('usersEdit') && $this->_registry->get('usersDelete') ? $this->_registry->get('parameterRoute') . 'admin/view/users' : $this->_registry->get('parameterRoute') . 'admin'], 'delete' => ['href' => $user->id ? $this->_registry->get('parameterRoute') . 'admin/delete/users/' . $user->id . '/' . $this->_registry->get('token') : null]]]); /* collect item output */ $tabRoute = $this->_registry->get('parameterRoute') . $this->_registry->get('fullRoute'); $outputItem = $itemElement->copy()->addClass('rs-admin-js-item-active rs-admin-item-active')->html($linkElement->copy()->attr('href', $tabRoute . '#tab-1')->text($this->_language->get('user'))); $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-2')->text($this->_language->get('general'))); if (!$user->id || $user->id > 1) { $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-3')->text($this->_language->get('customize'))); } $listElement->append($outputItem); /* create the form */ $formElement->append($listElement)->append('<div class="rs-admin-js-box-tab rs-admin-box-tab">')->append('<fieldset id="tab-1" class="rs-admin-js-set-tab rs-admin-js-set-active rs-admin-set-tab rs-admin-set-active"><ul><li>')->label($this->_language->get('name'), ['for' => 'name'])->text(['autofocus' => 'autofocus', 'id' => 'name', 'name' => 'name', 'required' => 'required', 'value' => $user->name])->append('</li>'); if (!$user->id) { $formElement->append('<li>')->label($this->_language->get('user'), ['for' => 'user'])->text(['id' => 'user', 'name' => 'user', 'pattern' => '[a-zA-Z0-9]{1,30}', 'required' => 'required', 'value' => $user->user])->append('</li>'); } $formElement->append('<li>')->label($this->_language->get('password'), ['for' => 'password'])->password(['id' => 'password', 'pattern' => '[a-zA-Z0-9]{1,30}', 'name' => 'password'])->append('</li><li>')->label($this->_language->get('password_confirm'), ['for' => 'password_confirm'])->password(['id' => 'password_confirm', 'pattern' => '[a-zA-Z0-9]{1,30}', 'name' => 'password_confirm'])->append('</li><li>')->label($this->_language->get('email'), ['for' => 'email'])->email(['id' => 'email', 'name' => 'email', 'required' => 'required', 'value' => $user->email])->append('</li><li>')->label($this->_language->get('description'), ['for' => 'description'])->textarea(['class' => 'rs-admin-js-auto-resize rs-admin-field-textarea rs-admin-field-small', 'id' => 'description', 'name' => 'description', 'rows' => 1, 'value' => $user->description])->append('</li></ul></fieldset>')->append('<fieldset id="tab-2" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('language'), ['for' => 'language'])->select(Helper\Option::getLanguageArray(), ['id' => 'language', 'name' => 'language', 'value' => $user->language])->append('</li></ul></fieldset>'); /* last tab */ if (!$user->id || $user->id > 1) { $formElement->append('<fieldset id="tab-3" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('status'), ['for' => 'status'])->select(Helper\Option::getToggleArray(), ['id' => 'status', 'name' => 'status', 'value' => $user->id ? intval($user->status) : 1])->append('</li>'); if ($this->_registry->get('groupsEdit')) { $formElement->append('<li>')->label($this->_language->get('groups'), ['for' => 'groups'])->select(Helper\Option::getAccessArray('groups'), ['id' => 'groups', 'name' => 'groups[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getAccessArray('groups')), 'value' => $user->groups])->append('</li>'); } $formElement->append('</ul></fieldset>'); } $formElement->append('</div>')->token()->cancel(); if ($user->id) { if (($this->_registry->get('usersDelete') || $this->_registry->get('myId') === $user->id) && $user->id > 1) { $formElement->delete(); } if ($this->_registry->get('usersEdit') || $this->_registry->get('myId') === $user->id) { $formElement->save(); } } else { if ($this->_registry->get('usersNew')) { $formElement->create(); } } /* collect output */ $output .= $titleElement . $formElement; $output .= Hook::trigger('adminUserFormEnd'); return $output; }
/** * render the view * * @since 3.0.0 * * @param integer $groupId identifier of the group * * @return string */ public function render($groupId = null) { $output = Hook::trigger('adminGroupFormStart'); $group = Db::forTablePrefix('groups')->whereIdIs($groupId)->findOne(); /* html elements */ $titleElement = new Html\Element(); $titleElement->init('h2', ['class' => 'rs-admin-title-content']); $titleElement->text($group->name ? $group->name : $this->_language->get('group_new')); $linkElement = new Html\Element(); $linkElement->init('a'); $itemElement = new Html\Element(); $itemElement->init('li'); $listElement = new Html\Element(); $listElement->init('ul', ['class' => 'rs-admin-js-list-tab rs-admin-list-tab']); $formElement = new AdminForm($this->_registry, $this->_language); $formElement->init(['form' => ['action' => $this->_registry->get('parameterRoute') . ($group->id ? 'admin/process/groups/' . $group->id : 'admin/process/groups'), 'class' => 'rs-admin-js-tab rs-admin-js-validate-form rs-admin-component-tab rs-admin-form-default rs-admin-fn-clearfix'], 'link' => ['cancel' => ['href' => $this->_registry->get('groupsEdit') && $this->_registry->get('groupsDelete') ? $this->_registry->get('parameterRoute') . 'admin/view/groups' : $this->_registry->get('parameterRoute') . 'admin'], 'delete' => ['href' => $group->id ? $this->_registry->get('parameterRoute') . 'admin/delete/groups/' . $group->id . '/' . $this->_registry->get('token') : null]]]); /* collect item output */ $tabRoute = $this->_registry->get('parameterRoute') . $this->_registry->get('fullRoute'); $outputItem = $itemElement->copy()->addClass('rs-admin-js-item-active rs-admin-item-active')->html($linkElement->copy()->attr('href', $tabRoute . '#tab-1')->text($this->_language->get('group'))); if (!$group->id || $group->id > 1) { $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-2')->text($this->_language->get('access'))); $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-3')->text($this->_language->get('customize'))); } $listElement->append($outputItem); /* create the form */ $formElement->append($listElement)->append('<div class="rs-admin-js-box-tab rs-admin-box-tab rs-admin-box-tab">')->append('<fieldset id="tab-1" class="rs-admin-js-set-tab rs-admin-js-set-active rs-admin-set-tab rs-admin-set-active"><ul><li>')->label($this->_language->get('name'), ['for' => 'name'])->text(['autofocus' => 'autofocus', 'id' => 'name', 'name' => 'name', 'required' => 'required', 'value' => $group->name])->append('</li><li>')->label($this->_language->get('user'), ['for' => 'user'])->text(['id' => 'alias', 'name' => 'alias', 'pattern' => '[a-zA-Z0-9-]+', 'required' => 'required', 'value' => $group->alias])->append('</li><li>')->label($this->_language->get('description'), ['for' => 'description'])->textarea(['class' => 'rs-admin-js-auto-resize rs-admin-field-textarea rs-admin-field-small', 'id' => 'description', 'name' => 'description', 'rows' => 1, 'value' => $group->description])->append('</li></ul></fieldset>'); /* second tab */ if (!$group->id || $group->id > 1) { $formElement->append('<fieldset id="tab-2" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('categories'), ['for' => 'categories'])->select(Helper\Option::getPermissionArray(), ['id' => 'categories', 'name' => 'categories[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getPermissionArray()), 'value' => $group->categories])->append('</li><li>')->label($this->_language->get('articles'), ['for' => 'articles'])->select(Helper\Option::getPermissionArray(), ['id' => 'articles', 'name' => 'articles[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getPermissionArray()), 'value' => $group->articles])->append('</li><li>')->label($this->_language->get('extras'), ['for' => 'extras'])->select(Helper\Option::getPermissionArray(), ['id' => 'extras', 'name' => 'extras[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getPermissionArray()), 'value' => $group->extras])->append('</li><li>')->label($this->_language->get('comments'), ['for' => 'comments'])->select(Helper\Option::getPermissionArray(), ['id' => 'comments', 'name' => 'comments[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getPermissionArray()), 'value' => $group->comments])->append('</li><li>')->label($this->_language->get('groups'), ['for' => 'groups'])->select(Helper\Option::getPermissionArray(), ['id' => 'groups', 'name' => 'groups[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getPermissionArray()), 'value' => $group->groups])->append('</li><li>')->label($this->_language->get('users'), ['for' => 'users'])->select(Helper\Option::getPermissionArray(), ['id' => 'users', 'name' => 'users[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getPermissionArray()), 'value' => $group->users])->append('</li><li>')->label($this->_language->get('modules'), ['for' => 'modules'])->select(Helper\Option::getPermissionArray('modules'), ['id' => 'modules', 'name' => 'modules[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getPermissionArray('modules')), 'value' => $group->modules])->append('</li><li>')->label($this->_language->get('settings'), ['for' => 'settings'])->select(Helper\Option::getPermissionArray('settings'), ['id' => 'settings', 'name' => 'settings[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getPermissionArray('settings')), 'value' => intval($group->settings)])->append('</li></ul></fieldset>')->append('<fieldset id="tab-3" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('filter'), ['for' => 'filter'])->select(Helper\Option::getToggleArray(), ['id' => 'filter', 'name' => 'filter', 'value' => $group->id ? $group->filter : 1])->append('</li><li>')->label($this->_language->get('status'), ['for' => 'status'])->select(Helper\Option::getToggleArray(), ['id' => 'status', 'name' => 'status', 'value' => $group->id ? intval($group->status) : 1])->append('</li></ul></fieldset>'); } $formElement->append('</div>')->token()->cancel(); if ($group->id) { if ($this->_registry->get('groupsDelete') && $group->id > 1) { $formElement->delete(); } if ($this->_registry->get('groupsEdit')) { $formElement->save(); } } else { if ($this->_registry->get('groupsNew')) { $formElement->create(); } } /* collect output */ $output .= $titleElement . $formElement; $output .= Hook::trigger('adminGroupFormEnd'); return $output; }
/** * render * * @since 2.2.0 * * @param mixed $src * @param array $options * * @return string */ public static function render($src = null, $options = array()) { $output = null; /* device related images */ if (is_array($src)) { /* process source */ foreach ($src as $key => $value) { if (in_array($key, self::$_config['device']) && Registry::get('my' . ucfirst($key))) { $src = $value; } } } /* collect output */ if (file_exists($src)) { $imageElement = new Html\Element(); $imageElement->init('img', array('alt' => $options['alt'], 'class' => self::$_config['className']['image'] . ' ' . $options['className'], 'src' => self::$_config['placeholder'])); /* collect output */ $output = $imageElement->copy()->attr('data-src', $src); /* placeholder */ if (self::$_config['placeholder']) { /* calculate image ratio */ $imageDimensions = getimagesize($src); $imageRatio = $imageDimensions[1] / $imageDimensions[0] * 100; /* placeholder */ $placeholderElement = new Html\Element(); $placeholderElement->init('div', array('class' => self::$_config['className']['placeholder'], 'style' => 'padding-bottom:' . $imageRatio . '%')); /* collect output */ $output = $placeholderElement->html($output); } /* noscript fallback */ $output .= '<noscript>' . $imageElement . '</noscript>'; } return $output; }
/** * render the view * * @since 3.0.0 * * @param integer $commentId identifier of the comment * * @return string */ public function render($commentId = null) { $output = Hook::trigger('adminCommentFormStart'); $comment = Db::forTablePrefix('comments')->whereIdIs($commentId)->findOne(); /* html elements */ $titleElement = new Html\Element(); $titleElement->init('h2', ['class' => 'rs-admin-title-content']); $titleElement->text($comment->author ? $comment->author : $this->_language->get('comment_new')); $linkElement = new Html\Element(); $linkElement->init('a'); $itemElement = new Html\Element(); $itemElement->init('li'); $listElement = new Html\Element(); $listElement->init('ul', ['class' => 'rs-admin-js-list-tab rs-admin-list-tab']); $formElement = new AdminForm($this->_registry, $this->_language); $formElement->init(['form' => ['action' => $this->_registry->get('parameterRoute') . ($comment->id ? 'admin/process/comments/' . $comment->id : 'admin/process/comments'), 'class' => 'rs-admin-js-tab rs-admin-js-validate-form rs-admin-component-tab rs-admin-form-default rs-admin-fn-clearfix'], 'link' => ['cancel' => ['href' => $this->_registry->get('commentsEdit') && $this->_registry->get('commentsDelete') ? $this->_registry->get('parameterRoute') . 'admin/view/comments' : $this->_registry->get('parameterRoute') . 'admin'], 'delete' => ['href' => $comment->id ? $this->_registry->get('parameterRoute') . 'admin/delete/comments/' . $comment->id . '/' . $this->_registry->get('token') : null]]]); /* collect item output */ $tabRoute = $this->_registry->get('parameterRoute') . $this->_registry->get('fullRoute'); $outputItem = $itemElement->copy()->addClass('rs-admin-js-item-active rs-admin-item-active')->html($linkElement->copy()->attr('href', $tabRoute . '#tab-1')->text($this->_language->get('comment'))); $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-2')->text($this->_language->get('general'))); $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-3')->text($this->_language->get('customize'))); $listElement->append($outputItem); /* create the form */ $formElement->append($listElement)->append('<div class="rs-admin-js-box-tab rs-admin-box-tab">')->append('<fieldset id="tab-1" class="rs-admin-js-set-tab rs-admin-js-set-active rs-admin-set-tab rs-admin-set-active"><ul><li>')->label('* ' . $this->_language->get('author'), ['for' => 'author'])->text(['id' => 'author', 'name' => 'author', 'readonly' => 'readonly', 'required' => 'required', 'value' => $comment->author ? $comment->author : $this->_registry->get('myName')])->append('</li><li>')->label('* ' . $this->_language->get('email'), ['for' => 'email'])->email(['id' => 'email', 'name' => 'email', 'readonly' => 'readonly', 'required' => 'required', 'value' => $comment->email ? $comment->email : $this->_registry->get('myEmail')])->append('</li><li>')->label($this->_language->get('url'), ['for' => 'url'])->url(['id' => 'url', 'name' => 'url', 'value' => $comment->url])->append('</li><li>')->label('* ' . $this->_language->get('text'), ['for' => 'text'])->textarea(['id' => 'text', 'name' => 'text', 'required' => 'required', 'value' => htmlspecialchars($comment->text)])->append('</li></ul></fieldset>')->append('<fieldset id="tab-2" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('language'), ['for' => 'language'])->select(Helper\Option::getLanguageArray(), ['id' => 'language', 'name' => 'language', 'value' => $comment->language])->append('</li><li>')->label($this->_language->get('article'), ['for' => 'article'])->select(Helper\Option::getContentArray('articles'), ['id' => 'article', 'name' => 'article', 'value' => intval($comment->article)])->append('</li></ul></fieldset>')->append('<fieldset id="tab-3" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('status'), ['for' => 'status'])->select(Helper\Option::getVisibleArray(), ['id' => 'status', 'name' => 'status', 'value' => $comment->id ? intval($comment->status) : 1])->append('</li><li>')->label($this->_language->get('rank'), ['for' => 'rank'])->number(['id' => 'rank', 'name' => 'rank', 'value' => $comment->id ? intval($comment->rank) : Db::forTablePrefix('comments')->max('rank') + 1])->append('</li>'); if ($this->_registry->get('groupsEdit')) { $formElement->append('<li>')->label($this->_language->get('access'), ['for' => 'access'])->select(Helper\Option::getAccessArray('groups'), ['id' => 'access', 'name' => 'access[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getAccessArray('groups')), 'value' => $comment->access])->append('</li>'); } $formElement->append('<li>')->label($this->_language->get('date'), ['for' => 'date'])->datetime(['id' => 'date', 'name' => 'date', 'value' => $comment->date ? $comment->date : null])->append('</li></ul></fieldset></div>')->token()->cancel(); if ($comment->id) { if ($this->_registry->get('commentsDelete')) { $formElement->delete(); } if ($this->_registry->get('commentsEdit')) { $formElement->save(); } } else { if ($this->_registry->get('commentsNew')) { $formElement->create(); } } /* collect output */ $output .= $titleElement . $formElement; $output .= Hook::trigger('adminCommentFormEnd'); return $output; }
/** * render the view * * @since 3.0.0 * * @param integer $articleId identifier of the article * * @return string */ public function render($articleId = null) { $output = Hook::trigger('adminArticleFormStart'); $article = Db::forTablePrefix('articles')->whereIdIs($articleId)->findOne(); /* html elements */ $titleElement = new Html\Element(); $titleElement->init('h2', ['class' => 'rs-admin-title-content']); $titleElement->text($article->title ? $article->title : $this->_language->get('article_new')); $linkElement = new Html\Element(); $linkElement->init('a'); $itemElement = new Html\Element(); $itemElement->init('li'); $listElement = new Html\Element(); $listElement->init('ul', ['class' => 'rs-admin-js-list-tab rs-admin-list-tab']); $formElement = new AdminForm($this->_registry, $this->_language); $formElement->init(['form' => ['action' => $this->_registry->get('parameterRoute') . ($article->id ? 'admin/process/articles/' . $article->id : 'admin/process/articles'), 'class' => 'rs-admin-js-tab rs-admin-js-validate-form rs-admin-component-tab rs-admin-form-default rs-admin-fn-clearfix'], 'link' => ['cancel' => ['href' => $this->_registry->get('articlesEdit') && $this->_registry->get('articlesDelete') ? $this->_registry->get('parameterRoute') . 'admin/view/articles' : $this->_registry->get('parameterRoute') . 'admin'], 'delete' => ['href' => $article->id ? $this->_registry->get('parameterRoute') . 'admin/delete/articles/' . $article->id . '/' . $this->_registry->get('token') : null]]]); /* collect item output */ $tabRoute = $this->_registry->get('parameterRoute') . $this->_registry->get('fullRoute'); $outputItem = $itemElement->copy()->addClass('rs-admin-js-item-active rs-admin-item-active')->html($linkElement->copy()->attr('href', $tabRoute . '#tab-1')->text($this->_language->get('article'))); $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-2')->text($this->_language->get('general'))); $outputItem .= $itemElement->copy()->html($linkElement->copy()->attr('href', $tabRoute . '#tab-3')->text($this->_language->get('customize'))); $listElement->append($outputItem); /* create the form */ $formElement->append($listElement)->append('<div class="rs-admin-js-box-tab rs-admin-box-tab">')->append('<fieldset id="tab-1" class="rs-admin-js-set-tab rs-admin-js-set-active rs-admin-set-tab rs-admin-set-active"><ul><li>')->label($this->_language->get('title'), ['for' => 'title'])->text(['autofocus' => 'autofocus', 'class' => 'rs-admin-js-generate-alias-input rs-admin-field-default rs-admin-field-text', 'id' => 'title', 'name' => 'title', 'required' => 'required', 'value' => $article->title])->append('</li><li>')->label($this->_language->get('alias'), ['for' => 'alias'])->text(['class' => 'rs-admin-js-generate-alias-output rs-admin-field-default rs-admin-field-text', 'id' => 'alias', 'name' => 'alias', 'pattern' => '[a-zA-Z0-9-]+', 'required' => 'required', 'value' => $article->alias])->append('</li><li>')->label($this->_language->get('description'), ['for' => 'description'])->textarea(['class' => 'rs-admin-js-auto-resize rs-admin-field-textarea rs-admin-field-small', 'id' => 'description', 'name' => 'description', 'rows' => 1, 'value' => $article->description])->append('</li><li>')->label($this->_language->get('keywords'), ['for' => 'keywords'])->textarea(['class' => 'rs-admin-js-auto-resize rs-admin-js-generate-keyword-output rs-admin-field-textarea rs-admin-field-small', 'id' => 'keywords', 'name' => 'keywords', 'rows' => 1, 'value' => $article->keywords])->append('</li><li>')->label($this->_language->get('robots'), ['for' => 'robots'])->select(Helper\Option::getRobotArray(), ['id' => 'robots', 'name' => 'robots', 'value' => $article->id ? filter_var($article->robots, FILTER_VALIDATE_INT) : null])->append('</li><li>')->label($this->_language->get('text'), ['for' => 'text'])->textarea(['class' => 'rs-admin-js-auto-resize rs-admin-js-generate-keyword-input rs-admin-js-editor-textarea rs-admin-field-textarea', 'id' => 'text', 'name' => 'text', 'required' => 'required', 'value' => htmlspecialchars($article->text)])->append('</li></ul></fieldset>')->append('<fieldset id="tab-2" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('language'), ['for' => 'language'])->select(Helper\Option::getLanguageArray(), ['id' => 'language', 'name' => 'language', 'value' => $article->language])->append('</li><li>')->label($this->_language->get('template'), ['for' => 'template'])->select(Helper\Option::getTemplateArray(), ['id' => 'template', 'name' => 'template', 'value' => $article->template])->append('</li><li>')->label($this->_language->get('article_sibling'), ['for' => 'sibling'])->select(Helper\Option::getContentArray('articles', [intval($article->id)]), ['id' => 'sibling', 'name' => 'sibling', 'value' => intval($article->sibling)])->append('</li><li>')->label($this->_language->get('category'), ['for' => 'category'])->select(Helper\Option::getContentArray('categories'), ['id' => 'category', 'name' => 'category', 'value' => intval($article->category)])->append('</li></ul></fieldset>')->append('<fieldset id="tab-3" class="rs-admin-js-set-tab rs-admin-set-tab"><ul><li>')->label($this->_language->get('headline'), ['for' => 'headline'])->select(Helper\Option::getToggleArray(), ['id' => 'headline', 'name' => 'headline', 'value' => $article->id ? intval($article->headline) : 1])->append('</li><li>')->label($this->_language->get('byline'), ['for' => 'byline'])->select(Helper\Option::getToggleArray(), ['id' => 'byline', 'name' => 'byline', 'value' => $article->id ? intval($article->byline) : 1])->append('</li><li>')->label($this->_language->get('comments'), ['for' => 'comments'])->select(Helper\Option::getToggleArray(), ['id' => 'comments', 'name' => 'comments', 'value' => intval($article->comments)])->append('</li><li>')->label($this->_language->get('status'), ['for' => 'status'])->select(Helper\Option::getVisibleArray(), ['id' => 'status', 'name' => 'status', 'value' => $article->id ? intval($article->status) : 1])->append('</li><li>')->label($this->_language->get('rank'), ['for' => 'rank'])->number(['id' => 'rank', 'name' => 'rank', 'value' => $article->id ? intval($article->rank) : Db::forTablePrefix('articles')->max('rank') + 1])->append('</li>'); if ($this->_registry->get('groupsEdit')) { $formElement->append('<li>')->label($this->_language->get('access'), ['for' => 'access'])->select(Helper\Option::getAccessArray('groups'), ['id' => 'access', 'name' => 'access[]', 'multiple' => 'multiple', 'size' => count(Helper\Option::getAccessArray('groups')), 'value' => $article->access])->append('</li>'); } $formElement->append('<li>')->label($this->_language->get('date'), ['for' => 'date'])->datetime(['id' => 'date', 'name' => 'date', 'value' => $article->date ? $article->date : null])->append('</li></ul></fieldset></div>')->token()->cancel(); if ($article->id) { if ($this->_registry->get('articlesDelete')) { $formElement->delete(); } if ($this->_registry->get('articlesEdit')) { $formElement->save(); } } else { if ($this->_registry->get('articlesNew')) { $formElement->create(); } } /* collect output */ $output .= $titleElement . $formElement; $output .= Hook::trigger('adminArticleFormEnd'); return $output; }
/** * render the style * * @since 3.0.0 * * @return string */ public function render() { $output = null; /* html elements */ $styleElement = new Html\Element(); $styleElement->init('style'); /* collect inline */ if (self::$_inline) { $output .= $styleElement->copy()->text(self::$_inline); } $this->clear(); return $output; }
/** * render the meta * * @since 3.0.0 * * @return string */ public function render() { $output = null; /* html elements */ $metaElement = new Html\Element(); $metaElement->init('meta'); $collectionArray = self::$_collectionArray[self::$_namespace]; $collectionKeys = array_keys($collectionArray); $lastKey = end($collectionKeys); /* process collection */ foreach ($collectionArray as $key => $value) { $output .= $metaElement->copy()->attr($value); if ($key !== $lastKey) { $output .= PHP_EOL; } } $this->clear(); return $output; }
/** * render * * @since 2.2.0 * * @param mixed $file * @param array $optionArray * * @return string */ public static function render($file = null, $optionArray = []) { $output = null; /* device related images */ if (is_array($file)) { /* process source */ foreach ($file as $key => $value) { if (in_array($key, self::$_configArray['device']) && Registry::get('my' . ucfirst($key))) { $file = $value; } } } /* collect output */ if (file_exists($file)) { $imageElement = new Html\Element(); $imageElement->init('img', ['alt' => $optionArray['alt'], 'class' => self::$_configArray['className']['image'], 'src' => self::$_configArray['placeholder']]); /* collect image output */ $output = $imageElement->copy()->addClass($optionArray['className'])->attr('data-src', $file); /* placeholder */ if (self::$_configArray['placeholder']) { /* calculate image ratio */ $imageDimensions = getimagesize($file); $imageRatio = $imageDimensions[1] / $imageDimensions[0] * 100; /* placeholder */ $placeholderElement = new Html\Element(); $placeholderElement->init('div', ['class' => self::$_configArray['className']['placeholder'], 'style' => 'padding-bottom:' . $imageRatio . '%']); /* collect output */ $output = $placeholderElement->html($output); } /* noscript fallback */ $output .= '<noscript>' . $imageElement . '</noscript>'; } else { self::setNotification('error', Language::get('file_not_found') . Language::get('colon') . ' ' . $file . Language::get('point')); } return $output; }
/** * render * * @since 2.6.0 * * @param string $directory * @param array $options * * @return string */ public static function render($directory = null, $options = null) { $output = null; $outputDirectory = null; $outputFile = null; /* hash option */ if ($options['hash']) { $hashString = '#' . $options['hash']; } /* handle query */ $directoryQuery = Request::getQuery('d'); if ($directoryQuery && $directory !== $directoryQuery) { $pathFilter = new Filter\Path(); $directory = $pathFilter->sanitize($directoryQuery); $parentDirectory = $pathFilter->sanitize(dirname($directory)); } /* has directory */ if (is_dir($directory)) { /* html elements */ $linkElement = new Html\Element(); $linkElement->init('a', array('class' => self::$_config['className']['link'])); $textSizeElement = new Html\Element(); $textSizeElement->init('span', array('class' => self::$_config['className']['textSize'])); $textDateElement = new Html\Element(); $textDateElement->init('span', array('class' => self::$_config['className']['textDate'])); $listElement = new Html\Element(); $listElement->init('ul', array('class' => self::$_config['className']['list'])); /* list directory object */ $listDirectory = new Directory(); $listDirectory->init($directory); $listDirectoryArray = $listDirectory->getArray(); /* date format */ $dateFormat = Db::getSettings('date'); /* parent directory */ if (is_dir($parentDirectory)) { $outputDirectory .= '<li>'; $outputDirectory .= $linkElement->copy()->attr(array('href' => Registry::get('rewriteRoute') . Registry::get('fullRoute') . '&d=' . $parentDirectory . $hashString, 'title' => Language::get('directory_parent', '_directory_lister')))->addClass(self::$_config['className']['types']['directoryParent'])->text(Language::get('directory_parent', '_directory_lister')); $outputDirectory .= '</li>'; } /* process directory */ foreach ($listDirectoryArray as $key => $value) { $path = $directory . '/' . $value; $fileExtension = pathinfo($path, PATHINFO_EXTENSION); $text = $value; /* replace option */ if ($options['replace']) { foreach ($options['replace'] as $replaceKey => $replaceValue) { if ($replaceKey === self::$_config['replaceKey']['extension']) { $replaceKey = $fileExtension; } $text = str_replace($replaceKey, $replaceValue, $text); } } /* handle directory */ if (is_dir($path)) { $outputDirectory .= '<li>'; $outputDirectory .= $linkElement->copy()->attr(array('href' => Registry::get('rewriteRoute') . Registry::get('fullRoute') . '&d=' . $path . $hashString, 'title' => Language::get('directory', '_directory_lister')))->addClass(self::$_config['className']['types']['directory'])->text($text); $outputDirectory .= $textSizeElement->copy(); $outputDirectory .= $textDateElement->copy()->text(date($dateFormat, filectime($path))); $outputDirectory .= '</li>'; } else { if (is_file($path)) { if (array_key_exists($fileExtension, self::$_config['extension'])) { $fileType = self::$_config['extension'][$fileExtension]; $outputFile .= '<li>'; $outputFile .= $linkElement->copy()->attr(array('href' => $path, 'target' => '_blank', 'title' => Language::get('file', '_directory_lister')))->addClass(self::$_config['className']['types'][$fileType])->text($text); $outputFile .= $textSizeElement->copy()->attr('data-unit', self::$_config['size']['unit'])->html(ceil(filesize($path) / self::$_config['size']['divider'])); $outputFile .= $textDateElement->copy()->html(date($dateFormat, filectime($path))); $outputFile .= '</li>'; } } } } /* collect list output */ if ($outputDirectory || $outputFile) { $output = $listElement->html($outputDirectory . $outputFile); } } return $output; }
/** * parse the blockcode tag * * @since 2.6.0 * * @param string $content content to be parsed * * @return string */ protected function _parseBlockcode($content = null) { $output = str_replace($this->_tagArray['blockcode']['search'], $this->_optionArray['delimiter'], $content); $partArray = array_filter(explode($this->_optionArray['delimiter'], $output)); /* html elements */ $preElement = new Html\Element(); $preElement->init('pre', ['class' => $this->_optionArray['className']['blockcode']]); /* parse as needed */ foreach ($partArray as $key => $value) { if ($key % 2) { $partArray[$key] = $preElement->copy()->html(htmlspecialchars($value, null, null, false)); } } $output = implode($partArray); return $output; }
/** * renderItem * * @param string $directory * @param array $optionArray * * @return string */ protected static function _renderItem($directory = null, $optionArray = []) { $outputItem = null; /* html elements */ $linkElement = new Html\Element(); $linkElement->init('a', ['class' => self::$_configArray['className']['link']]); $textSizeElement = new Html\Element(); $textSizeElement->init('span', ['class' => self::$_configArray['className']['textSize']]); $textDateElement = new Html\Element(); $textDateElement->init('span', ['class' => self::$_configArray['className']['textDate']]); /* lister directory */ $listerDirectory = new Directory(); $listerDirectory->init($directory); $listerDirectoryArray = $listerDirectory->getArray(); /* process directory */ foreach ($listerDirectoryArray as $value) { $path = $directory . '/' . $value; $fileExtension = pathinfo($path, PATHINFO_EXTENSION); $text = self::_replace($value, $fileExtension, $optionArray['replace']); $textDate = date(Db::getSetting('date'), filectime($path)); $isDir = is_dir($path); $isFile = is_file($path) && array_key_exists($fileExtension, self::$_configArray['extension']); /* handle directory */ if ($isDir || $isFile) { $outputItem .= '<li>'; } if ($isDir) { $outputItem .= $linkElement->copy()->attr(['href' => Registry::get('parameterRoute') . Registry::get('fullRoute') . '&directory=' . $path . $optionArray['hash'], 'title' => Language::get('directory', '_directory_lister')])->addClass(self::$_configArray['className']['types']['directory'])->text($text); $outputItem .= $textSizeElement->copy(); } else { if ($isFile) { $fileType = self::$_configArray['extension'][$fileExtension]; $textSize = ceil(filesize($path) / self::$_configArray['size']['divider']); $outputItem .= $linkElement->copy()->attr(['href' => Registry::get('root') . '/' . $path, 'target' => '_blank', 'title' => Language::get('file', '_directory_lister')])->addClass(self::$_configArray['className']['types'][$fileType])->text($text); $outputItem .= $textSizeElement->copy()->attr('data-unit', self::$_configArray['size']['unit'])->text($textSize); } } if ($isDir || $isFile) { $outputItem .= $textDateElement->copy()->text($textDate); $outputItem .= '</li>'; } } return $outputItem; }
/** * testCopy * * @since 2.2.0 */ public function testCopy() { /* setup */ $element = new Html\Element(); $element->init('a'); $elementCopy = $element->copy()->attr('href', 'test'); /* expect and actual */ $expect = $element; $actual = $elementCopy; /* compare */ $this->assertNotEquals($expect, $actual); }
/** * renderItem * * @since 2.6.0 * * @param string $directory * @param array $optionArray * * @return string */ public static function _renderItem($directory = null, $optionArray = []) { $outputItem = null; /* html elements */ $imageElement = new Html\Element(); $imageElement->init('img', ['class' => self::$_configArray['className']['image']]); $linkElement = new Html\Element(); $linkElement->init('a'); /* gallery directory */ $galleryDirectory = new Directory(); $galleryDirectory->init($directory, [self::$_configArray['thumbDirectory']]); $galleryDirectoryArray = $galleryDirectory->getArray(); /* adjust order */ if ($optionArray['order'] === 'desc') { $galleryDirectoryArray = array_reverse($galleryDirectoryArray); } /* gallery data */ $galleryCounter = 0; $galleryTotal = count($galleryDirectoryArray); /* process directory */ foreach ($galleryDirectoryArray as $value) { $imagePath = $directory . '/' . $value; $thumbPath = $directory . '/' . self::$_configArray['thumbDirectory'] . '/' . $value; /* get image data */ $imageData = self::_getExifData($imagePath); /* collect item output */ $outputItem .= '<li>'; $outputItem .= $linkElement->copy()->attr(['href' => $imagePath, 'data-counter' => ++$galleryCounter, 'data-total' => $galleryTotal, 'data-artist' => array_key_exists('artist', $imageData) ? $imageData['artist'] : null, 'data-date' => array_key_exists('date', $imageData) ? $imageData['date'] : null, 'data-description' => array_key_exists('description', $imageData) ? $imageData['description'] : null])->html($imageElement->copy()->attr(['src' => $thumbPath, 'alt' => array_key_exists('description', $imageData) ? $imageData['description'] : $value])); $outputItem .= '</li>'; } return $outputItem; }
/** * create the option * * @since 2.6.0 * * @param array $optionArray options of the select * @param string $selected option to be selected * * @return string */ protected function _createOption($optionArray = array(), $selected = null) { $output = null; $optionElement = new Element(); $optionElement->init('option'); /* process option */ foreach ($optionArray as $key => $value) { $output .= $optionElement->copy()->attr(array('selected' => $value === $selected ? 'selected' : null, 'value' => $value))->text(is_string($key) ? $key : null); } return $output; }
/** * parse the codequote tag * * @since 2.6.0 * * @param string $input content be parsed * * @return string */ protected function _parseCodequote($input = null) { $output = str_replace($this->_tags['codequote']['search'], $this->_options['delimiter'], $input); $parts = array_filter(explode($this->_options['delimiter'], $output)); $preElement = new Html\Element(); $preElement->init('pre', array('class' => $this->_options['className']['codequote'])); /* parse needed parts */ foreach ($parts as $key => $value) { if ($key % 2) { $parts[$key] = $preElement->copy()->html(htmlspecialchars($value)); } } $output = implode($parts); return $output; }
/** * render * * @since 2.6.0 * * @param string $directory * @param array $options * * @return string */ public static function render($directory = null, $options = null) { $output = null; $outputItem = null; /* html elements */ $imageElement = new Html\Element(); $imageElement->init('img', array('class' => self::$_config['className']['image'])); $linkElement = new Html\Element(); $linkElement->init('a'); $listElement = new Html\Element(); $listElement->init('ul', array('class' => self::$_config['className']['list'])); /* gallery directory */ $galleryDirectory = new Directory(); $galleryDirectory->init($directory, self::$_config['thumbDirectory']); $galleryDirectoryArray = $galleryDirectory->getArray(); /* adjust order */ if ($options['order'] === 'desc') { $galleryDirectoryArray = array_reverse($galleryDirectoryArray); } /* gallery data */ $galleryCounter = 0; $galleryTotal = count($galleryDirectoryArray); $galleryId = uniqid('gallery-'); /* remove thumbs */ if ($options['command'] === 'remove' || !$galleryTotal) { $galleryDirectory->remove(self::$_config['thumbDirectory']); } else { /* process directory */ foreach ($galleryDirectoryArray as $key => $value) { $imagePath = $directory . '/' . $value; $thumbPath = $directory . '/' . self::$_config['thumbDirectory'] . '/' . $value; /* create thumbs */ if ($options['command'] === 'create' || !is_file($thumbPath)) { self::_createThumb($value, $directory, $options); } /* image data */ $imageData = self::_getImageData($imagePath); /* collect item output */ $outputItem .= '<li>'; $outputItem .= $linkElement->copy()->attr(array('href' => $imagePath, 'data-counter' => ++$galleryCounter, 'data-total' => $galleryTotal, 'data-id' => $galleryId, 'data-artist' => array_key_exists('artist', $imageData) ? $imageData['artist'] : null, 'data-date' => array_key_exists('date', $imageData) ? $imageData['date'] : null, 'data-description' => array_key_exists('description', $imageData) ? $imageData['description'] : null))->html($imageElement->copy()->attr(array('src' => $thumbPath, 'alt' => array_key_exists('description', $imageData) ? $imageData['description'] : null))); $outputItem .= '</li>'; } $output = $listElement->attr('id', $galleryId)->html($outputItem); } return $output; }
/** * send the mail * * @since 3.0.0 * * @param array $mailArray array of the mail * * @return boolean */ protected function _mail($mailArray = []) { $urlArticle = $this->_registry->get('root') . '/' . $this->_registry->get('parameterRoute') . $mailArray['route']; /* html elements */ $linkElement = new Html\Element(); $linkElement->init('a'); $linkEmail = $linkElement->copy(); $linkEmail->attr(['href' => 'mailto:' . $mailArray['email']])->text($mailArray['email']); $linkUrl = $linkElement->copy(); $linkUrl->attr(['href' => $mailArray['url']])->text($mailArray['url'] ? $mailArray['url'] : $this->_language->get('none')); $linkArticle = $linkElement->copy(); $linkArticle->attr(['href' => $urlArticle])->text($urlArticle); /* prepare mail */ $toArray = [$this->_language->get('author') => Db::getSetting('email')]; $fromArray = [$mailArray['author'] => $mailArray['email']]; $subject = $this->_language->get('comment_new'); $bodyArray = ['<strong>' . $this->_language->get('author') . $this->_language->get('colon') . '</strong> ' . $mailArray['author'], '<br />', '<strong>' . $this->_language->get('email') . $this->_language->get('colon') . '</strong> ' . $linkEmail, '<br />', '<strong>' . $this->_language->get('url') . $this->_language->get('colon') . '</strong> ' . $linkUrl . '<br />', '<br />', '<strong>' . $this->_language->get('article') . $this->_language->get('colon') . '</strong> ' . $linkArticle, '<br />', '<strong>' . $this->_language->get('comment') . $this->_language->get('colon') . '</strong> ' . $mailArray['text']]; /* send mail */ $mailer = new Mailer(); $mailer->init($toArray, $fromArray, $subject, $bodyArray); return $mailer->send(); }
/** * create the option * * @since 3.0.0 * * @param array $optionArray options of the select * @param mixed $selected option to be selected * * @return string */ protected function _createOption($optionArray = [], $selected = null) { $output = null; $optionElement = new Element(); $optionElement->init('option'); /* handle selected */ if (is_string($selected)) { $selected = array_filter(explode(', ', $selected)); } /* process options */ foreach ($optionArray as $key => $value) { if ($key || $value) { $output .= $optionElement->copy()->attr(['selected' => $value === $selected || in_array($value, $selected) ? 'selected' : null, 'value' => $value])->text(is_string($key) ? $key : $value); } } return $output; }