Merge branch 'template_support' into dev

This commit is contained in:
Michal Kváček
2016-09-20 20:17:06 +02:00
148 changed files with 890 additions and 5299 deletions
+4 -6
View File
@@ -1,8 +1,7 @@
APP_ENV=testing APP_ENV=
APP_DEBUG=true APP_DEBUG=
APP_KEY=ZKZAzM23wQ6BPji6zffBjaTzZ3yW7zKQ
DB_HOST=localhost DB_HOST=
DB_DATABASE= DB_DATABASE=
DB_USERNAME= DB_USERNAME=
DB_PASSWORD= DB_PASSWORD=
@@ -16,5 +15,4 @@ MAIL_PASSWORD=
SITE_URL=/ SITE_URL=/
UPLOAD_URL=/public/uploads UPLOAD_URL=/public/uploads
THUMBNAILS_URL=/uploads/thumbnails THUMBNAILS_URL=/uploads/thumbnails
THEME=
+3 -2
View File
@@ -1,8 +1,9 @@
# published files from modules # published files from modules
/resources/views/modules
/public/modules /public/modules
/resources/views/vendor
/public/assets /public/assets
/resources/views/modules
/resources/views/visitor
/resources/views/vendor
# directories with custom templates # directories with custom templates
**/views/**/custom/* **/views/**/custom/*
+74
View File
@@ -0,0 +1,74 @@
<?php
namespace App\Console\Commands;
use App\Models\Module;
use Illuminate\Console\Command;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class SetTemplate extends Command
{
/**
* The name and signature of the console command.
* @var string
*/
protected $signature = 'template:set {template}';
/**
* The console command description.
* @var string
*/
protected $description = 'Install template';
/**
* Execute the console command.
* @return mixed
*/
public function handle()
{
$template = $this->argument('template');
$templatePath = app_path('../templates/' . $template);
if (!is_dir($templatePath) || !file_exists($templatePath . '/config.php')) {
throw new NotFoundHttpException('Invalid template ' . $template . '!');
}
// try to find currently installed template
$current = Module::where('is_template', true)
->first();
// install template
$config = @include $templatePath . '/config.php';
$config['staticName'] = $template;
if ($current) {
$info = json_decode($current->module_settings);
$this->line('Template is already installed. Currently using template ' . trans($current->name) . ' located in /templates/' . $info->staticName.'.');
$confirm = $this->ask('Uninstall it and install *' . trans($config['name']) . '*? All data associated with installed template will be lost! [y/n]');
if ($confirm === 'y') {
$this->line('Uninstalling ' . $current->name . '.');
$current->uninstall();
} else {
$this->line('Aborting installation.');
return;
}
}
try {
Module::install($config['name'], $config['alias'], $config['description'], $config['handler'], false, $config);
} catch (\Exception $e) {
$this->error('Cannot install template ' . $template . '. Message: ' . $e->getMessage());
return;
}
// theme written
$this->line('Template successfully setup.');
$this->line('');
$this->line(' ** PUBLISHING ASSETS AND VIEWS **');
// publish assets and views for module and theme
$this->call('vendor:publish', ['--tag' => ['public-assets'], '--force' => true]);
$this->call('vendor:publish', ['--tag' => ['module-views'], '--force' => true]);
$this->call('vendor:publish');
}
}
-70
View File
@@ -1,70 +0,0 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Str;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class SetTheme extends Command
{
/**
* The name and signature of the console command.
* @var string
*/
protected $signature = 'theme:set {theme_name}';
/**
* The console command description.
* @var string
*/
protected $description = 'Set theme for visitor area';
/**
* Create a new command instance.
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
* @return mixed
*/
public function handle()
{
$theme = $this->argument('theme_name');
if (!is_dir(resource_path('views/visitor/' . $theme))) {
throw new NotFoundHttpException('Invalid theme ' . $theme . '!');
}
// load .env file
$envFile = base_path('.env');
$env = file_get_contents($envFile);
if (!Str::contains($env, 'THEME=')) {
$env = sprintf("%s\nTHEME=%s\n", $env, $theme);
} else {
$env = preg_replace('/THEME=(.*)/i', 'THEME=' . $theme, $env, -1, $cnt);
}
// try to write content
$bytesWritten = file_put_contents($envFile, $env);
// check if write was successfull
if (!$bytesWritten) {
throw new \Exception('Cannot write to ' . base_path('.env') . '. Add THEME=' . $theme . ' to your .env file manualy.');
}
// theme written
$this->line('Theme successfully setup.');
$this->line('');
$this->line(' ** PUBLISHING ASSETS AND VIEWS **');
// publish assets and views for module and theme
$this->call('vendor:publish', ['--tag' => ['public-assets'], '--force' => true]);
$this->call('vendor:publish', ['--tag' => ['module-views'], '--force' => true]);
$this->call('vendor:publish');
}
}
+1 -1
View File
@@ -21,7 +21,7 @@ class Kernel extends ConsoleKernel
Commands\Translations::class, Commands\Translations::class,
Commands\TranslateAll::class, Commands\TranslateAll::class,
Commands\InitDatabaseSchema::class, Commands\InitDatabaseSchema::class,
Commands\SetTheme::class, Commands\SetTemplate::class,
AddLanguage::class AddLanguage::class
]; ];
+1 -1
View File
@@ -5,7 +5,7 @@ use App\Models\User;
interface BaseModuleHandler interface BaseModuleHandler
{ {
public static function getModuleId(); // public static function getModuleId();
/** /**
* Register admin menu (or multiple ones) * Register admin menu (or multiple ones)
@@ -0,0 +1,64 @@
<?php
namespace App\Handlers\Contracts;
use App\Http\Requests\Request;
use App\Models\Content;
use App\Models\Module;
/**
* Interface TemplateHandler
*
* Inerface used for registering template into CMS core.
*
* @package App\Handlers\Contracts
*/
interface TemplateHandler extends BaseModuleHandler
{
/**
* Uninstall template
*
* Delete some items in database, delete files etc.
*
* @param Module $template
*/
public static function uninstall(Module $template);
/**
* Get list of registered templates and supported modules.
*
* Returned array is expected to be array of arrays with following items: module, namespace and templateName.
* Example:
* return [
* ['module' => 'Article', 'templateName' => 'article::template.name']
* ];
*
* When no "namespace" is specified, value strtolower(module) is used instaed.
*
* @return array
*/
public static function getPublicTemplatePaths();
/**
* Prepare Content object to be rendered using Blade template
*
* @param Content $content
*/
public static function beforeRender(Content & $content);
/**
* Modify input data into format which can be understood by edit template
*
* @param Content $content
*/
public static function beforePopulatingEditForm(Content & $content);
/**
* Slightly modify Content object before saving into database.
*
* This way we can do almost whatever we want - even in template
*
* @param Content $content
* @param Request $request
*/
public static function beforeSave(Content & $content, Request $request);
}
@@ -187,7 +187,6 @@ class TemplateRegistrator
$registeredTemplates = Templates::getWithTranslations(); $registeredTemplates = Templates::getWithTranslations();
if (!in_array($templateName, $registeredTemplates)) { if (!in_array($templateName, $registeredTemplates)) {
$params = [ $params = [
'template_name' => $templateName, 'template_name' => $templateName,
'name' => $templateName, 'name' => $templateName,
+22 -5
View File
@@ -13,7 +13,7 @@ class Template
* *
* @return null|string * @return null|string
*/ */
public static function name($template) public static function name($template, $throwExceptions = true)
{ {
$namespace = null; $namespace = null;
if (strpos($template, '::')) { if (strpos($template, '::')) {
@@ -21,10 +21,8 @@ class Template
$namespace .= '::'; $namespace .= '::';
} }
$theme = config('app.theme');
// list of prefixes // list of prefixes
$prefixes = [$theme . '.custom.', $theme . '.', '']; $prefixes = ['custom.', ''];
$view = null; $view = null;
foreach ($prefixes as $prefix) { foreach ($prefixes as $prefix) {
@@ -35,7 +33,11 @@ class Template
} }
if (is_null($view)) { if (is_null($view)) {
throw new InvalidArgumentException('Cannot find template for ' . $namespace . $template); if ($throwExceptions) {
throw new InvalidArgumentException('Cannot find template for ' . $namespace . $template);
} else {
return false;
}
} }
return $view; return $view;
@@ -59,6 +61,13 @@ class Template
return config('app.upload_url') . '/' . $filename; return config('app.upload_url') . '/' . $filename;
} }
/**
* Get path to given asset
*
* @param $path
*
* @return string
*/
public static function asset($path) public static function asset($path)
{ {
if (env('APP_DEBUG')) { if (env('APP_DEBUG')) {
@@ -75,6 +84,14 @@ class Template
return config('app.url') . '/assets/' . config('app.theme') . '/' . $path; return config('app.url') . '/assets/' . config('app.theme') . '/' . $path;
} }
/**
* Print date in configured format
*
* @param $datestamp
* @param bool $withTime
*
* @return false|string
*/
public static function date($datestamp, $withTime = true) public static function date($datestamp, $withTime = true)
{ {
$timestamp = strtotime($datestamp); $timestamp = strtotime($datestamp);
@@ -14,6 +14,7 @@ use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
use Modules\Categories\Entities\Category; use Modules\Categories\Entities\Category;
use Pingpong\Modules\Facades\Module as ModuleInstance; use Pingpong\Modules\Facades\Module as ModuleInstance;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class CreateNewContent extends Controller class CreateNewContent extends Controller
{ {
/** /**
@@ -87,6 +88,9 @@ class CreateNewContent extends Controller
public function postNew(CreateNewContentRequest $request, $moduleId) public function postNew(CreateNewContentRequest $request, $moduleId)
{ {
$page = new Content(); $page = new Content();
$template = Module::where('is_template', true)
->where('enabled', true)
->first();
try { try {
$module = Module::findOrFail($moduleId); $module = Module::findOrFail($moduleId);
} catch (NotFoundHttpException $e) { } catch (NotFoundHttpException $e) {
@@ -120,6 +124,10 @@ class CreateNewContent extends Controller
$page->title_photo = $file ? $file['filename'] : null; $page->title_photo = $file ? $file['filename'] : null;
// let template to modify request and content page
call_user_func_array([$template->handler, 'beforeSave'], [&$page, $request]);
// save module-specific stuff // save module-specific stuff
call_user_func_array([$module->handler, 'createNew'], [&$page, $request]); call_user_func_array([$module->handler, 'createNew'], [&$page, $request]);
+21 -5
View File
@@ -56,23 +56,32 @@ class EditContent extends Controller
$page = Content::findOrFail($id); $page = Content::findOrFail($id);
$page->module_settings = json_decode($page->module_settings); $page->module_settings = json_decode($page->module_settings);
$allModules = ModulesHandlerToId::getWithTranslations(); // select template
$moduleId = $allModules[$page->module_handler]; $template = Module::where('is_template', true)
$module = Module::findOrFail($moduleId); ->where('enabled', true)
->first();
// get module ID
$module = Module::where('handler', $page->module_handler)->firstOrFail();
$templates = Template::where('module_id', $moduleId) // get all Blade templates for rendering page
$templates = Template::where('module_id', $module->id)
->select(['template_name', 'name', 'description']) ->select(['template_name', 'name', 'description'])
->get(); ->get();
// get module for Categories - PingPong module
$categoryModule = ModuleInstance::get('categories'); $categoryModule = ModuleInstance::get('categories');
// add categories, if supported // add categories, if supported
$categories = []; $categories = [];
if ($module->support_categories && $categoryModule->enabled()) { if ($module->support_categories && $categoryModule->enabled()) {
$categories = Category::where('module_id', $moduleId) $categories = Category::where('module_id', $module->id)
->get(); ->get();
} }
// modify data for edit form according to installed template
call_user_func_array([$template->handler, 'beforePopulatingEditForm'], [&$page]);
$history = $this->history->getStructuredHistoryOf($page); $history = $this->history->getStructuredHistoryOf($page);
// render view // render view
@@ -107,6 +116,10 @@ class EditContent extends Controller
* @var $page Content * @var $page Content
*/ */
$page = Content::findOrFail($id); $page = Content::findOrFail($id);
$template = Module::where('is_template', true)
->where('enabled', true)
->first();
} catch (NotFoundHttpException $e) { } catch (NotFoundHttpException $e) {
// log attempt of invalid edit // log attempt of invalid edit
@@ -121,6 +134,9 @@ class EditContent extends Controller
// upload file - if provided // upload file - if provided
$file = $page->uploadTitlePhoto($request); $file = $page->uploadTitlePhoto($request);
// let template to modify request and content page
call_user_func_array([$template->handler, 'beforeSave'], [&$page, $request]);
$request->url = Str::slug($request->url); $request->url = Str::slug($request->url);
$request->parentPage = $request->parentPage ? $request->parentPage : null; $request->parentPage = $request->parentPage ? $request->parentPage : null;
@@ -79,6 +79,13 @@ class EditWidget extends Controller
// create new widget // create new widget
$widget = Widget::findOrFail($id); $widget = Widget::findOrFail($id);
// check if widget area is deletable
if (!$widget->deletable) {
return redirect()
->back()
->with('error', trans('admin/widgets.notDeletable'));
}
$widget->delete(); $widget->delete();
// redirect with success notification // redirect with success notification
@@ -3,7 +3,6 @@
namespace App\Http\Controllers\Admin; namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests;
use App\Http\Requests\EditWidgetAreaRequest; use App\Http\Requests\EditWidgetAreaRequest;
use App\Models\WidgetArea; use App\Models\WidgetArea;
use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Database\Eloquent\ModelNotFoundException;
@@ -61,6 +60,13 @@ class EditWidgetArea extends Controller
return $this->invalidArea(); return $this->invalidArea();
} }
// check if widget area is deletable
if (!$area->deletable) {
return redirect()
->back()
->with('error', trans('admin/widgetAreas.notDeletableArea'));
}
// delete area // delete area
$area->delete(); $area->delete();
@@ -5,6 +5,8 @@ namespace App\Http\Controllers\Visitor;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests; use App\Http\Requests;
use App\Models\Content; use App\Models\Content;
use App\Models\Module;
use App\Models\Template;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
class ContentPage extends Controller class ContentPage extends Controller
@@ -59,6 +61,11 @@ class ContentPage extends Controller
// get handler // get handler
$handler = new $page->module_handler; $handler = new $page->module_handler;
$template = Module::where('is_template', true)->where('enabled', true)->first();
// do something template-specific
call_user_func_array([$template->handler, 'beforeRender'], [&$page]);
// render page // render page
return $handler->render($page, ''); return $handler->render($page, '');
} }
+51 -3
View File
@@ -2,6 +2,7 @@
namespace App\Models; namespace App\Models;
use App\Handlers\Contracts\TemplateHandler;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\App;
@@ -20,7 +21,8 @@ class Module extends Model
'module_settings', 'module_settings',
'enabled', 'enabled',
'support_categories', 'support_categories',
'manages_content' 'manages_content',
'is_template'
]; ];
protected $guarded = []; protected $guarded = [];
@@ -45,6 +47,7 @@ class Module extends Model
} }
$managesContent = $handler ? in_array('App\Handlers\Contracts\AppHandler', class_implements($handler)) : false; $managesContent = $handler ? in_array('App\Handlers\Contracts\AppHandler', class_implements($handler)) : false;
$isTemplate = $handler ? in_array(TemplateHandler::class, class_implements($handler)) : false;
$supportCategories = $managesContent ? call_user_func([$handler, 'supportCategories']) : false; $supportCategories = $managesContent ? call_user_func([$handler, 'supportCategories']) : false;
if ($parentModuleId) { if ($parentModuleId) {
@@ -62,8 +65,9 @@ class Module extends Model
'support_categories' => $supportCategories, 'support_categories' => $supportCategories,
'alias' => $alias, 'alias' => $alias,
'module_settings' => json_encode($settings), 'module_settings' => json_encode($settings),
'parent_id' => $parentModuleId, 'parent_id' => $parentModuleId ? $parentModuleId : null,
'enabled' => 1 'enabled' => 1,
'is_template' => $isTemplate
]); ]);
// install something module-specific // install something module-specific
@@ -73,4 +77,48 @@ class Module extends Model
return $module; return $module;
} }
/**
* Delete module from database and uninstall its dependencies
*
* @throws \ErrorException
*/
public function uninstall()
{
// check if user does not want to install module in runtime
if (!App::runningInConsole()) {
throw new \ErrorException('Modules can be uninstalled only via Artisan!');
}
// delete everything in /resources/views/visitor
if ($this->is_template) {
$this->deleteDirectory(resource_path('views/visitor'));
$this->deleteDirectory(public_path('assets'));
// delete all template paths
TemplatePath::getQuery()->delete();
}
if ($this->handler && is_callable([$this->handler, 'uninstall'])) {
call_user_func([$this->handler, 'uninstall'], $this);
}
$this->delete();
}
/**
* Delete directory when uninstalling module.
*
* @param $directory
*
* @throws \ErrorException
*/
private function deleteDirectory($directory)
{
$success = \File::deleteDirectory($directory, true);
if (!$success) {
throw new \ErrorException('Cannot delete ' . $directory);
}
}
} }
+3 -44
View File
@@ -30,8 +30,6 @@ class AppServiceProvider extends ServiceProvider
{ {
// ignore running from artisan // ignore running from artisan
if (App::runningInConsole()) { if (App::runningInConsole()) {
$this->publishViewResources();
return; return;
} }
@@ -39,13 +37,6 @@ class AppServiceProvider extends ServiceProvider
$this->registerTemplates(); $this->registerTemplates();
$this->registerSettings(); $this->registerSettings();
$this->registerSearch(); $this->registerSearch();
// check if given template is valid
$theme = config('app.theme');
$themeDir = resource_path('views/visitor/' . $theme);
if (!$theme || empty($theme) || !is_dir($themeDir)) {
throw new InvalidArgumentException('No or invalid theme set! Use artisan theme:set or edit .env file manually and include THEME option, please');
}
} }
/** /**
@@ -120,10 +111,10 @@ class AppServiceProvider extends ServiceProvider
/** /**
* @var $registrator TemplateRegistrator * @var $registrator TemplateRegistrator
*/ */
$registrator = $this->app->make('registerTemplateDir'); // $registrator = $this->app->make('registerTemplateDir');
$registrator->setBaseDirectory('resources/views/visitor'); // $registrator->setBaseDirectory('resources/views/visitor');
$registrator->register(config('app.theme'), 'admin/templates.core'); // $registrator->register(config('app.theme'), 'admin/templates.core');
} }
/** /**
@@ -150,37 +141,5 @@ class AppServiceProvider extends ServiceProvider
$registrator->register(new Files(), new AdminFiles(), SearchEngineRegistrator::ADMIN); $registrator->register(new Files(), new AdminFiles(), SearchEngineRegistrator::ADMIN);
} }
/**
* Publish all public assets from all themes
*/
private function publishViewResources()
{
$theme = config('app.theme');
$themeDir = resource_path('views/visitor/' . $theme);
// publish assets if exists for current theme
if (is_dir($themeDir . '/' . Template::ASSETS_DIRECTORY)) {
$this->publishes([$themeDir . '/' . Template::ASSETS_DIRECTORY => public_path('assets/' . $theme)], 'public-assets');
}
if (is_dir($themeDir . '/' . Template::MODULES_DIRECTORY)) {
$this->publishModuleViews($themeDir . '/' . Template::MODULES_DIRECTORY);
}
}
private function publishModuleViews($themeModules)
{
$theme = config('app.theme');
$modules = File::directories($themeModules);
$moduleViews = [];
foreach ($modules as $module) {
$moduleName = strtolower(basename($module));
$moduleViews[$module] = resource_path('views/modules/' . $moduleName . '/visitor/' . $theme);
}
if (!empty($moduleViews)) {
$this->publishes($moduleViews, 'module-views');
}
}
} }
@@ -5,18 +5,13 @@ use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization; use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
use Symfony\Component\Translation\Translator;
class LaravelLocalizationServiceProvider extends ServiceProvider class LaravelLocalizationServiceProvider extends ServiceProvider
{ {
public function register() public function register()
{ {
try { $languages = DB::table('languages')
$languages = DB::table('languages') ->get();
->get();
} catch (\Exception $e) {
$languages = [];
}
$supportedLocales = []; $supportedLocales = [];
if (empty($languages)) { if (empty($languages)) {
@@ -28,11 +23,7 @@ class LaravelLocalizationServiceProvider extends ServiceProvider
]; ];
// create default language // create default language
try { Language::create($supportedLocales[config('app.locale')]);
Language::create($supportedLocales[config('app.locale')]);
} catch (\Exception $e) {
// ignore, table languages probably does not exist.
}
} }
foreach ($languages as $language) { foreach ($languages as $language) {
+3 -2
View File
@@ -21,7 +21,8 @@ class ModuleManager extends ServiceProvider
} }
// this service provider needs published config - config is merged right after this service provider // this service provider needs published config - config is merged right after this service provider
$modules = Module::get(); $modules = Module::where('is_template', false)
->get();
// iterate over all modules and enable or disable them // iterate over all modules and enable or disable them
foreach ($modules as $module) { foreach ($modules as $module) {
@@ -58,7 +59,7 @@ class ModuleManager extends ServiceProvider
// check if module config is writable // check if module config is writable
if (!is_writable(dirname($path))) { if (!is_writable(dirname($path))) {
Log::warning('Cannot write to '.$path); Log::warning('Cannot write to ' . $path);
return; return;
} }
+118
View File
@@ -0,0 +1,118 @@
<?php
namespace App\Providers;
use App\Handlers\Registrators\TemplateRegistrator;
use App\Models\Module;
use App\Models\Template;
use Illuminate\Support\Facades\App;
use Illuminate\Support\ServiceProvider;
use InvalidArgumentException;
class TemplateServiceProvider extends ServiceProvider
{
private function getTemplate()
{
// select template
$template = Module::where('is_template', true)
->where('enabled', true)
->first();
if ($template) {
$template->settings = json_decode($template->module_settings);
}
return $template;
}
public function boot()
{
// ignore running from artisan
if (App::runningInConsole()) {
$this->publishViewResources();
return;
}
$template = $this->getTemplate();
if (!$template) {
throw new \ErrorException('Template is not set, cannot continue');
}
// include files
$files = isset($template->settings->files) ? $template->settings->files : [];
foreach ($files as $file) {
include_once $file;
}
// register templates
$publicTemplates = call_user_func([$template->handler, 'getPublicTemplatePaths']);
if (!is_array($publicTemplates)) {
throw new \ErrorException($template->handler . '::getPublicTemplatePaths() must return array!');
}
if (empty($publicTemplates)) {
return;
}
/**
* @var $registrator TemplateRegistrator
*/
$registrator = $this->app->make('registerTemplateDir');
foreach ($publicTemplates as $template) {
// setup some global variables
$module = strtolower($template['module']);
$namespace = isset($template['namespace']) ? $template['namespace'] : strtolower($template['module']);
try {
$registrator->setBaseDirectory('resources/views/modules/' . $module);
$registrator->setNamespace($namespace);
$registrator->setModuleId(call_user_func([config($module . '.handler'), 'getModuleId']));
// register path with current template name
$registrator->register('visitor', $template['templateName']);
} catch (InvalidArgumentException $e) {
// ignore this exception
}
}
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
}
/**
* Publish all public assets from all themes
*/
private function publishViewResources()
{
$template = $this->getTemplate();
if (!$template) {
return;
}
$templateDir = app_path('../templates/' . $template->settings->staticName . '/Resources');
$assetsDir = $templateDir . '/' . Template::ASSETS_DIRECTORY;
$viewsDir = $templateDir . '/views';
// publish assets if exists for current theme
if (is_dir($assetsDir)) {
$this->publishes([$assetsDir => public_path('assets/visitor')], 'public-assets');
}
// publish base visitors views
$this->publishes([$viewsDir . '/visitor' => resource_path('views/visitor')], 'module-views');
// publish admin views
if (is_dir($viewsDir . '/modules')) {
$this->publishes([$viewsDir . '/modules' => resource_path('views/modules')], 'module-views');
}
}
}
+2 -1
View File
@@ -30,7 +30,8 @@
], ],
"psr-4": { "psr-4": {
"App\\": "app/", "App\\": "app/",
"Modules\\": "modules/" "Modules\\": "modules/",
"Templates\\": "templates/"
} }
}, },
"scripts": { "scripts": {
+77 -77
View File
@@ -129,49 +129,49 @@ return [
'providers' => [ 'providers' => [
/* /*
* Laravel Framework Service Providers... * Laravel Framework Service Providers...
*/ */
Illuminate\Auth\AuthServiceProvider::class, Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class, Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class, Illuminate\Mail\MailServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class, Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class, Illuminate\View\ViewServiceProvider::class,
Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider::class, Mcamara\LaravelLocalization\LaravelLocalizationServiceProvider::class,
// this class must be before ModulesServiceProvider from PingPong, because it handles files module.json // this class must be before ModulesServiceProvider from PingPong, because it handles files module.json
App\Providers\ModuleManager::class, App\Providers\ModuleManager::class,
Pingpong\Modules\ModulesServiceProvider::class, Pingpong\Modules\ModulesServiceProvider::class,
Pingpong\Menus\MenusServiceProvider::class, Pingpong\Menus\MenusServiceProvider::class,
App\Providers\SubmodulesManager::class, App\Providers\SubmodulesManager::class,
Franzose\ClosureTable\ClosureTableServiceProvider::class,
\Watson\Sitemap\SitemapServiceProvider::class,
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\GlobalViewDataProvider::class,
\App\Providers\TemplateServiceProvider::class,
Franzose\ClosureTable\ClosureTableServiceProvider::class, ],
\Watson\Sitemap\SitemapServiceProvider::class,
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\GlobalViewDataProvider::class,
],
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Class Aliases | Class Aliases
@@ -185,41 +185,41 @@ return [
'aliases' => [ 'aliases' => [
'App' => Illuminate\Support\Facades\App::class, 'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class, 'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class, 'Blade' => Illuminate\Support\Facades\Blade::class,
'Cache' => Illuminate\Support\Facades\Cache::class, 'Cache' => Illuminate\Support\Facades\Cache::class,
'Config' => Illuminate\Support\Facades\Config::class, 'Config' => Illuminate\Support\Facades\Config::class,
'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class,
'Crypt' => Illuminate\Support\Facades\Crypt::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class,
'DB' => Illuminate\Support\Facades\DB::class, 'DB' => Illuminate\Support\Facades\DB::class,
'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class,
'Event' => Illuminate\Support\Facades\Event::class, 'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class, 'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class, 'Gate' => Illuminate\Support\Facades\Gate::class,
'Hash' => Illuminate\Support\Facades\Hash::class, 'Hash' => Illuminate\Support\Facades\Hash::class,
'Lang' => Illuminate\Support\Facades\Lang::class, 'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class, 'Log' => Illuminate\Support\Facades\Log::class,
'Mail' => Illuminate\Support\Facades\Mail::class, 'Mail' => Illuminate\Support\Facades\Mail::class,
'Menu' => Pingpong\Menus\MenuFacade::class, 'Menu' => Pingpong\Menus\MenuFacade::class,
'Module' => Pingpong\Modules\Facades\Module::class, 'Module' => Pingpong\Modules\Facades\Module::class,
'Password' => Illuminate\Support\Facades\Password::class, 'Password' => Illuminate\Support\Facades\Password::class,
'Queue' => Illuminate\Support\Facades\Queue::class, 'Queue' => Illuminate\Support\Facades\Queue::class,
'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class,
'Redis' => Illuminate\Support\Facades\Redis::class, 'Redis' => Illuminate\Support\Facades\Redis::class,
'Request' => Illuminate\Support\Facades\Request::class, 'Request' => Illuminate\Support\Facades\Request::class,
'Response' => Illuminate\Support\Facades\Response::class, 'Response' => Illuminate\Support\Facades\Response::class,
'Route' => Illuminate\Support\Facades\Route::class, 'Route' => Illuminate\Support\Facades\Route::class,
'Schema' => Illuminate\Support\Facades\Schema::class, 'Schema' => Illuminate\Support\Facades\Schema::class,
'Session' => Illuminate\Support\Facades\Session::class, 'Session' => Illuminate\Support\Facades\Session::class,
'Sitemap' => Watson\Sitemap\Facades\Sitemap::class, 'Sitemap' => Watson\Sitemap\Facades\Sitemap::class,
'Storage' => Illuminate\Support\Facades\Storage::class, 'Storage' => Illuminate\Support\Facades\Storage::class,
'URL' => Illuminate\Support\Facades\URL::class, 'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class, 'Validator' => Illuminate\Support\Facades\Validator::class,
'LaravelLocalization' => Mcamara\LaravelLocalization\Facades\LaravelLocalization::class, 'LaravelLocalization' => Mcamara\LaravelLocalization\Facades\LaravelLocalization::class,
'View' => Illuminate\Support\Facades\View::class, 'View' => Illuminate\Support\Facades\View::class,
], ],
]; ];
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class SaveTemplatesIntoModulesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('modules', function (Blueprint $table){
$table->boolean('is_template')->default(false)->comment('Templates can be treated as modules.');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('modules', function (Blueprint $table){
$table->dropColumn('is_template');
});
}
}
@@ -0,0 +1,55 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddTemplateSupportToWidgets extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('widget_types', function (Blueprint $table) {
$table->integer('template_id')
->comment('Commes this widget with template?')
->after('handler')
->nullable(true)
->default(null);
$table->integer('module_id')
->comment('Commes this widget with some module?')
->after('template_id')
->nullable(true)
->default(null);
$table->foreign('template_id')
->references('id')
->on('modules')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('module_id')
->references('id')
->on('modules')
->onDelete('cascade')
->onUpdate('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('widget_types', function (Blueprint $table) {
$table->dropForeign('widget_types_module_id_foreign');
$table->dropForeign('widget_types_template_id_foreign');
$table->dropColumn(['template_id', 'module_id']);
});
}
}
@@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class MakeWidgetsAndWidgetAreasNotDeletable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('widgets', function (Blueprint $table) {
$table->boolean('deletable')
->default(true)
->comment('Can this widget be deleted?');
});
Schema::table('widget_areas', function (Blueprint $table) {
$table->boolean('deletable')
->default(true)
->comment('Can this widget area be deleted?');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('widgets', function (Blueprint $table) {
$table->dropColumn('deletable');
});
Schema::table('widget_areas', function (Blueprint $table) {
$table->dropColumn('deletable');
});
}
}
@@ -62,22 +62,6 @@ class ArticleServiceProvider extends ServiceProvider {
$this->loadViewsFrom(array_merge(array_map(function ($path) { $this->loadViewsFrom(array_merge(array_map(function ($path) {
return $path . '/modules/article'; return $path . '/modules/article';
}, \Config::get('view.paths')), [$sourcePath]), 'article'); }, \Config::get('view.paths')), [$sourcePath]), 'article');
/**
* @var $registrator TemplateRegistrator
*/
try {
// setup some global variables
$registrator = $this->app->make('registerTemplateDir');
$registrator->setBaseDirectory('resources/views/modules/article/visitor');
$registrator->setNamespace('article');
$registrator->setModuleId(Article::getModuleId());
// register path with current template name
$registrator->register(config('app.theme'), 'article::admin/adminMenu.templatePath');
} catch (InvalidArgumentException $e) {
// ignore this exception
}
} }
/** /**
@@ -62,22 +62,6 @@ class ContactFormServiceProvider extends ServiceProvider
$this->loadViewsFrom(array_merge(array_map(function ($path) { $this->loadViewsFrom(array_merge(array_map(function ($path) {
return $path . '/modules/contactform'; return $path . '/modules/contactform';
}, \Config::get('view.paths')), [$sourcePath]), 'contactform'); }, \Config::get('view.paths')), [$sourcePath]), 'contactform');
/**
* @var $registrator TemplateRegistrator
*/
$registrator = $this->app->make('registerTemplateDir');
try {
// setup some global variables
$registrator->setBaseDirectory('resources/views/modules/contactform/visitor');
$registrator->setNamespace('contactform');
$registrator->setModuleId(call_user_func([config('contactform.handler'), 'getModuleId']));
// register path with current template name
$registrator->register(config('app.theme'), 'contactform::admin/adminMenu.templatePath');
} catch (InvalidArgumentException $e) {
// ignore this exception
}
} }
/** /**
@@ -62,22 +62,6 @@ class GalleryServiceProvider extends ServiceProvider
$this->loadViewsFrom(array_merge(array_map(function ($path) { $this->loadViewsFrom(array_merge(array_map(function ($path) {
return $path.'/modules/gallery'; return $path.'/modules/gallery';
}, \Config::get('view.paths')), [$sourcePath]), 'gallery'); }, \Config::get('view.paths')), [$sourcePath]), 'gallery');
/**
* @var $registrator TemplateRegistrator
*/
$registrator = $this->app->make('registerTemplateDir');
try {
// setup some global variables
$registrator->setBaseDirectory('resources/views/modules/gallery/visitor');
$registrator->setNamespace('gallery');
$registrator->setModuleId(call_user_func([config('gallery.handler'), 'getModuleId']));
// register path with current template name
$registrator->register(config('app.theme'), 'gallery::admin/adminMenu.templatePath');
} catch (InvalidArgumentException $e) {
// ignore this exception
}
} }
/** /**
@@ -38,18 +38,6 @@ class StaticPagesServiceProvider extends ServiceProvider
{ {
} }
// /**
// * Method for installing module into database
// */
// protected function install()
// {
// $handler = config('staticpages.handler');
// $installedModules = ModulesHandlerToId::getWithTranslations();
// if (!isset($installedModules[$handler])) {
// Module::install('staticpages::module.name', 'staticpages', 'staticpages::module.description');
// }
// }
/** /**
* Register config. * Register config.
* *
@@ -69,30 +57,14 @@ class StaticPagesServiceProvider extends ServiceProvider
*/ */
public function registerViews() public function registerViews()
{ {
$viewPath = base_path('resources/views/modules/staticpages');
$sourcePath = __DIR__ . '/../Resources/views'; $sourcePath = __DIR__ . '/../Resources/views';
$viewPath = base_path('resources/views/modules/staticpages');
$this->publishes([$sourcePath => $viewPath], 'module-views'); $this->publishes([$sourcePath => $viewPath], 'module-views');
$this->loadViewsFrom(array_merge(array_map(function ($path) { $this->loadViewsFrom(array_merge(array_map(function ($path) {
return $path . '/modules/staticpages'; return $path . '/modules/staticpages';
}, \Config::get('view.paths')), [$sourcePath]), 'staticpages'); }, \Config::get('view.paths')), [$sourcePath]), 'staticpages');
/**
* @var $registrator TemplateRegistrator
*/
$registrator = $this->app->make('registerTemplateDir');
try {
// setup some global variables
$registrator->setBaseDirectory('resources/views/modules/staticpages/visitor');
$registrator->setNamespace('staticpages');
$registrator->setModuleId(call_user_func([config('staticpages.handler'), 'getModuleId']));
// register path with current template name
$registrator->register(config('app.theme'), 'staticpages::admin.templatePath');
} catch (InvalidArgumentException $e) {
// ignore this exception
}
} }
/** /**
+6
View File
@@ -1,17 +1,23 @@
<?php <?php
return [ return [
"actions" => "Akce", "actions" => "Akce",
"associateWidgets" => "Přiřadit widgety do této plochy",
"code" => "Unikátní kód (používá se v šablonách pro vykreslení)", "code" => "Unikátní kód (používá se v šablonách pro vykreslení)",
"createNew" => "Vytvořit novou plochu", "createNew" => "Vytvořit novou plochu",
"delete" => "Smazat",
"description" => "Popis", "description" => "Popis",
"edit" => "Upravuji plochu :name", "edit" => "Upravuji plochu :name",
"editButton" => "Upravit", "editButton" => "Upravit",
"editSuccessfull" => "Změny úspěšně uloženy", "editSuccessfull" => "Změny úspěšně uloženy",
"editTooltip" => "Upravit plochu pro widgety",
"invalidArea" => "Zvolená plocha pro widgety není platná. Vyberte prosím nějakou jinou.", "invalidArea" => "Zvolená plocha pro widgety není platná. Vyberte prosím nějakou jinou.",
"name" => "Jméno", "name" => "Jméno",
"new" => "Nová plocha pro widgety", "new" => "Nová plocha pro widgety",
"noEntries" => "Zatím nebyla definována žádná plocha pro widgety.", "noEntries" => "Zatím nebyla definována žádná plocha pro widgety.",
"notDeletableArea" => "Nelze smazat požadovanou plochu. Tato plocha je nezbytnou součástí nainstalované šablony a její odstranění by znefunkčnilo celou šablonu.",
"overview" => "Seznam všech ploch pro widgety", "overview" => "Seznam všech ploch pro widgety",
"save" => "Uložit",
"successfullyCreated" => "Plocha pro widgety úspěšně vytvořena", "successfullyCreated" => "Plocha pro widgety úspěšně vytvořena",
"successfullyDeleted" => "Úspěšně smazáno", "successfullyDeleted" => "Úspěšně smazáno",
"uniqueCode" => "Unikátní kód",
]; ];
+3
View File
@@ -6,13 +6,16 @@ return [
"associationExists" => "Tento widget již je přiřazený k této ploše pro widgety", "associationExists" => "Tento widget již je přiřazený k této ploše pro widgety",
"cannotSave" => "Nelze uložit widget. Došlo k nečekané vyjímce. Zpráva: :exception", "cannotSave" => "Nelze uložit widget. Došlo k nečekané vyjímce. Zpráva: :exception",
"createdAt" => "Vytvořeno", "createdAt" => "Vytvořeno",
"delete" => "Smazat",
"deleteAssociation" => "Odstranit", "deleteAssociation" => "Odstranit",
"description" => "Popis", "description" => "Popis",
"descriptionOfWidgets" => "Widgety se zobrazují v plochách pro widgety. Tyto plochy je možné umístit na libovolné místo na webu.", "descriptionOfWidgets" => "Widgety se zobrazují v plochách pro widgety. Tyto plochy je možné umístit na libovolné místo na webu.",
"edit" => "Upravit", "edit" => "Upravit",
"editTooltip" => "Upravit tento widget",
"missingValue" => "Nelze uložit bez hodnoty pro pole :field", "missingValue" => "Nelze uložit bez hodnoty pro pole :field",
"name" => "Jméno", "name" => "Jméno",
"noEntries" => "Není dostupný žádný widget.", "noEntries" => "Není dostupný žádný widget.",
"notDeletable" => "Nelze smazat widget. Smazání widgetu by melo za následek možné znefunkčnění celé šablony.",
"overview" => "Seznam všech widgetů", "overview" => "Seznam všech widgetů",
"preview" => "Náhled", "preview" => "Náhled",
"successfullyAssociated" => "Widget úspěšně vložen do plochy", "successfullyAssociated" => "Widget úspěšně vložen do plochy",
+54 -53
View File
@@ -1,56 +1,57 @@
<?php <?php
return [ return [
'status_deleted' => 'Deleted', 'status_deleted' => 'Deleted',
'status_draft' => 'Draft', 'status_draft' => 'Draft',
'status_protected' => 'Protected', 'status_protected' => 'Protected',
'status_public' => 'Public', 'status_public' => 'Public',
'new' => 'Create new :name', 'new' => 'Create new :name',
'category' => 'Category', 'category' => 'Category',
'edit' => 'Edit :name', 'edit' => 'Edit :name',
'editPlain' => 'Edit', 'editPlain' => 'Edit',
'content' => 'Page content', 'content' => 'Page content',
'save' => 'Save page', 'save' => 'Save page',
'basicInfo' => 'Basic information', 'basicInfo' => 'Basic information',
'metaOptions' => 'Meta information', 'metaOptions' => 'Meta information',
'publicationOptions' => 'Publication setup', 'publicationOptions' => 'Publication setup',
'field_title' => 'Page title', 'field_title' => 'Page title',
'field_url' => 'URL', 'field_url' => 'URL',
'field_meta_keywords' => 'Keywords', 'field_meta_keywords' => 'Keywords',
'field_meta_description' => 'Page description', 'field_meta_description' => 'Page description',
'field_published_from' => 'Published from', 'field_published_from' => 'Published from',
'field_published_to' => 'Published to', 'field_published_to' => 'Published to',
'successfullyCreated' => 'Page successfully created', 'successfullyCreated' => 'Page successfully created',
'noPagesAvailable' => 'No static pages available. Try to create one first.', 'noPagesAvailable' => 'No static pages available. Try to create one first.',
'viewPage' => 'View', 'viewPage' => 'View',
'deletePage' => 'Delete', 'deletePage' => 'Delete',
'makePublic' => 'Publish', 'makePublic' => 'Publish',
'makeProtected' => 'Logged users only', 'makeProtected' => 'Logged users only',
'makeDraft' => 'Make draft', 'makeDraft' => 'Make draft',
'invalidStatus' => 'Cannot change status to something undefined.', 'invalidStatus' => 'Cannot change status to something undefined.',
'statusChanged' => 'Status successfully changed.', 'statusChanged' => 'Status successfully changed.',
'invalidPage' => 'Specified page does not exist.', 'invalidPage' => 'Specified page does not exist.',
'pageDeleted' => 'Page :name (:url) successfully deleted.', 'pageDeleted' => 'Page :name (:url) successfully deleted.',
'nothingToEdit' => 'You did not submit any changes. Nothing was edited.', 'nothingToEdit' => 'You did not submit any changes. Nothing was edited.',
'successfullyEdited' => 'Edit successfull', 'successfullyEdited' => 'Edit successfull',
'showHistory' => 'History (:count)', 'showHistory' => 'History (:count)',
'appearance' => 'Appearance', 'appearance' => 'Appearance',
'template' => 'Template of this page', 'template' => 'Template of this page',
'overview' => 'List of all content pages', 'overview' => 'List of all content pages',
'homepageSetup' => 'Homepage successfully set up.', 'homepageSetup' => 'Homepage successfully set up.',
'setHomepage' => 'Set page as homepage', 'setHomepage' => 'Set page as homepage',
'noParentPage' => ' -- No parent page -- ', 'noParentPage' => ' -- No parent page -- ',
'uploadTitleImage' => 'Upload title image', 'uploadTitleImage' => 'Upload title image',
'noHomepage' => 'You have not set up your homepage yet, or your current homepage is draft! Try to select another one.', 'noHomepage' => 'You have not set up your homepage yet, or your current homepage is draft! Try to select another one.',
'homepageProtected' => 'Your homepage is displayed only for logged in users. This may or may not be an error.', 'homepageProtected' => 'Your homepage is displayed only for logged in users. This may or may not be an error.',
'parentPage' => 'Parent page', 'parentPage' => 'Parent page',
'alreadyHomepage' => 'Homepage', 'alreadyHomepage' => 'Homepage',
'files' => 'Files', 'files' => 'Files',
'lockUrl' => 'Keep URL', 'lockUrl' => 'Keep URL',
'noCategory' => ' -- No category -- ', 'noCategory' => ' -- No category -- ',
'noTemplates' => 'Cannot create content page. There are no available templates for this module.', 'noTemplates' => 'Cannot create content page. There are no available templates for this module.',
'title' => 'Title', 'title' => 'Title',
'createdAt' => 'Created at', 'createdAt' => 'Created at',
'status' => 'Status', 'status' => 'Status',
'moduleName' => 'Module', 'moduleName' => 'Module',
'actions' => 'Actions' 'actions' => 'Actions',
'invalidTemplateSelected' => 'Invalid template selected! This page cannot be rendered!'
]; ];
+5 -1
View File
@@ -13,7 +13,11 @@ return [
'actions' => 'Actions', 'actions' => 'Actions',
'noEntries' => 'No widget areas defined yet. Try to create some first.', 'noEntries' => 'No widget areas defined yet. Try to create some first.',
'editButton' => 'Edit', 'editButton' => 'Edit',
'save' => 'Save', 'save' => 'Save',
'edit' => 'Editing widget area :name', 'edit' => 'Editing widget area :name',
'editTooltip' => 'Edit widget area',
'associateWidgets' => 'Associate widgets with this widget area',
'delete' => 'Delete widget area',
'notDeletableArea' => 'Cannot delete desired widget area. This area is essential part of installed template and therefore cannot be deleted.',
'editSuccessfull' => 'Successfully edited' 'editSuccessfull' => 'Successfully edited'
]; ];
+4 -1
View File
@@ -23,5 +23,8 @@ return [
'successfullyDeassociated' => 'Successfully removed from widget area', 'successfullyDeassociated' => 'Successfully removed from widget area',
'widgetExists' => 'Widget :id already exists.', 'widgetExists' => 'Widget :id already exists.',
'descriptionOfWidgets' => 'Widgets are displayed in widget areas.', 'descriptionOfWidgets' => 'Widgets are displayed in widget areas.',
'successfullyDeleted' => 'Widget successfully deleted' 'successfullyDeleted' => 'Widget successfully deleted',
'delete' => 'Delete',
'editTooltip' => 'Edit this widget',
'notDeletable' => 'Cannot delete this widget. It is essential part of currenty installed template and therefore cannot be deleted.'
]; ];
@@ -4,6 +4,12 @@
@section('content') @section('content')
@if(!count($templates))
<div class="alert alert-warning">
@lang('admin/contents.noTemplates')
</div>
@endif
<form method="POST" enctype="multipart/form-data" action="{{route('content.editPost', ['pageId' => $page->id])}}"> <form method="POST" enctype="multipart/form-data" action="{{route('content.editPost', ['pageId' => $page->id])}}">
{!! csrf_field() !!} {!! csrf_field() !!}
@@ -35,11 +35,17 @@
<div class="row p-tb-15"> <div class="row p-tb-15">
<div class="col-md-1 hidden-sm-down text-center with-placeholder"> <div class="col-md-1 hidden-sm-down text-center with-placeholder">
<a href="{{route('content.edit', ['id' => $page->id])}}"> <a href="{{route('content.edit', ['id' => $page->id])}}">
@if(!empty($page->title_photo)) @if(!view()->exists(\App\Helpers\Template::name($page->template, false)))
<img src="@upload($page->title_photo)" class="placeholder" alt="{{$page->title}}" /> <i class="fa fa-2x text-warning fa-warning" data-toggle="tooltip"
title="@lang('admin/contents.invalidTemplateSelected')"></i>
@else @else
<img src="{{asset('resources/assets/admin/img/placeholder.png')}}" class="placeholder" @if(!empty($page->title_photo))
alt="{{$page->title}}" /> <img src="@upload($page->title_photo)" class="placeholder" alt="{{$page->title}}" />
@else
<img src="{{asset('resources/assets/admin/img/placeholder.png')}}"
class="placeholder"
alt="{{$page->title}}" />
@endif
@endif @endif
</a> </a>
</div> </div>
@@ -71,14 +77,16 @@
@if(!$page->is_homepage) @if(!$page->is_homepage)
<li> <li>
<a href="{{route('content.setHomepage', ['id' => $page->id])}}" data-toggle="tooltip" title="@lang('admin/contents.setHomepage')"> <a href="{{route('content.setHomepage', ['id' => $page->id])}}"
data-toggle="tooltip" title="@lang('admin/contents.setHomepage')">
<i class="fa fa-home"></i> <i class="fa fa-home"></i>
</a> </a>
</li> </li>
@endif @endif
<li> <li>
<a class="edit" href="{{route('content.edit', ['id' => $page->id])}}" data-toggle="tooltip" title="@lang('admin/contents.editPlain')"> <a class="edit" href="{{route('content.edit', ['id' => $page->id])}}"
data-toggle="tooltip" title="@lang('admin/contents.editPlain')">
<i class="fa fa-pencil"></i> <i class="fa fa-pencil"></i>
</a> </a>
</li> </li>
@@ -86,7 +94,8 @@
@if($page->status == \App\Models\Content::STATUS_DRAFT) @if($page->status == \App\Models\Content::STATUS_DRAFT)
<li> <li>
<a href="{{route('content.changeStatus', ['id' => $page->id, 'status' => \App\Models\Content::STATUS_PUBLIC])}}" <a href="{{route('content.changeStatus', ['id' => $page->id, 'status' => \App\Models\Content::STATUS_PUBLIC])}}"
class="confirm" data-toggle="tooltip" title="@lang('admin/contents.makePublic')"> class="confirm" data-toggle="tooltip"
title="@lang('admin/contents.makePublic')">
<i class="fa fa-eye"></i> <i class="fa fa-eye"></i>
</a> </a>
</li> </li>
@@ -115,7 +124,8 @@
<li> <li>
<a href="{{route('content.delete', ['id' => $page->id])}}" <a href="{{route('content.delete', ['id' => $page->id])}}"
class="button tiny alert remove confirm" data-toggle="tooltip" title="@lang('admin/contents.deletePage')"><i class="button tiny alert remove confirm" data-toggle="tooltip"
title="@lang('admin/contents.deletePage')"><i
class="fa fa-trash-o"></i> class="fa fa-trash-o"></i>
</a> </a>
</li> </li>
@@ -27,18 +27,24 @@
<div class="item-actions-block"> <div class="item-actions-block">
<ul class="item-actions-list"> <ul class="item-actions-list">
<li> <li>
<a class="edit" href="{{route('widgetareas.edit', ['id' => $area->id])}}"><i <a class="edit" data-toggle="tooltip"
title="@lang('admin/widgetAreas.editTooltip')"
href="{{route('widgetareas.edit', ['id' => $area->id])}}"><i
class="fa fa-pencil"></i></a> class="fa fa-pencil"></i></a>
</li> </li>
<li> <li>
<a href="{{route('widgets.associate', ['widgetArea' => $area->id])}}"><i <a href="{{route('widgets.associate', ['widgetArea' => $area->id])}}"
class="fa fa-plus"></i></a> data-toggle="tooltip"
</li> title="@lang('admin/widgetAreas.associateWidgets')">
<li> <i class="fa fa-plus"></i></a>
<a class="confirm remove"
href="{{route('widgetareas.delete', ['id' => $area->id])}}"><i
class="fa fa-trash"></i></a>
</li> </li>
@if($area->deletable)
<li>
<a class="confirm remove" data-toggle="tooltip" title="@lang('admin/widgetAreas.delete')"
href="{{route('widgetareas.delete', ['id' => $area->id])}}"><i
class="fa fa-trash"></i></a>
</li>
@endif
</ul> </ul>
</div> </div>
@@ -4,31 +4,58 @@
@section('pageDescription', @trans('admin/widgets.descriptionOfWidgets')) @section('pageDescription', @trans('admin/widgets.descriptionOfWidgets'))
@section('content') @section('content')
@if (count($widgets)) @if (count($widgets))
<table class="table table-striped full-width"> <table class="table table-striped item-list">
<tr> <tr>
<th>@lang('admin/widgets.widgetType')</th> <th>@lang('admin/widgets.widgetType')</th>
<th>@lang('admin/widgets.name')</th> <th>@lang('admin/widgets.name')</th>
<th>@lang('admin/widgets.description')</th> <th>@lang('admin/widgets.description')</th>
<th>@lang('admin/widgets.actions')</th> <th>@lang('admin/widgets.actions')</th>
</tr> </tr>
@foreach($widgets as $widget) @foreach($widgets as $widget)
<tr> <tr>
<td>{{trans(call_user_func([$widget->widget_type_handler, 'getName']))}}</td> <td>{{trans(call_user_func([$widget->widget_type_handler, 'getName']))}}</td>
<td><a href="{{route('widgets.edit', ['id' => $widget->id])}}">{{$widget->name}}</a></td> <td><a href="{{route('widgets.edit', ['id' => $widget->id])}}">{{$widget->name}}</a></td>
<td>{{$widget->description}}</td> <td>{{$widget->description}}</td>
<td class="text-center"> <td class="text-center">
<a href="{{route('widgets.edit', ['id' => $widget->id])}}"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{{route('widgets.delete', ['id' => $widget->id])}}"><i class="fa fa-fw remove fa-trash"></i></a>
<div class="item-actions-dropdown">
<a class="item-actions-toggle-btn">
<span class="inactive"><i class="fa fa-cog"></i></span>
<span class="active"><i class="fa fa-chevron-circle-right"></i></span>
</a>
<div class="item-actions-block">
<ul class="item-actions-list">
<li>
<a class="edit" data-toggle="tooltip"
title="@lang('admin/widgets.editTooltip')"
href="{{route('widgets.edit', ['id' => $widget->id])}}"><i
class="fa fa-pencil"></i></a>
</li>
@if($widget->deletable)
<li>
<a class="confirm remove" data-toggle="tooltip"
title="@lang('admin/widgets.delete')"
href="{{route('widgets.delete', ['id' => $widget->id])}}"><i
class="fa fa-trash"></i></a>
</li>
@endif
</ul>
</div>
</div>
</td> </td>
</tr> </tr>
@endforeach @endforeach
</table> </table>
{!! $widgets->render() !!} {!! $widgets->render() !!}
@else @else
<div class="alert alert-info"> <div class="alert alert-info">
<em>@lang('admin/widgets.noEntries')</em> <em>@lang('admin/widgets.noEntries')</em>
</div> </div>
@endif @endif
@stop @stop
@@ -1,58 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/actionLog.overview'))
@section('content')
<div class="row">
<h2>@lang('admin/actionLog.overview')</h2>
</div>
<div class="row" data-equalizer>
@if (!empty($actions))
<ul class="accordion" data-accordion>
@foreach($actions as $action)
<li class="accordion-item" data-accordion-item>
<a class="accordion-title">
<img src="{{\App\Helpers\Gravatar::img($action->email, 20)}}" alt="{{$action->email}}" />
<strong>{{$action->name}}</strong>
{{date('d.m.Y', strtotime($action->created_at))}}
</a>
<div class="accordion-content" data-tab-content>
<div class="row">
<div class="column large-1 text-center">
<img src="{{\App\Helpers\Gravatar::img($action->email, 70)}}"
alt="{{$action->email}}" />
<p>
{{$action->user_name}}<br />
{{date('G:i', strtotime($action->created_at))}}</p>
</div>
<div class="column large-11">
<div class="row column">
{{$action->value}}
</div>
<div class="clearfix"></div>
<div class="row column">
<p>
<strong>@lang('admin/actionLog.ip')</strong>: {{$action->ip}},
<br />
<strong>@lang('admin/actionLog.userAgent')</strong>: {{$action->user_agent}}
</p>
</div>
</div>
</div>
</div>
</li>
@endforeach
</ul>
@else
<em>@lang('admin/userManagement.noActions')</em>
@endif
</div>
<div class="row pagination">
{!! $actions->render() !!}
</div>
@stop
@@ -1,14 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/contents.edit', ['name' => e($page->title)]))
@section('content')
<div class="row">
<h2>@lang('admin/contents.edit', ['name' => e($page->title)])</h2>
</div>
<div class="row">
@include('admin.content.editForm')
</div>
@stop
@@ -1,33 +0,0 @@
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
<form method="POST" enctype="multipart/form-data" action="{{route('content.editPost', ['pageId' => $page->id])}}">
{!! csrf_field() !!}
@include('admin.content.formInputs')
<div class="row">
<div class="columns large-6">
<button type="submit" class="button success">@lang('admin/contents.edit', ['name' => $page->title])</button>
</div>
@if ($historySize > 0)
<div class="columns text-right large-6">
<a class="button warning" href="{{route('content.history', ['id' => $page->id])}}">@lang('admin/contents.showHistory', ['count' => $historySize])</a>
</div>
@endif
</div>
</form>
@section('javascripts')
@include('admin.snippets.ckEditor', ['textareaId' => 'pageContent'])
@stop
@@ -1,17 +0,0 @@
<ul class="tabs" data-tabs id="static-page-controls">
@foreach($formSectionNames as $section => $sectionName)
<li class="tabs-title @if($sectionName == reset($formSectionNames)) is-active @endif">
<a href="#{{$section}}" @if($sectionName == reset($formSectionNames)) aria-selected="true" @endif>
{{trans($sectionName)}}
</a>
</li>
@endforeach
</ul>
<div class="tabs-content" data-tabs-content="static-page-controls">
@foreach($formSections as $section => $view)
<div class="tabs-panel @if($view == reset($formSections)) is-active @endif" id="{{$section}}">
@include($view)
</div>
@endforeach
</div>
@@ -1,50 +0,0 @@
@if($page->title_photo)
<div class="row">
<div class="column large-12 title-photo text-center">
<img src="{{config('app.upload_url')}}/{{$page->title_photo}}" alt="" />
</div>
</div>
@endif
<div class="row">
<div class="column large-12">
<label>
@lang('admin/contents.uploadTitleImage')
<input type="file" id="titlePhoto" name="titlePhoto" />
</label>
@if (isset($errors) && $errors->has('titlePhoto'))
<div class="callout alert">
{{ $errors->first('titlePhoto') }}
</div>
@endif
</div>
</div>
<div class="row">
<div class="columns large-12">
<label>
@lang('admin/contents.template')
<select name="template">
@foreach($templates as $template)
<option value="{{$template->template_name}}"
@if(old('template', $page->template) == $template->template_name) selected @endif>
{{$template->name}}
@if($template->description != '')
- {{str_limit($template->description, 60)}}
@endif
</option>
@endforeach
</select>
@if (isset($errors) && $errors->has('template'))
<div class="callout alert">
{{ $errors->first('template') }}
</div>
@endif
</label>
</div>
</div>
@@ -1,103 +0,0 @@
<div class="row">
<div class="columns large-6">
<label>
@lang('admin/contents.field_title')
<input type="text" name="title" class="slug-source" placeholder="@lang('admin/contents.field_title')"
value="{{old('title', $page->title)}}" />
</label>
</div>
<div class="columns large-4">
<label>
@lang('admin/contents.field_url')
<input type="text" name="url" class="slug-target" placeholder="@lang('admin/contents.field_url')"
value="{{old('url', $page->url)}}" />
@if (isset($errors) && $errors->has('url'))
<div class="callout alert">
{{ $errors->first('url') }}
</div>
@endif
</label>
</div>
<div class="column large-2 text-center">
<label>
@lang('admin/contents.lockUrl')<br />
<input type="checkbox" value="1" id="lockUrl"
@if(old('lockUrl') || ($page->id > 0 && \Illuminate\Support\Str::slug($page->title) != $page->url)) checked
@endif name="lockUrl" />
</label>
</div>
</div>
<div class="row">
<div class="columns large-6">
<label>
<select name="status">
@foreach($contentStatuses as $status => $translation)
<option value="{{$status}}" @if(old('status', $page->status) == $status) selected @endif>
{{$translation}}
</option>
@endforeach
</select>
</label>
@if (isset($errors) && $errors->has('status'))
<div class="callout alert">
{{ $errors->first('status') }}
</div>
@endif
</div>
<div class="column large-6">
<label>
<select name="parentPage">
<option value="">@lang('admin/contents.noParentPage')</option>
@foreach($rootPages as $rootPage)
<option value="{{$rootPage->id}}"
@if(old('parent_page', $page->parent_id) == $rootPage->id) selected @endif>
{{$rootPage->title}}
</option>
@endforeach
</select>
</label>
@if (isset($errors) && $errors->has('parentPage'))
<div class="callout alert">
{{ $errors->first('parentPage') }}
</div>
@endif
</div>
@if($module->support_categories && count($categories))
<div class="column large-12">
<label>
@lang('admin/contents.category')
<select name="category">
<option value=""> ---</option>
@foreach($categories as $category)
<option value="{{$category->id}}"
@if($category->id == old('category', $page->category_id)) selected @endif>
{{str_repeat(' - ', $category->real_depth)}} {{$category->name}}
</option>
@endforeach
</select>
</label>
</div>
@endif
</div>
<div class="row">
<div class="columns large-12">
<label>
<textarea name="pageContent" id="pageContent" class="wysiwyg-editor">
{{old('pageContent', $page->content)}}
</textarea>
</label>
</div>
</div>
@@ -1,20 +0,0 @@
<div class="row">
@if(count($page->files))
<div class="column large-6">
<ul>
@foreach($page->files as $file)
<li><label><input type="checkbox" name="keepAssigned[{{$file->id}}]" checked /> {{$file->original_filename}}</label></li>
@endforeach
</ul>
</div>
@endif
<div class="columns large-6">
<label>
@lang('admin/contents.files')
<input type="file" name="files[]" multiple />
</label>
</div>
</div>
@@ -1,18 +0,0 @@
<div class="row">
<div class="columns large-12">
<label>
@lang('admin/contents.field_meta_keywords')
<input type="text" name="metaKeywords" value="{{old('meta_keywords', $page->meta_keywords)}}" placeholder="@lang('admin/contents.field_meta_keywords')" />
</label>
</div>
</div>
<div class="row">
<div class="columns large-12">
<label>
@lang('admin/contents.field_meta_description')
<textarea name="metaDescription" placeholder="@lang('admin/contents.field_meta_description')" rows="5">{{old('meta_description', $page->meta_description)}}</textarea>
</label>
</div>
</div>
@@ -1,31 +0,0 @@
<div class="row">
<div class="columns large-6">
<label>
@lang('admin/contents.field_published_from')
<input type="datetime" name="published_from" value="{{old('published_from', $page->published_from)}}"
placeholder="@lang('admin/contents.field_published_from')" />
@if (isset($errors) && $errors->has('published_from'))
<div class="callout alert">
{{ $errors->first('published_from') }}
</div>
@endif
</label>
</div>
<div class="columns large-6">
<label>
@lang('admin/contents.field_published_to')
<input type="datetime" name="published_to" value="{{old('published_to', $page->published_to)}}"
placeholder="@lang('admin/contents.field_published_to')" />
@if (isset($errors) && $errors->has('published_to'))
<div class="callout alert">
{{ $errors->first('published_to') }}
</div>
@endif
</label>
</div>
</div>
@@ -1,14 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/contents.new', ['name' => $moduleName]))
@section('content')
<div class="row">
<h2>@lang('admin/contents.new', ['name' => $moduleName])</h2>
</div>
<div class="row">
@include('admin.content.newForm')
</div>
@stop
@@ -1,27 +0,0 @@
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
<form method="POST" enctype="multipart/form-data" action="{{route('content.newPost', ['moduleId' => $moduleId])}}">
{!! csrf_field() !!}
@include('admin.content.formInputs')
<div class="row">
<div class="columns large-12">
<button type="submit" class="button success">@lang('admin/contents.save')</button>
</div>
</div>
</form>
@section('javascripts')
@include('admin.snippets.ckEditor', ['textareaId' => 'pageContent'])
@stop
@@ -1,39 +0,0 @@
@extends('admin/layout')
@section('content')
<div class="row">
<h1>@lang('admin/contents.overview')</h1>
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
</div>
@if (!$homepage)
<div class="row">
<div class="callout alert">
<strong>@lang('admin/contents.noHomepage')</strong>
</div>
</div>
@elseif(!$homepage->isPublic())
<div class="row">
<div class="callout warning">
<strong>@lang('admin/contents.homepageProtected')</strong>
</div>
</div>
@endif
@include('admin.content.overviewTiles')
<div class="row">
{!! $pages->render() !!}
</div>
@stop
@@ -1,83 +0,0 @@
@forelse($pages as $page)
<div class="page callout page {{$page->status}} row">
<div class="row column">
@if ($page->parent_id && $page->parent_url)
<span class="parent">
@lang('admin/contents.parentPage'):
<a href="{{route('content.edit', ['id' => $page->parent_id])}}">{{$page->parent_title}}</a>,
</span>
@endif
<span class="author">{{$page->author_name}}</span>,
<span class="date">{{date('d.m.Y', strtotime($page->created_at))}}</span>
</div>
<div class="column large-1">
@if ($page->title_photo)
<a href="{{route('content.edit', ['id' => $page->id])}}">
<img src="@upload($page->title_photo)" class="float-left" alt="" />
</a>
@endif
</div>
<div class="column large-8">
<h4>
<a href="{{route('content.edit', ['id' => $page->id])}}">
{{$page->title}}
<small>(@lang($page->module_name))</small>
</a>
</h4>
<p class="perex">
@if (trim($page->meta_description))
{{str_limit($page->meta_description)}}
@else
{{str_limit(strip_tags($page->content))}}
@endif
</p>
</div>
<div class="controls column float-right large-3">
@if($page->is_homepage)
<a class="button tiny disabled">
<i class="fa fa-home"></i>
@lang('admin/contents.alreadyHomepage')
</a>
@else
<a href="{{route('content.setHomepage', ['id' => $page->id])}}"
class="button tiny success">
<i class="fa fa-home"></i>
@lang('admin/contents.setHomepage')
</a>
@endif
<a href="{{route('content.edit', ['id' => $page->id])}}" class="button tiny success">
<i class="fa fa-edit"></i>
@lang('admin/contents.editPlain')
</a>
@if($page->status == \App\Models\Content::STATUS_DRAFT)
<a href="{{route('content.changeStatus', ['id' => $page->id, 'status' => \App\Models\Content::STATUS_PUBLIC])}}"
class="button tiny success confirm">
<i class="fa fa-eye"></i> @lang('admin/contents.makePublic')</a>
<a href="{{route('content.changeStatus', ['id' => $page->id, 'status' => \App\Models\Content::STATUS_PROTECTED])}}"
class="button tiny warning confirm">
<i class="fa fa-lock"></i> @lang('admin/contents.makeProtected')</a>
@else
<a href="{{route('page.content', ['url' => $page->url])}}" target="_blank"
class="button tiny secondary"><i
class="fa fa-desktop"></i> @lang('admin/contents.viewPage')</a>
<a href="{{route('content.changeStatus', ['id' => $page->id, 'status' => \App\Models\Content::STATUS_DRAFT])}}"
class="button tiny warning confirm"><i
class="fa fa-eye-slash"></i> @lang('admin/contents.makeDraft')</a>
@endif
<a href="{{route('content.delete', ['id' => $page->id])}}"
class="button tiny alert confirm"><i
class="fa fa-remove"></i> @lang('admin/contents.deletePage')</a>
</div>
</div>
@empty
<em>@lang('admin/contents.noPagesAvailable')</em>
@endforelse
@@ -1,14 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/customFields.edit', ['name' => $field->name]))
@section('content')
<div class="row">
<h2>@lang('admin/customFields.edit', ['name' => $field->name])</h2>
</div>
<div class="row">
@include('admin.customFields.editForm')
</div>
@stop
@@ -1,136 +0,0 @@
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
<form method="POST" action="{{route('customfields.editPost', ['id' => $field->id])}}">
{!! csrf_field() !!}
<div class="row">
<div class="large-12 columns">
<label>
@lang('admin/customFields.name')
<input type="text" placeholder="@lang('admin/customFields.name')" value="{{$field->name}}" name="name">
@if (isset($errors) && $errors->has('name'))
<div class="callout alert">
{{ $errors->first('name') }}
</div>
@endif
</label>
</div>
</div>
<div class="row">
<div class="large-6 columns">
<label>
@lang('admin/customFields.description')
<textarea rows="5" name="description" placeholder="@lang('admin/customFields.description')">{{$field->description}}</textarea>
</label>
</div>
<div class="large-6 columns">
<label>
@lang('admin/customFields.type')
<select name="type" disabled>
@foreach($types as $type => $translation)
<option value="{{$type}}"@if($field->type_id == $type) selected @endif>{{$translation}}</option>
@endforeach
</select>
@if (isset($errors) && $errors->has('type'))
<div class="callout alert">
{{ $errors->first('type') }}
</div>
@endif
</label>
<label>
@lang('admin/customFields.resource')
<select name="resource" disabled>
@foreach($resources as $resource => $translation)
<option value="{{$resource}}"@if($field->resource_id == $resource) selected @endif>{{$translation}}</option>
@endforeach
</select>
@if (isset($errors) && $errors->has('resource'))
<div class="callout alert">
{{ $errors->first('resource') }}
</div>
@endif
</label>
<label>
@lang('admin/customFields.required')
<input type="checkbox" placeholder="@lang('admin/customFields.required')" @if ($field->required) checked="checked" @endif name="required">
</label>
</div>
</div>
<div class="row">
<div class="columns large-6">
<label>
@lang('admin/customFields.possibleValues')
<textarea placeholder="@lang('admin/customFields.possibleValues')" name="possibleValues" rows="4">{{$field->possibleValues}}</textarea>
</label>
</div>
<div class="columns large-6">
<label>
@lang('admin/customFields.defaultValue')
<input type="text" placeholder="@lang('admin/customFields.defaultValue')" value="{{$field->defaultValue}}" name="defaultValue">
</label>
<label>
@lang('admin/customFields.regExp')
<input type="text" placeholder="@lang('admin/customFields.regExp')" value="{{$field->regExp}}" name="regExp">
</label>
</div>
</div>
<div class="row">
<div class="large-6 columns">
<label>
@lang('admin/customFields.minLength')
<input type="text" placeholder="@lang('admin/customFields.minLength')" value="{{$field->minLength}}" name="minLength">
@if (isset($errors) && $errors->has('minLength'))
<div class="callout alert">
{{ $errors->first('minLength') }}
</div>
@endif
</label>
</div>
<div class="large-6 columns">
<label>
@lang('admin/customFields.maxLength')
<input type="text" placeholder="@lang('admin/customFields.maxLength')" value="{{$field->macLength}}" name="maxLength">
@if (isset($errors) && $errors->has('maxLength'))
<div class="callout alert">
{{ $errors->first('maxLength') }}
</div>
@endif
</label>
</div>
</div>
<label>
<button type="submit" class="button success">@lang('admin/customFields.createNew')</button>
</label>
</form>
@@ -1,26 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/customFields.new'))
@section('content')
<div class="row">
<h2>@lang('admin/customFields.new')</h2>
</div>
<div class="row">
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
@include('admin.customFields.newForm')
</div>
@stop
@@ -1,124 +0,0 @@
<form method="POST" action="{{route('customfields.newPost')}}">
{!! csrf_field() !!}
<div class="row">
<div class="large-12 columns">
<label>
@lang('admin/customFields.name')
<input type="text" placeholder="@lang('admin/customFields.name')" value="{{old('name')}}" name="name">
@if (isset($errors) && $errors->has('name'))
<div class="callout alert">
{{ $errors->first('name') }}
</div>
@endif
</label>
</div>
</div>
<div class="row">
<div class="large-6 columns">
<label>
@lang('admin/customFields.description')
<textarea rows="5" name="description" placeholder="@lang('admin/customFields.description')">{{old('description')}}</textarea>
</label>
</div>
<div class="large-6 columns">
<label>
@lang('admin/customFields.type')
<select name="type">
@foreach($types as $type => $translation)
<option value="{{$type}}"@if(old('type') == $type) selected @endif>{{$translation}}</option>
@endforeach
</select>
@if (isset($errors) && $errors->has('type'))
<div class="callout alert">
{{ $errors->first('type') }}
</div>
@endif
</label>
<label>
@lang('admin/customFields.resource')
<select name="resource">
@foreach($resources as $resource => $translation)
<option value="{{$resource}}"@if(old('resource') == $resource) selected @endif>{{$translation}}</option>
@endforeach
</select>
@if (isset($errors) && $errors->has('resource'))
<div class="callout alert">
{{ $errors->first('resource') }}
</div>
@endif
</label>
<label>
@lang('admin/customFields.required')
<input type="checkbox" placeholder="@lang('admin/customFields.required')" @if (old('required')) checked="checked" @endif name="required">
</label>
</div>
</div>
<div class="row">
<div class="columns large-6">
<label>
@lang('admin/customFields.possibleValues')
<textarea placeholder="@lang('admin/customFields.possibleValues')" name="possibleValues" rows="4">{{old('possibleValues')}}</textarea>
</label>
</div>
<div class="columns large-6">
<label>
@lang('admin/customFields.defaultValue')
<input type="text" placeholder="@lang('admin/customFields.defaultValue')" value="{{old('defaultValue')}}" name="defaultValue">
</label>
<label>
@lang('admin/customFields.regExp')
<input type="text" placeholder="@lang('admin/customFields.regExp')" value="{{old('regExp')}}" name="regExp">
</label>
</div>
</div>
<div class="row">
<div class="large-6 columns">
<label>
@lang('admin/customFields.minLength')
<input type="text" placeholder="@lang('admin/customFields.minLength')" value="{{old('minLength')}}" name="minLength">
@if (isset($errors) && $errors->has('minLength'))
<div class="callout alert">
{{ $errors->first('minLength') }}
</div>
@endif
</label>
</div>
<div class="large-6 columns">
<label>
@lang('admin/customFields.maxLength')
<input type="text" placeholder="@lang('admin/customFields.maxLength')" value="{{old('macLength')}}" name="maxLength">
@if (isset($errors) && $errors->has('maxLength'))
<div class="callout alert">
{{ $errors->first('maxLength') }}
</div>
@endif
</label>
</div>
</div>
<label>
<button type="submit" class="button success">@lang('admin/customFields.createNew')</button>
</label>
</form>
@@ -1,74 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/customFields.overview'))
@section('content')
<div class="row">
<h2>@lang('admin/customFields.overview')</h2>
</div>
<div class="row">
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
{{--draw tabs--}}
@if (!empty($usedResources))
<ul class="tabs" data-tabs id="customFieldsOverview">
<?php $isFirst = true?>
@foreach($usedResources as $i => $resource)
<li class="tabs-title @if($isFirst)is-active @endif"><a href="#customFieldResource{{$resource}}">@lang($resources[$resource])</a></li>
<?php $isFirst = false?>
@endforeach
</ul>
{{--display list of custom fields--}}
<?php $isFirst = true?>
<div class="tabs-content" data-tabs-content="customFieldsOverview">
@foreach($customFields as $resourceId => $fields)
<div class="tabs-panel @if($isFirst)is-active @endif" id="customFieldResource{{$resourceId}}">
<table class="full-width">
<thead>
<tr>
<th>@lang('admin/customFields.name')</th>
<th>@lang('admin/customFields.description')</th>
<th>@lang('admin/customFields.type')</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($fields as $field)
<tr>
<td>{{$field->name}}</td>
<td>{{str_limit($field->description)}}</td>
<td>@lang($types[$field->type_id])</td>
<td>
<a href="{{route('customfields.delete', ['id' => $field->id])}}"><i class="fa red confirm fa-remove"></i></a>
<a href="{{route('customfields.edit', ['id' => $field->id])}}"><i class="fa green fa-edit"></i></a>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<?php $isFirst = false?>
@endforeach
</div>
@else
<em>@lang('admin/customFields.noFields')</em>
@endif
</div>
@stop
@@ -1,7 +0,0 @@
@extends('admin.layout')
@section('content')
<h1>Dashboard</h1>
some fancy content
@stop
@@ -1,20 +0,0 @@
<h3>@lang('admin/fileManager.editDirectory')</h3>
<form method="POST" action="{{route('upload.postEditDirectory', ['id' => $directory->id])}}">
{!! csrf_field() !!}
<label>
@lang('admin/fileManager.directoryName')
<input type="text" name="name" value="{{old('name', $directory->name)}}" />
</label>
<label>
@lang('admin/fileManager.directoryDescription')
<textarea name="description" rows="3">{{old('description', $directory->description)}}</textarea>
</label>
<button type="submit" class="button success">@lang('admin/fileManager.editDirectory')</button>
</form>
@@ -1,36 +0,0 @@
<h3>@lang('admin/fileManager.newDirectory')</h3>
<form method="POST" action="{{route('upload.postNewDirectory')}}">
{!! csrf_field() !!}
@if($directory->id)
<input type="hidden" value="{{$directory->id}}" name="parentDirectory" />
@endif
<label>
@lang('admin/fileManager.directoryName')
<input type="text" name="name" value="{{old('name')}}" />
@if (isset($errors) && $errors->has('name'))
<div class="callout alert">
{{ $errors->first('name') }}
</div>
@endif
</label>
<label>
@lang('admin/fileManager.directoryDescription')
<textarea name="description" rows="2">{{old('description')}}</textarea>
@if (isset($errors) && $errors->has('description'))
<div class="callout alert">
{{ $errors->first('description') }}
</div>
@endif
</label>
<button type="submit" class="button success">@lang('admin/fileManager.newDirectory')</button>
</form>
@@ -1,36 +0,0 @@
<div class="tile-overview" data-equalizer>
@if($directory->id)
<div class="columns large-2">
<div class="item directory" data-equalizer-watch>
<div class="preview row">
<a href="{{route('upload.overview', ['id' => $directory->parent_id])}}">
<i class="fa fa-level-up"></i>
</a>
</div>
<div class="detail row text-center highlight">
@lang('admin/fileManager.parentDirectory')
</div>
</div>
</div>
@endif
@forelse($subdirectories as $dir)
<div class="columns large-2">
<div class="item directory" data-equalizer-watch>
<div class="preview row">
<a href="{{route('upload.overview', ['id' => $dir->id])}}">
<i class="fa fa-folder"></i>
</a>
</div>
<div class="detail row text-center highlight">
{{str_limit($dir->name, 15)}}
</div>
</div>
</div>
@empty
{{--<em>@lang('admin/fileManager.noSubdirectories')</em>--}}
@endforelse
</div>
@@ -1,58 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/fileManager.edit', ['name' => $file->original_filename]))
@section('content')
<div class="row">
<h2>@lang('admin/fileManager.edit', ['name' => $file->original_filename])</h2>
</div>
<div class="row">
<div class="column large-8">
<div class="large-preview">
{!! \App\Helpers\FileManager::getLargePreview($file) !!}
</div>
</div>
<div class="column large-4">
<div class="row callout secondary">
<div class="column">
<h3>{{$file->original_filename}}</h3>
<ul>
<li>@lang('admin/fileManager.createdAt'): {{$file->created_at}}</li>
<li>@lang('admin/fileManager.updatedAt'): {{$file->updated_at}}</li>
<li>@lang('admin/fileManager.mime'): {{$file->mime_type}}</li>
<li>@lang('admin/fileManager.hash'): <span title="{{$file->file_hash}}">{{str_limit($file->file_hash, 10)}}</span></li>
<li>@lang('admin/fileManager.url'): <a href="{{config('app.upload_url')}}/{{$file->filename}}">{{$file->filename}}</a></li>
<li>@lang('admin/fileManager.fileSize'): {{\App\Helpers\FileManager::getFormattedSize($file)}}</li>
@foreach($extraInfo as $column => $info)
<li>{{$column}}: {{$info}}</li>
@endforeach
</ul>
</div>
</div>
<div class="row">
@include('admin.fileManager.editForm')
</div>
</div>
</div>
@stop
@section('head_stylesheets')
<link rel="stylesheet" href="{{asset('/resources/assets/js/vendor/highlightjs/style/default.css')}}">
@stop
@section('javascripts')
<script type="text/javascript" src="{{asset('/resources/assets/js/vendor/highlightjs/highlight.min.js')}}"></script>
<script type="text/javascript">
hljs.initHighlightingOnLoad();
</script>
@stop
@@ -1,53 +0,0 @@
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
<form method="POST" action="{{route('upload.postEdit', ['id' => $file->id])}}" enctype="multipart/form-data">
{!! csrf_field() !!}
<label>
@lang('admin/fileManager.name')
<input type="text" name="name" id="name" value="{{$file->name}}"/>
@if (isset($errors) && $errors->has('name'))
<div class="callout alert">
{{ $errors->first('name') }}
</div>
@endif
</label>
<label>
@lang('admin/fileManager.keywords')
<input type="text" name="keywords" id="keywords" value="{{$file->keywords}}"/>
@if (isset($errors) && $errors->has('keywords'))
<div class="callout alert">
{{ $errors->first('keywords') }}
</div>
@endif
</label>
<label>
@lang('admin/fileManager.description')
<textarea rows="3" name="description" id="description">{{$file->description}}</textarea>
</label>
<button type="submit" class="button primary">@lang('admin/fileManager.editButton')</button>
<a href="{{route('upload.delete', ['id' => $file->id])}}" class="button text-center confirm alert pull-right" title="@lang('admin/fileManager.delete')">
<i class="fa fa-remove"></i>
</a>
</form>
@@ -1,32 +0,0 @@
<div class="row tile-overview" data-equalizer>
@forelse($files as $file)
<div class="columns large-2">
<div class="item" data-equalizer-watch>
<div class="preview row" title="{{ \App\Helpers\FileManager::getFormattedSize($file) }}">
<a href="{{route('upload.detail', ['id' => $file->id])}}">
{!! \App\Helpers\FileManager::getPreview($file) !!}
</a>
</div>
<div class="detail row text-center">
<div class="highlight">
{{str_limit($file->original_filename, 15)}}
</div>
<div class="small">
{{$file->mime_type}}
</div>
</div>
<div class="controls row">
<a href="{{route('upload.detail', ['id' => $file->id])}}" class="button text-center primary column large-6" title="@lang('admin/fileManager.edit')">
<i class="fa fa-edit"></i>
</a>
<a href="{{route('upload.delete', ['id' => $file->id])}}" class="button text-center confirm alert column large-6" title="@lang('admin/fileManager.delete')">
<i class="fa fa-remove"></i>
</a>
</div>
</div>
</div>
@empty
<em>@lang('admin/fileManager.noFiles')</em>
@endforelse
</div>
@@ -1,52 +0,0 @@
<h3>@lang('admin/fileManager.newFile')</h3>
<form method="POST" action="{{route('upload.postFile')}}" enctype="multipart/form-data">
{!! csrf_field() !!}
@if(isset($directory))
<input type="hidden" name="directoryId" value="{{$directory->id}}" />
@endif
<label>
@lang('admin/fileManager.selectFile')
<input type="file" multiple name="files[]" id="file" />
@if (isset($errors) && $errors->has('files[]'))
<div class="callout alert">
{{ $errors->first('files[]') }}
</div>
@endif
</label>
<label>
@lang('admin/fileManager.name')
<input type="text" name="name" id="name" value="{{old('name')}}"/>
@if (isset($errors) && $errors->has('name'))
<div class="callout alert">
{{ $errors->first('name') }}
</div>
@endif
</label>
<label>
@lang('admin/fileManager.keywords')
<input type="text" name="keywords" id="keywords" value="{{old('keywords')}}" />
@if (isset($errors) && $errors->has('keywords'))
<div class="callout alert">
{{ $errors->first('keywords') }}
</div>
@endif
</label>
<label>
@lang('admin/fileManager.description')
<textarea rows="3" name="description" id="description">{{old('description')}}</textarea>
</label>
<button type="submit" class="button primary">@lang('admin/fileManager.upload')</button>
</form>
@@ -1,71 +0,0 @@
@extends('admin.layout')
@if ($directory->id)
@section('pageName', @trans('admin/fileManager.directories', ['directory' => $directory->name]))
@else
@section('pageName', @trans('admin/fileManager.rootDirectories'))
@endif
@section('content')
<div class="row">
<h2>
@if ($directory->id)
@lang('admin/fileManager.directories', ['directory' => $directory->name])
@else
@lang('admin/fileManager.rootDirectories')
@endif
</h2>
</div>
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
<div class="columns large-8">
<div class="row">
@include('admin.fileManager.directories.subdirectoriesTiles')
</div>
<div class="row">
@include('admin.fileManager.filesTiles')
</div>
</div>
<div class="column large-4">
<ul class="accordion" data-accordion data-allow-all-closed="true">
<li class="accordion-item is-active" data-accordion-item>
<a href="#" class="accordion-title">@lang('admin/fileManager.newFile')</a>
<div class="accordion-content" data-tab-content>
@include('admin.fileManager.newFileForm')
</div>
</li>
<li class="accordion-item" data-accordion-item>
<a href="#" class="accordion-title">@lang('admin/fileManager.newDirectory')</a>
<div class="accordion-content" data-tab-content>
@include('admin.fileManager.directories.newForm')
</div>
</li>
@if ($directory->id)
<li class="accordion-item" data-accordion-item>
<a href="#" class="accordion-title">@lang('admin/fileManager.editDirectory')</a>
<div class="accordion-content" data-tab-content>
@include('admin.fileManager.directories.editForm')
</div>
</li>
@endif
</ul>
</div>
@stop
@@ -1,25 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/history.diffPageName', ['column' => $columnName]))
@section('content')
<div class="row">
<h2>@lang('admin/history.diffPageName', ['column' => $columnName])</h2>
</div>
<div class="row callout">
{!! $diff !!}
</div>
<div class="row">
<a href="{{route('content.history', ['id' => $change->content_id])}}" class="button success">
@lang('admin/history.backToOverview')
</a>
<a href="{{route('content.edit', ['id' => $change->content_id])}}" class="button success">
@lang('admin/history.backToEdit')
</a>
</div>
@stop
@@ -1,35 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/history.pageName', ['name' => $page->title]))
@section('content')
<div class="row">
<h2>@lang('admin/history.pageName', ['name' => $page->title])</h2>
</div>
<div class="row">
<ul class="accordion" data-accordion>
@foreach($history['changesets'] as $revision => $changes)
<li class="accordion-item" data-accordion-item>
<a class="accordion-title">
<strong>{{$history['info'][$revision]['user']['name']}}</strong> |
{{$history['info'][$revision]['changed_at']}} |
{{trans_choice('admin/history.numOfChanges', count($changes))}}
</a>
@foreach($changes as $change)
<div class="accordion-content" data-tab-content>
<strong>{{$change->column_trans}}</strong>: {!! $change->diff !!}
</div>
@endforeach
</li>
@endforeach
</ul>
</div>
<a href="{{route('content.edit', ['id' => $page->id])}}" class="button success">
@lang('admin/history.backToEdit')
</a>
@stop
@@ -1,75 +0,0 @@
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
@yield('head_meta')
<title>@yield('pageName', @trans('admin/common.admin')) | {{isset($pageName) ? $pageName : ''}}</title>
<link rel="stylesheet" href="{{asset('resources/assets/css/foundation.min.css')}}" />
<link rel="stylesheet" href="{{asset('resources/assets/css/font-awesome.min.css')}}" />
<link rel="stylesheet" href="{{asset('resources/assets/css/admin.css')}}" />
@yield('head_stylesheets')
</head>
<body class="admin">
<div id="container">
<header class="row nav top-bar">
<section class="logo columns small-1 medium-3 large-2">
<ul class="dropdown menu language_bar_chooser" data-dropdown-menu>
<li>
<a href="#">@lang(LaravelLocalization::getCurrentLocaleName())</a>
<ul class="menu">
@foreach(LaravelLocalization::getSupportedLocales() as $localeCode => $properties)
<li @if(LaravelLocalization::getCurrentLocale() == $localeCode) class="active" @endif>
<a rel="alternate" hreflang="{{$localeCode}}"
href="{{LaravelLocalization::getLocalizedURL($localeCode) }}">
{{ $properties['native'] }}
</a>
</li>
@endforeach
</ul>
</li>
</ul>
</section>
<section class="heading columns small-10 medium-8 large-8">
@include('admin.search.miniSearchForm')
</section>
<section class="profile columns small-10 medium-1 large-2">
<ul class="vertical dropdown menu" data-dropdown-menu>
<li>
<a href="#">
<img src="{{Auth::user()->gravatar(25)}}" alt="" />
{{Auth::user()->getAttribute('name')}}
</a>
{!! Menu::render('profileMenu', 'foundation-dropdown-initialized') !!}
</li>
</ul>
</section>
</header>
<div class="row">
<section class="sidebar large-2 columns">
{!! Menu::render('mainMenu', 'foundation-drilldown') !!}
</section>
<section class="content small-11 medium-9 large-10 columns">
@yield('content')
</section>
</div>
<footer class="row text-center">
&copy; {{isset($pageName) ? $pageName : ''}} {{date('Y')}}
</footer>
</div>
<script src="{{asset('resources/assets/js/vendor/jquery.min.js')}}"></script>
<script src="{{asset('resources/assets/js/vendor/what-input.min.js')}}"></script>
<script src="{{asset('resources/assets/js/foundation.min.js')}}"></script>
<script src="{{asset('resources/assets/js/app.js')}}"></script>
@yield('javascripts')
</body>
</html>
@@ -1,74 +0,0 @@
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@lang('admin/loginForm.login') | {{isset($pageName) ? $pageName : ''}}</title>
<link rel="stylesheet" href="{{asset('/resources/assets/css/foundation.css')}}" />
<link rel="stylesheet" href="{{asset('/resources/assets/css/admin.css')}}" />
</head>
<body>
<div class="row">
<div class="medium-6 medium-centered large-4 large-centered columns login-form">
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
<form method="POST" action="{{ route('login') }}">
{!! csrf_field() !!}
<div class="row column log-in-form{{ $errors->has('email') ? ' has-error' : '' }}">
<h4 class="text-center">@lang('admin/loginForm.formHeading')</h4>
<label>
@lang('admin/loginForm.email')
<input type="text" placeholder="somebody@example.com" value="{{old('email')}}" name="email">
@if ($errors->has('email'))
<div data-alert class="callout alert text-center small">
{{ $errors->first('email') }}
</div>
@endif
</label>
<label>
@lang('admin/loginForm.password')
<input type="password" placeholder="@lang('admin/loginForm.password')" name="password">
@if ($errors->has('password'))
<div data-alert class="callout alert text-center small">
{{ $errors->first('password') }}
</div>
@endif
</label>
{{--<label>--}}
{{--@lang('admin/loginForm.rememberMe')--}}
{{--<input type="checkbox" name="remember">--}}
{{--</label>--}}
<p>
<button type="submit" class="button expanded">@lang('admin/loginForm.login')</button>
</p>
</div>
</form>
</div>
</div>
<script src="{{asset('/resources/assets/js/vendor/jquery.min.js')}}"></script>
<script src="{{asset('/resources/assets/js/vendor/what-input.min.js')}}"></script>
<script src="{{asset('/resources/assets/js/foundation.min.js')}}"></script>
</body>
</html>
@@ -1,9 +0,0 @@
<form action="{{route('search')}}" method="get">
<div class="input-group">
<input type="text" class="input-group-field" value="@if(isset($search)){{$search}}@endif" placeholder="@lang('search.term')" name="search" />
<div class="input-group-button">
<button class="button success"><i class="fa fa-search"></i></button>
</div>
</div>
</form>
@@ -1 +0,0 @@
@include('admin.search.form')
@@ -1,41 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('search.pageTitle'))
@section('content')
<div class="row">
<h2>@lang('search.pageTitle')</h2>
</div>
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
@if ($search)
<div class="row">
<div class="column large-8">
<h3>@lang('search.results')</h3>
@include('admin.search.results')
</div>
<div class="column large-4">
<h3>@lang('search.term')</h3>
@include('admin.search.form')
</div>
</div>
@else
<div class="row">
@include('admin.search.form')
</div>
@endif
@stop
@@ -1,7 +0,0 @@
@foreach($results as $id => $result)
<div class="search-result" id="{{$id}}">
<h4>{{$result['name']}} ({{$result['count']}})</h4>
{!! $result['content'] !!}
</div>
@endforeach
@@ -1,3 +0,0 @@
<div class="content search-result">
<h3>{{$page->title}}</h3>
</div>
@@ -1,50 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/settings.overview'))
@section('content')
<div class="row">
<h2>@lang('admin/settings.overview')</h2>
</div>
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
<div class="row">
<ul class="tabs" data-tabs id="static-page-controls">
@foreach($formSections as $id => $section)
<li class="tabs-title @if($section->getId() == reset($formSections)->getId()) is-active @endif">
<a href="#{{$id}}" @if($section->getId() == reset($formSections)->getId()) aria-selected="true" @endif>
{{trans($section->getName())}}
</a>
</li>
@endforeach
</ul>
<form action="{{route('settings.save')}}" method="POST">
{!! csrf_field() !!}
<div class="tabs-content" data-tabs-content="static-page-controls">
@foreach($formSections as $id => $section)
<div class="tabs-panel @if($id == reset($formSections)->getId()) is-active @endif" id="{{$section->getId()}}">
@include($section->getView())
</div>
@endforeach
</div>
<div class="row">
<div class="columns large-12">
<button type="submit" class="button success">@lang('admin/settings.save')</button>
</div>
</div>
</form>
</div>
@stop
@@ -1,27 +0,0 @@
<label>
@lang('admin/settings.pageName')
<input type="text" name="pageName" value="{{old('pageName', isset($settings->pageName) ? $settings->pageName['val'] : '')}}" />
@if (isset($errors) && $errors->has('pageName'))
<div class="callout alert">
{{ $errors->first('pageName') }}
</div>
@endif
</label>
<label>
@lang('admin/settings.author')
<input type="text" name="author" value="{{old('author', isset($settings->author) ? $settings->author['val'] : '')}}" />
@include('admin.settings.snippets.commonSettings', ['field' => 'author'])
</label>
<label>
@lang('admin/settings.googleAnalyticsCode')
<input type="text" name="googleAnalyticsCode" value="{{old('googleAnalyticsCode', isset($settings->googleAnalyticsCode) ? $settings->googleAnalyticsCode['val'] : '')}}" />
@include('admin.settings.snippets.commonSettings', ['field' => 'googleAnalyticsCode'])
</label>
@@ -1,13 +0,0 @@
<label>
@lang('admin/settings.metaKeywords')
<input type="text" name="metaKeywords"
value="{{old('metaKeywords', isset($settings->metaKeywords) ? $settings->metaKeywords['val'] : '')}}" />
</label>
<label>
@lang('admin/settings.metaDescription')
<textarea name="metaDescription"
rows="3">{{old('metaDescription', isset($settings->metaDescription) ? $settings->metaDescription['val'] : '')}}</textarea>
</label>
@@ -1,29 +0,0 @@
<label>
@lang('admin/settings.social.facebook')
<input type="text" name="facebookProfile" value="{{old('facebookProfile', isset($settings->facebookProfile) ? $settings->facebookProfile['val'] : '')}}" />
</label>
<label>
@lang('admin/settings.social.twitter')
<input type="text" name="twitterProfile" value="{{old('twitterProfile', isset($settings->twitterProfile) ? $settings->twitterProfile['val'] : '')}}" />
</label>
<label>
@lang('admin/settings.social.pinterest')
<input type="text" name="pinterestProfile" value="{{old('pinterestProfile', isset($settings->pinterestProfile) ? $settings->pinterestProfile['val'] : '')}}" />
</label>
<label>
@lang('admin/settings.social.gplus')
<input type="text" name="gplusProfile" value="{{old('gplusProfile', isset($settings->gplusProfile) ? $settings->gplusProfile['val'] : '')}}" />
</label>
<label>
@lang('admin/settings.social.instagram')
<input type="text" name="instagramProfile" value="{{old('instagramProfile', isset($settings->instagramProfile) ? $settings->instagramProfile['val'] : '')}}" />
</label>
@@ -1,5 +0,0 @@
<input type="checkbox" name="commonSettings[{{$field}}]" value="1"
@if(!isset($settings->{$field}) || $settings->{$field}['lang'] == null)
checked
@endif />
@lang('admin/settings.commonSettings')
@@ -1,21 +0,0 @@
<div class="ace-editor-container large">
<textarea class="ace-editor-textarea" name="{{$name}}" id="{{$name}}">{{$value}}</textarea>
<div class="ace-editor" id="{{$name}}Editor">{{$value}}</div>
</div>
@section('javascripts')
<script src="{{asset('resources/assets/js/vendor/ace/ace.js')}}"></script>
<script type="application/javascript">
var editor = ace.edit("{{$name}}Editor");
editor.setTheme("ace/theme/{{$theme}}");
editor.getSession().setMode("ace/mode/{{$mode}}");
var textarea = $('#{{$name}}');//.hide();
editor.getSession().setValue(textarea.val());
editor.getSession().on('change', function(){
textarea.val(editor.getSession().getValue());
});
</script>
@endsection
@@ -1,26 +0,0 @@
<script src="{{asset('/resources/assets/js/vendor/ckeditor/ckeditor.js')}}"></script>
<script type="application/javascript">
CKEDITOR.replace ('{{$textareaId}}', {
uiColor: "#F5F5F5",
forcePasteAsPlainText: true,
entities: false,
basicEntities: false,
entities_greek: false,
entities_latin: false,
removePlugins: 'elementspath,about,scayt',
extraPlugins: 'justify',
toolbarGroups: [
{name: 'undo', groups: ['undo']},
{name: 'styles'},
{name: 'basicstyles', groups: ['basicstyles', 'cleanup']},
{name: 'paragraph', groups: ['list', 'indent', 'align', 'blocks']},
{name: 'links'},
{name: 'editing', groups: ['find', 'selection']},
{name: 'insert'},
{name: 'forms'},
{name: 'document', groups: ['mode', 'document', 'doctools']},
{name: 'tools'}
]
});
</script>
@@ -1,25 +0,0 @@
@if($directory->parent_id)
<a href="{{route('templates.overview', ['path' => $directory->parent_id])}}" class="button full-width secondary">
@lang('admin/templates.parentDirectory') <i class="fa fa-level-up"></i>
</a>
<br />
@endif
<h4>@lang($directory->name)</h4>
{{--@if (true || isset($isWritable) && $isWritable)--}}
{{--<div class="text-right">--}}
{{--<a href="{{route('templates.new', ['pathId' => $directory->id])}}"><i class="fa fa-plus"></i> @lang('admin/templates.new')</a> <br />--}}
{{--</div>--}}
{{--@endif--}}
<div>
<h5>@lang('admin/templates.subdirectories')</h5>
@forelse($subdirectories as $subdirectory)
<a href="{{route('templates.overview', ['path' => $subdirectory->id])}}">{{trans($subdirectory->name)}}</a>
@empty
<em>@lang('admin/templates.noSubdirectories')</em>
@endforelse
</div>
@@ -1,14 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/templates.edit', ['name' => $template->template_name]))
@section('content')
<div class="row">
<h2>@lang('admin/templates.edit', ['name' => $template->template_name])</h2>
</div>
<div class="row">
@include('admin.templates.editForm')
</div>
@stop
@@ -1,54 +0,0 @@
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
@if (!$isWritable)
<div data-alert class="callout warning">
@lang('admin/templates.notWritable', ['file' => $path->path])
</div>
@endif
<form action="{{route('templates.postEdit', ['id' => $template->id])}}" method="POST">
{!! csrf_field() !!}
<div class="row">
<div class="column large-8">
<div style="height: 30em">
@include('admin.snippets.aceEditor', [
'value' => old('templateContent', $templateContent),
'theme' => 'xcode',
'mode' => 'html',
'name' => 'templateContent'
])
</div>
</div>
<div class="column large-4">
<label>
@lang('admin/templates.name')
<input type="text" name="name" value="{{old('name', $template->name)}}" />
</label>
<label>
@lang('admin/templates.description')
<textarea name="description" rows="3">{{old('description', $template->description)}}</textarea>
</label>
<button type="submit" class="button success">
@lang('admin/templates.edit', ['name' => $template->template_name])
</button>
</div>
</div>
</form>
@@ -1,32 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/templates.overview'))
@section('content')
<h1>@lang('admin/templates.overview')</h1>
@if (session('success'))
<div data-alert class="callout success">
<strong>{{ session('success') }}</strong>
</div>
@endif
@if (session('error'))
<div data-alert class="callout alert">
<strong>{{ session('error') }}</strong>
</div>
@endif
<div class="row">
<div class="column large-9">
@include('admin.templates.templatesTiles')
</div>
<div class="column large-3">
<div class="callout">
@include('admin.templates.directoriesList')
</div>
</div>
</div>
@stop
@@ -1,69 +0,0 @@
<div class="tile-overview" data-equalizer>
@forelse($templates as $template)
<div class="columns large-3">
<div class="item" data-equalizer-watch>
<div class="detail row text-center">
<div class="highlight" title="{{$template->name}}">
{{str_limit($template->name, 15)}}
</div>
<div>
{{str_limit($template->description, 150)}}
</div>
</div>
<div class="controls row">
@if($isWritable)
<a data-template-id="{{$template->id}}" data-template-name="{{$template->template_name}}"
class="button primary column large-6 copy-template"
title="@lang('admin/templates.copy')">
<i class="fa fa-copy"></i>
</a>
@else
<a href="#" class="button primary disabled column large-6"
title="@lang('admin/templates.cannotCopy')">
<i class="fa fa-copy"></i>
</a>
@endif
@if ($template->editable)
<a href="{{route('templates.edit', ['id' => $template->id])}}"
class="button success column large-6"
title="@lang('admin/templates.edit', ['name' => $template->name])">
<i class="fa fa-edit"></i>
</a>
@endif
</div>
</div>
</div>
@empty
<em>@lang('admin/templates.noTemplates')</em>
@endforelse
</div>
@section('javascripts')
<script type="text/javascript">
$ ('.copy-template').click (function () {
var link = $ (this);
var templateId = link.data ('template-id');
var templateName = link.data ('template-name');
templateName = templateName.substr (templateName.search ('::') + 2, templateName.length);
var newTemplateName = prompt ("@lang('admin/templates.newTemplateName')", templateName + "_" + "@lang('admin/templates.newTemplateNameSuffix')");
// no name given - give up
if (newTemplateName == null) return;
// copy given template
$.post ('{{route('templates.postCopy')}}', {
templateId: templateId,
newName: newTemplateName,
_token: "{{csrf_token()}}"
}, function (data) {
if (data.status == 'success') {
location.reload ();
}
});
});
</script>
@endsection
@@ -1,66 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/userManagement.detail', ['name' => $user->name, 'email' => $user->email]))
@section('content')
<div class="row">
<h3>@lang('admin/userManagement.detail', ['name' => str_limit($user->name, 20), 'email' => $user->email])</h3>
<div class="columns large-4">
<div class="callout">
<div class="user-img text-center">
<img src="{{$user->gravatar(200)}}" alt="" />
</div>
<div class="user-detail text-center">
<ul>
<li>{{$user->name}}</li>
<li>{{$user->email}}</li>
{{--todo: add custom fields--}}
</ul>
</div>
</div>
<div class="callout">
<h3>@lang('admin/userManagement.usersActions')</h3>
@if (!empty($actions))
<ul class="accordion" data-accordion>
@foreach($actions as $action)
<li class="accordion-item" data-accordion-item>
<a class="accordion-title">{{$action->name}}</a>
<div class="accordion-content" data-tab-content>
{{date('d.m.Y G:i', strtotime($action->created_at))}} <br />
{{$action->value}}
</div>
</li>
@endforeach
</ul>
@else
<em>@lang('admin/userManagement.noActions')</em>
@endif
</div>
</div>
<div class="columns large-8">
@if (session('success'))
<div class="callout success">
{{ session('success') }}
</div>
@endif
@if (session('error'))
<div class="callout alert">
{{ session('error') }}
</div>
@endif
<div class="callout">
<h3>@lang('admin/userManagement.editUser', ['name' => str_limit($user->name, 20), 'email' => $user->email])</h3>
@include('admin.userManagement.editForm')
</div>
</div>
</div>
@stop
@@ -1,24 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/userManagement.editUser', ['name' => str_limit($user->name, 20), 'email' => $user->email]))
@section('content')
<div class="row">
<h1>@lang('admin/userManagement.editUser', ['name' => str_limit($user->name, 20), 'email' => $user->email])</h1>
@if (session('success'))
<div class="callout success">
{{ session('success') }}
</div>
@endif
@if (session('error'))
<div class="callout alert">
{{ session('error') }}
</div>
@endif
@include('admin.userManagement.editForm')
</div>
@stop
@@ -1,64 +0,0 @@
<form method="POST" action="{{route('users.editPost', ['id' => $user->id])}}">
{!! csrf_field() !!}
<label>
@lang('admin/userManagement.name')
<input type="text" placeholder="@lang('admin/userManagement.name')" value="{{$user->name}}" name="name">
</label>
<label>
@lang('admin/userManagement.email')
<input type="text" name="email" value="{{$user->email}}" placeholder="somebody@example.com">
@if (isset($errors) && $errors->has('email'))
<div class="callout alert">
{{ $errors->first('email') }}
</div>
@endif
</label>
<label>
@lang('admin/userManagement.password') <em>(@lang('admin/userManagement.passwordLeaveEmpty'))</em>
<input type="text" name="password" value="">
</label>
@if (\Auth::user()->role == \App\Models\User::ROLE_ADMIN && \Auth::user()->id != $user->id)
<label>
@lang('admin/userManagement.roles')
<select name="role">
@foreach($roles as $role => $translation)
<option value="{{$role}}" @if($role == $user->role) selected @endif>{{$translation}}</option>
@endforeach
</select>
</label>
@if (isset($errors) && $errors->has('role'))
<div class="callout alert">
{{ $errors->first('role') }}
</div>
@endif
<label>
@lang('admin/userManagement.status')
<select name="status">
@foreach($states as $status => $translation)
<option value="{{$status}}" @if($status == $user->status) selected @endif>{{$translation}}</option>
@endforeach
</select>
</label>
@if (isset($errors) && $errors->has('role'))
<div class="callout alert">
{{ $errors->first('role') }}
</div>
@endif
@endif
<label>
<button type="submit" class="button success">@lang('admin/userManagement.update')</button>
</label>
</form>
@@ -1,22 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/userManagement.addNewUser'))
@section('content')
<h1>@lang('admin/userManagement.addNewUser')</h1>
@if (session('success'))
<div class="callout success">
{{ session('success') }}
</div>
@endif
@if (session('error'))
<div class="callout alert">
{{ session('error') }}
</div>
@endif
@include('admin.userManagement.newForm', ['roles' => $roles])
@stop
@@ -1,54 +0,0 @@
<form method="POST" action="{{route('users.newPost')}}">
{!! csrf_field() !!}
<label>
@lang('admin/userManagement.name')
<input type="text" placeholder="@lang('admin/userManagement.name')" name="name">
</label>
<label>
@lang('admin/userManagement.email')
<input type="text" name="email" placeholder="somebody@example.com">
@if (isset($errors) && $errors->has('email'))
<div class="callout alert">
{{ $errors->first('email') }}
</div>
@endif
</label>
<label>
@lang('admin/userManagement.password')
<input type="text" name="password">
@if (isset($errors) && $errors->has('password'))
<div class="callout alert">
{{ $errors->first('password') }}
</div>
@endif
</label>
<label>
@lang('admin/userManagement.roles')
<select name="role">
@foreach($roles as $role => $translation)
<option value="{{$role}}">{{$translation}}</option>
@endforeach
</select>
</label>
@if (isset($errors) && $errors->has('role'))
<div class="callout alert">
{{ $errors->first('role') }}
</div>
@endif
<label>
<button type="submit" class="button success">@lang('admin/userManagement.register')</button>
</label>
</form>
@@ -1,41 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/userManagement.overview'))
@section('content')
<div class="row">
<h2>@lang('admin/userManagement.overview')</h2>
<p>
@foreach($statuses as $status => $translation)
<a class="button tiny @if($status != $currentStatus) secondary @else primary @endif" href="{{route('users.overview', ['status' => $status])}}">{{$translation}}</a>
@endforeach
</p>
</div>
<div class="row" data-equalizer>
@forelse($users as $user)
<div class="user-detail large-2 medium-3 small-4 columns">
<div class="callout text-center small" data-equalizer-watch>
<a href="{{route('users.detail', ['id' => $user->id])}}" data-tooltip title="{{$roles[$user->role]}}">
<div class="user-img">
<img src="{{$user->gravatar(350)}}" alt="" />
</div>
<div class="user-info text-center">
{{ $user->name}}
</div>
</a>
</div>
</div>
@empty
<em>@lang('admin/userManagement.noUsers')</em>
@endforelse
</div>
<div class="row pagination">
{!! $users->render() !!}
</div>
@stop
@@ -1,10 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/widgetAreas.edit', ['name' => $area->name]))
@section('content')
<h1>@lang('admin/widgetAreas.edit', ['name' => $area->name])</h1>
@include('admin.widgets.area.editForm')
@stop
@@ -1,48 +0,0 @@
@if (session('success'))
<div class="callout success">
{{ session('success') }}
</div>
@endif
@if (session('error'))
<div class="callout alert">
{{ session('error') }}
</div>
@endif
<form action="{{route('widgetareas.postEdit', ['id' => $area->id])}}" method="POST">
{!! csrf_field() !!}
<label>
@lang('admin/widgetAreas.name')
<input type="text" name="name" value="{{$area->name}}" placeholder="@lang('admin/widgetAreas.name')" />
@if (isset($errors) && $errors->has('name'))
<div class="callout alert">
{{ $errors->first('name') }}
</div>
@endif
</label>
<label>
@lang('admin/widgetAreas.code')
<input type="text" name="code" disabled="true" value="{{$area->code}}"
placeholder="@lang('admin/widgetAreas.code')" />
</label>
<label>
@lang('admin/widgetAreas.description')
<textarea rows="3" name="description"
placeholder="@lang('admin/widgetAreas.description')">{{$area->description}}</textarea>
@if (isset($errors) && $errors->has('description'))
<div class="callout alert">
{{ $errors->first('description') }}
</div>
@endif
</label>
<button type="submit" class="button success">@lang('admin/widgetAreas.editButton')</button>
</form>
@@ -1,10 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/widgetAreas.new'))
@section('content')
<h1>@lang('admin/widgetAreas.new')</h1>
@include('admin.widgets.area.newForm')
@stop
@@ -1,55 +0,0 @@
@if (!isset($hideMessages))
@if (session('success'))
<div class="callout success">
{{ session('success') }}
</div>
@endif
@if (session('error'))
<div class="callout alert">
{{ session('error') }}
</div>
@endif
@endif
<form action="{{route('widgetareas.postNew')}}" method="POST">
{!! csrf_field() !!}
<label>
@lang('admin/widgetAreas.name')
<input type="text" name="name" value="{{old("name")}}" placeholder="@lang('admin/widgetAreas.name')" />
@if (isset($errors) && $errors->has('name'))
<div class="callout alert">
{{ $errors->first('name') }}
</div>
@endif
</label>
<label>
@lang('admin/widgetAreas.code')
<input type="text" name="code" value="{{old("code")}}" placeholder="@lang('admin/widgetAreas.code')" />
@if (isset($errors) && $errors->has('code'))
<div class="callout alert">
{{ $errors->first('code') }}
</div>
@endif
</label>
<label>
@lang('admin/widgetAreas.description')
<textarea rows="3" name="description"
placeholder="@lang('admin/widgetAreas.description')">{{old("description")}}</textarea>
@if (isset($errors) && $errors->has('description'))
<div class="callout alert">
{{ $errors->first('description') }}
</div>
@endif
</label>
<button type="submit" class="button success">@lang('admin/widgetAreas.createNew')</button>
</form>
@@ -1,62 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/widgetAreas.overview'))
@section('content')
<div class="row">
<h2>@lang('admin/widgetAreas.overview')</h2>
</div>
<div class="row">
@if (session('success'))
<div class="callout success">
{{ session('success') }}
</div>
@endif
@if (session('error'))
<div class="callout alert">
{{ session('error') }}
</div>
@endif
<div class="column large-8">
@if (count($areas) > 0)
<table class="full-width">
<tr>
<th>@lang('admin/widgetAreas.name')</th>
<th>@lang('admin/widgetAreas.code')</th>
<th>@lang('admin/widgetAreas.description')</th>
<th>@lang('admin/widgetAreas.actions')</th>
</tr>
@foreach($areas as $area)
<tr>
<td>{{$area->name}}</td>
<td>{{$area->code}}</td>
<td>{{str_limit($area->description, 100)}}</td>
<td class="text-center">
<a href="{{route('widgets.associate', ['widgetArea' => $area->id])}}"><i class="fa fa-plus"></i></a>
<a href="{{route('widgetareas.edit', ['id' => $area->id])}}"><i class="fa fa-edit"></i></a>
<a href="{{route('widgetareas.delete', ['id' => $area->id])}}"><i
class="fa fa-remove confirm"></i></a>
</td>
</tr>
@endforeach
</table>
@else
<em>@lang('admin/widgetAreas.noEntries')</em>
@endif
</div>
<div class="column large-4">
<h3>@lang('admin/widgetAreas.new')</h3>
@include('admin.widgets.area.newForm', ['hideMessages' => true])
</div>
</div>
<div class="row pagination">
{!! $areas->render() !!}
</div>
@stop
@@ -1,79 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('admin/widgets.overview'))
@section('content')
<div class="row">
@if (session('success'))
<div class="callout success">
{{ session('success') }}
</div>
@endif
@if (session('error'))
<div class="callout alert">
{{ session('error') }}
</div>
@endif
<div class="column large-9 tile-overview" data-equalizer>
<h2>@lang('admin/widgets.overview')</h2>
@forelse($widgets as $widget)
<div class="column large-4">
<div class="item" data-equalizer-watch>
<h4>{{str_limit($widget->name, 20)}}</h4>
<p>
{{trans(call_user_func([$widget->widget_type_handler, 'getName']))}}
</p>
<p>
{{str_limit($widget->description, 150)}}
</p>
<div class="controls row text-center">
<a href="{{route('widgets.edit', ['id' => $widget->id])}}" class="button column large-6 primary"><i class="fa fa-edit"></i></a>
@if (in_array($widget->id, $associatedWidgetIds))
<a href="{{route('widgets.deleteAssociation', ['widgetId' => $widget->id, 'widgetArea' => $widgetArea->id])}}"
class="button column confirm large-6 alert">
<i class="fa fa-remove"></i>
</a>
@else
<a href="{{route('widgets.makeAssociation', ['widgetId' => $widget->id, 'widgetArea' => $widgetArea->id])}}"
class="button column large-6 success"><i class="fa fa-plus"></i></a>
@endif
</div>
</div>
</div>
@empty
<em>@lang('admin/widgets.noEntries')</em>
@endforelse
<div class="row">
{!! $widgets->render() !!}
</div>
</div>
<div class="column large-3">
<h2>{{$widgetArea->name}}</h2>
<p>
{{$widgetArea->description}}
</p>
<ul>
<li>@lang('admin/widgets.createdAt'): {{$widgetArea->created_at}}</li>
<li>@lang('admin/widgets.updatedAt'): {{$widgetArea->updated_at}}</li>
</ul>
<a href="{{route('widgetareas.edit', ['id' => $widgetArea->id])}}">@lang('admin/widgetAreas.editButton')</a>
@if (!empty($associatedWidgetIds))
<h3>@lang('admin/widgets.preview')</h3>
@widgetArea($widgetArea->code)
@endif
</div>
</div>
@stop
@@ -1,20 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('widgets/htmlCode.edit', ['name' => $widget->name]))
@section('content')
<h1>@lang('widgets/htmlCode.edit', ['name' => $widget->name])</h1>
<div class="row">
<div class="column large-8">
@include('admin.widgets.htmlCode.editForm')
</div>
<div class="column large-4">
<h3>@lang('widgets/htmlCode.preview')</h3>
@widgetPreview($widget)
</div>
</div>
@stop
@@ -1,68 +0,0 @@
@if (!isset($hideMessages))
@if (session('success'))
<div class="callout success">
{{ session('success') }}
</div>
@endif
@if (session('error'))
<div class="callout alert">
{{ session('error') }}
</div>
@endif
@endif
<form action="{{route('widgets.postEdit', ['id' => $widget->id])}}" method="POST">
{!! csrf_field() !!}
<label>
@lang('widgets/htmlCode.name')
<input type="text" name="name" value="{{$widget->name}}" placeholder="@lang('widgets/htmlCode.name')" />
@if (isset($errors) && $errors->has('name'))
<div class="callout alert">
{{ $errors->first('name') }}
</div>
@endif
</label>
<label>
@lang('widgets/htmlCode.description')
<input type="text" name="description" placeholder="@lang('widgets/htmlCode.description')"
value="{{$widget->description}}" />
@if (isset($errors) && $errors->has('description'))
<div class="callout alert">
{{ $errors->first('description') }}
</div>
@endif
</label>
<label>
@lang('widgets/htmlCode.containerClass')
<input type="text" name="containerClass" placeholder="@lang('widgets/htmlCode.containerClass')"
value="{{$settings->containerClass}}" />
@if (isset($errors) && $errors->has('containerClass'))
<div class="callout alert">
{{ $errors->first('description') }}
</div>
@endif
</label>
<label>
@lang('widgets/htmlCode.code')
<textarea rows="4" name="code" placeholder="@lang('widgets/htmlCode.code')">{{$settings->code}}</textarea>
@if (isset($errors) && $errors->has('code'))
<div class="callout alert">
{{ $errors->first('code') }}
</div>
@endif
</label>
<button type="submit" class="button success">@lang('widgets/htmlCode.editExisting')</button>
</form>
@@ -1,10 +0,0 @@
@extends('admin.layout')
@section('pageName', @trans('widgets/htmlCode.new'))
@section('content')
<h1>@lang('widgets/htmlCode.new')</h1>
@include('admin.widgets.htmlCode.newForm')
@stop

Some files were not shown because too many files have changed in this diff Show More