public function getResponseTemplateOptions() { $EmailTemplates = new MailTemplate(); $system = $EmailTemplates->listRegisteredTemplates(); $templates = ['' => Lang::get('octodevel.octomail::lang.components.mailTemplate.default.options.none')]; if ($system) { foreach ($system as $key => $value) { $templates[$key] = $value; } } return $templates; }
/** * Sets mail blocking preferences for a user. Eg: * * MailBlocker::setPreferences($user, [acme.blog::post.new_reply => 0]) * * MailBlocker::setPreferences($user, [acme.blog::post.new_reply => 0], [fillable => [acme.blog::post.new_reply]]) * * MailBlocker::setPreferences($user, [template_alias => 0], [aliases => [template_alias => acme.blog::post.new_reply]]) * * Supported options: * - aliases: Alias definitions, with alias as key and template as value. * - fillable: An array of expected templates, undefined templates are ignored. * - verify: Only allow mail templates that are registered in the system. * * @param array $templates Template name as key and boolean as value. If false, template is blocked. * @param RainLab\User\Models\User $user * @param array $options * @return void */ public static function setPreferences($user, $templates, $options = []) { $templates = (array) $templates; if (!$user) { throw new Exception('A user must be provided for MailBlocker::setPreferences'); } extract(array_merge(['aliases' => [], 'fillable' => [], 'verify' => false], $options)); if ($aliases) { $fillable = array_merge($fillable, array_values($aliases)); $templates = array_build($templates, function ($key, $value) use($aliases) { return [array_get($aliases, $key, $key), $value]; }); } if ($fillable) { $templates = array_intersect_key($templates, array_flip($fillable)); } if ($verify) { $existing = MailTemplate::listAllTemplates(); $templates = array_intersect_key($templates, $existing); } $currentBlocks = array_flip(static::checkAllForUser($user)); foreach ($templates as $template => $value) { // User wants to receive mail and is blocking if ($value && isset($currentBlocks[$template])) { static::removeBlock($template, $user); } elseif (!$value && !isset($currentBlocks[$template])) { static::addBlock($template, $user); } } }
public function getWelcomeTemplateOptions() { $codes = array_keys(MailTemplate::listAllTemplates()); $result = ['' => '- ' . Lang::get('rainlab.user::lang.settings.no_mail_template') . ' -']; $result += array_combine($codes, $codes); return $result; }
protected function getOpensLastWeek(MailTemplate $template) { $return = []; $emailOpens = new EmailOpens(); $opens = $template->opens()->where($emailOpens->table . '.created_at', '>=', Carbon::now()->subWeek())->orderBy('created_at', 'asc')->get(); // Set placeholder data for ($i = 0; $i < 7; $i++) { $date = Carbon::createFromTime(null, 0, 0)->subDays($i); $return[$date->day] = (object) ['ts' => $date, 'count' => 0]; } // Set actual data foreach ($opens as $open) { $date = $open->created_at; $return[$date->day]->count += 1; } return $return; }
/** * Register the service provider. * * @return void */ public function register() { parent::register('backend'); /* * Register widgets */ WidgetManager::instance()->registerFormWidgets(function ($manager) { $manager->registerFormWidget('Backend\\FormWidgets\\CodeEditor', ['label' => 'Code editor', 'code' => 'codeeditor']); $manager->registerFormWidget('Backend\\FormWidgets\\RichEditor', ['label' => 'Rich editor', 'code' => 'richeditor']); $manager->registerFormWidget('Backend\\FormWidgets\\FileUpload', ['label' => 'File uploader', 'code' => 'fileupload']); $manager->registerFormWidget('Backend\\FormWidgets\\Relation', ['label' => 'Relationship', 'code' => 'relation']); $manager->registerFormWidget('Backend\\FormWidgets\\DatePicker', ['label' => 'Date picker', 'code' => 'datepicker']); $manager->registerFormWidget('Backend\\FormWidgets\\TimePicker', ['label' => 'Time picker', 'code' => 'timepicker']); $manager->registerFormWidget('Backend\\FormWidgets\\ColorPicker', ['label' => 'Color picker', 'code' => 'colorpicker']); $manager->registerFormWidget('Backend\\FormWidgets\\DataGrid', ['label' => 'Data Grid', 'code' => 'datagrid']); // @deprecated if year >= 2016 $manager->registerFormWidget('Backend\\FormWidgets\\DataTable', ['label' => 'Data Table', 'code' => 'datatable']); $manager->registerFormWidget('Backend\\FormWidgets\\RecordFinder', ['label' => 'Record Finder', 'code' => 'recordfinder']); $manager->registerFormWidget('Backend\\FormWidgets\\Repeater', ['label' => 'Repeater', 'code' => 'repeater']); }); /* * Register navigation */ BackendMenu::registerCallback(function ($manager) { $manager->registerMenuItems('October.Backend', ['dashboard' => ['label' => 'backend::lang.dashboard.menu_label', 'icon' => 'icon-dashboard', 'url' => Backend::url('backend'), 'permissions' => ['backend.access_dashboard'], 'order' => 1]]); }); /* * Register settings */ SettingsManager::instance()->registerCallback(function ($manager) { $manager->registerSettingItems('October.Backend', ['branding' => ['label' => 'backend::lang.branding.menu_label', 'description' => 'backend::lang.branding.menu_description', 'category' => SettingsManager::CATEGORY_SYSTEM, 'icon' => 'icon-paint-brush', 'class' => 'Backend\\Models\\BrandSettings', 'order' => 500], 'editor' => ['label' => 'backend::lang.editor.menu_label', 'description' => 'backend::lang.editor.menu_description', 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-code', 'url' => Backend::URL('backend/editorpreferences'), 'order' => 600, 'context' => 'mysettings'], 'backend_preferences' => ['label' => 'backend::lang.backend_preferences.menu_label', 'description' => 'backend::lang.backend_preferences.menu_description', 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-laptop', 'class' => 'Backend\\Models\\BackendPreferences', 'order' => 500, 'context' => 'mysettings'], 'myaccount' => ['label' => 'backend::lang.myaccount.menu_label', 'description' => 'backend::lang.myaccount.menu_description', 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-user', 'url' => Backend::URL('backend/users/myaccount'), 'order' => 400, 'context' => 'mysettings', 'keywords' => 'backend::lang.myaccount.menu_keywords'], 'access_logs' => ['label' => 'backend::lang.access_log.menu_label', 'description' => 'backend::lang.access_log.menu_description', 'category' => SettingsManager::CATEGORY_LOGS, 'icon' => 'icon-lock', 'url' => Backend::url('backend/accesslogs'), 'permissions' => ['backend.access_admin_logs'], 'order' => 800]]); }); /* * Register permissions */ BackendAuth::registerCallback(function ($manager) { $manager->registerPermissions('October.Backend', ['backend.access_dashboard' => ['label' => 'system::lang.permissions.view_the_dashboard', 'tab' => 'system::lang.permissions.name'], 'backend.manage_users' => ['label' => 'system::lang.permissions.manage_other_administrators', 'tab' => 'system::lang.permissions.name']]); }); /* * Register mail templates */ MailTemplate::registerCallback(function ($template) { $template->registerMailTemplates(['backend::mail.invite' => 'Invitation for newly created administrators.', 'backend::mail.restore' => 'Password reset instructions for backend-end administrators.']); }); /* * Register asset bundles */ CombineAssets::registerCallback(function ($combiner) { $combiner->registerBundle('~/modules/backend/assets/less/controls.less'); $combiner->registerBundle('~/modules/backend/assets/less/october.less'); $combiner->registerBundle('~/modules/backend/assets/js/october.js'); $combiner->registerBundle('~/modules/backend/assets/js/vendor/vendor.js'); $combiner->registerBundle('~/modules/backend/widgets/table/assets/js/build.js'); $combiner->registerBundle('~/modules/backend/formwidgets/datepicker/assets/js/build.js'); $combiner->registerBundle('~/modules/backend/formwidgets/richeditor/assets/less/richeditor.less'); $combiner->registerBundle('~/modules/backend/formwidgets/richeditor/assets/js/build.js'); }); }
public function getEmailTemplateOptions() { MailTemplate::syncAll(); $templates = MailTemplate::all(); $options[] = 'No Template Defined'; foreach ($templates as $key => $template) { $options[$template->code] = '<strong>' . $template->code . '</strong> - ' . $template->description; } return $options; }
public function index() { /* @todo Remove line if year >= 2015 */ if (!\System\Models\MailLayout::whereCode('default')->count()) { \Eloquent::unguard(); with(new \System\Database\Seeds\SeedSetupMailLayouts())->run(); } MailTemplate::syncAll(); $this->asExtension('ListController')->index(); $this->bodyClass = 'compact-container'; }
/** * ПОлучаем список шаблонов для рассылки * @return array */ public function getSubscriptionTemplates() { $obMailTemplates = MailTemplate::where('code', 'LIKE', 'lovata.subscriptions%')->get(); if (empty($obMailTemplates)) { return []; } $arList = []; foreach ($obMailTemplates as $obMailTemplate) { $arList[$obMailTemplate->code] = $obMailTemplate->subject; } return $arList; }
public function getMailGroupInviteTemplateOptions() { switch ($this->comunication_channel) { case self::CHANNEL_EMAIL: return MailTemplate::where('code', 'LIKE', 'dma.friends::%')->orderBy('code')->lists('code', 'code'); break; case self::CHANNEL_TEXT: return []; //MailTemplate::orderBy('code')->lists('code', 'code'); break; case self::CHANNEL_KIOSK: return []; //MailTemplate::orderBy('code')->lists('code', 'code'); break; } }
/** * Register the service provider. * * @return void */ public function register() { parent::register('backend'); /* * Register widgets */ WidgetManager::instance()->registerFormWidgets(function ($manager) { $manager->registerFormWidget('Backend\\FormWidgets\\CodeEditor', ['label' => 'Code editor', 'alias' => 'codeeditor']); $manager->registerFormWidget('Backend\\FormWidgets\\RichEditor', ['label' => 'Rich editor', 'alias' => 'richeditor']); $manager->registerFormWidget('Backend\\FormWidgets\\FileUpload', ['label' => 'File uploader', 'alias' => 'fileupload']); $manager->registerFormWidget('Backend\\FormWidgets\\Relation', ['label' => 'Relationship', 'alias' => 'relation']); $manager->registerFormWidget('Backend\\FormWidgets\\Datepicker', ['label' => 'Date picker', 'alias' => 'datepicker']); $manager->registerFormWidget('Backend\\FormWidgets\\DataGrid', ['label' => 'Data Grid', 'alias' => 'datagrid']); $manager->registerFormWidget('Backend\\FormWidgets\\RecordFinder', ['label' => 'Record Finder', 'alias' => 'recordfinder']); }); /* * Register navigation */ BackendMenu::registerCallback(function ($manager) { $manager->registerMenuItems('October.Backend', ['dashboard' => ['label' => 'backend::lang.dashboard.menu_label', 'icon' => 'icon-home', 'url' => Backend::url('backend'), 'permissions' => ['backend.access_dashboard'], 'order' => 1]]); }); /* * Register settings */ SettingsManager::instance()->registerCallback(function ($manager) { $manager->registerSettingItems('October.Backend', ['editor' => ['label' => 'backend::lang.editor.menu_label', 'description' => 'backend::lang.editor.menu_description', 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-code', 'url' => Backend::URL('backend/editorpreferences'), 'order' => 600, 'context' => 'mysettings'], 'backend_preferences' => ['label' => 'backend::lang.backend_preferences.menu_label', 'description' => 'backend::lang.backend_preferences.menu_description', 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-laptop', 'class' => 'Backend\\Models\\BackendPreferences', 'order' => 500, 'context' => 'mysettings'], 'myaccount' => ['label' => 'backend::lang.myaccount.menu_label', 'description' => 'backend::lang.myaccount.menu_description', 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-user', 'url' => Backend::URL('backend/users/myaccount'), 'order' => 400, 'context' => 'mysettings', 'keywords' => 'backend::lang.myaccount.menu_keywords'], 'access_logs' => ['label' => 'backend::lang.access_log.menu_label', 'description' => 'backend::lang.access_log.menu_description', 'category' => SettingsManager::CATEGORY_LOGS, 'icon' => 'icon-lock', 'url' => Backend::url('backend/accesslogs'), 'permissions' => ['backend.access_admin_logs'], 'order' => 800]]); }); /* * Register permissions */ BackendAuth::registerCallback(function ($manager) { $manager->registerPermissions('October.Backend', ['backend.access_dashboard' => ['label' => 'system::lang.permissions.view_the_dashboard', 'tab' => 'System'], 'backend.manage_users' => ['label' => 'system::lang.permissions.manage_other_administrators', 'tab' => 'System']]); }); /* * Register mail templates */ MailTemplate::registerCallback(function ($template) { $template->registerMailTemplates(['backend::mail.invite' => 'Invitation for newly created administrators.', 'backend::mail.restore' => 'Password reset instructions for backend-end administrators.']); }); }
/** * Register mail templating and settings override. */ protected function registerMailer() { /* * Override system mailer with mail settings */ Event::listen('mailer.beforeRegister', function () { if (MailSettings::isConfigured()) { MailSettings::applyConfigValues(); } }); /* * Override standard Mailer content with template */ Event::listen('mailer.beforeAddContent', function ($mailer, $message, $view, $data) { if (MailTemplate::addContentToMailer($message, $view, $data)) { return false; } }); }
/** * Register mail templates */ protected function registerMailer() { MailTemplate::registerCallback(function ($template) { $template->registerMailTemplates(['backend::mail.invite' => 'Invitation for newly created administrators.', 'backend::mail.restore' => 'Password reset instructions for backend-end administrators.']); }); }
public function index() { MailTemplate::syncAll(); $this->asExtension('ListController')->index(); $this->bodyClass = 'compact-container'; }
public function getWelcomeTemplateOptions() { return ['' => '- ' . Lang::get('rainlab.user::lang.settings.no_mail_template') . ' -'] + MailTemplate::orderBy('code')->lists('code', 'code'); }
/** * Register the service provider. * * @return void */ public function register() { /* * Register self */ parent::register('system'); /* * Register core providers */ App::register('October\\Rain\\Config\\ConfigServiceProvider'); App::register('October\\Rain\\Translation\\TranslationServiceProvider'); /* * Define path constants */ if (!defined('PATH_APP')) { define('PATH_APP', app_path()); } if (!defined('PATH_BASE')) { define('PATH_BASE', base_path()); } if (!defined('PATH_PUBLIC')) { define('PATH_PUBLIC', public_path()); } if (!defined('PATH_STORAGE')) { define('PATH_STORAGE', storage_path()); } if (!defined('PATH_PLUGINS')) { define('PATH_PLUGINS', base_path() . Config::get('cms.pluginsDir')); } /* * Register singletons */ App::singleton('string', function () { return new \October\Rain\Support\Str(); }); App::singleton('backend.helper', function () { return new \Backend\Classes\BackendHelper(); }); App::singleton('backend.menu', function () { return \Backend\Classes\NavigationManager::instance(); }); App::singleton('backend.auth', function () { return \Backend\Classes\AuthManager::instance(); }); /* * Register all plugins */ $pluginManager = PluginManager::instance(); $pluginManager->registerAll(); /* * Error handling for uncaught Exceptions */ App::error(function (\Exception $exception, $httpCode) { $handler = new ErrorHandler(); $isConsole = App::runningInConsole(); return $handler->handleException($exception, $httpCode, $isConsole); }); /* * Write all log events to the database */ Event::listen('illuminate.log', function ($level, $message, $context) { if (!DbDongle::hasDatabase()) { return; } EventLog::add($message, $level); }); /* * Register basic Twig */ App::bindShared('twig', function ($app) { $twig = new Twig_Environment(new TwigLoader(), ['auto_reload' => true]); $twig->addExtension(new TwigExtension()); return $twig; }); /* * Register .htm extension for Twig views */ App::make('view')->addExtension('htm', 'twig', function () { return new TwigEngine(App::make('twig')); }); /* * Register Twig that will parse strings */ App::bindShared('twig.string', function ($app) { $twig = $app['twig']; $twig->setLoader(new Twig_Loader_String()); return $twig; }); /* * Override system mailer with mail settings */ Event::listen('mailer.beforeRegister', function () { if (MailSettings::isConfigured()) { MailSettings::applyConfigValues(); } }); /* * Override standard Mailer content with template */ Event::listen('mailer.beforeAddContent', function ($mailer, $message, $view, $plain, $data) { if (MailTemplate::addContentToMailer($message, $view, $data)) { return false; } }); /* * Register other module providers */ foreach (Config::get('cms.loadModules', []) as $module) { if (strtolower(trim($module)) == 'system') { continue; } App::register('\\' . $module . '\\ServiceProvider'); } /* * Register navigation */ BackendMenu::registerCallback(function ($manager) { $manager->registerMenuItems('October.System', ['system' => ['label' => 'system::lang.system.menu_label', 'icon' => 'icon-cog', 'url' => Backend::url('system/settings'), 'permissions' => ['backend.manage_users', 'system.*'], 'order' => 1000]]); }); /* * Register report widgets */ WidgetManager::instance()->registerReportWidgets(function ($manager) { $manager->registerReportWidget('System\\ReportWidgets\\Status', ['label' => 'backend::lang.dashboard.status.widget_title_default', 'context' => 'dashboard']); }); /* * Register permissions */ BackendAuth::registerCallback(function ($manager) { $manager->registerPermissions('October.System', ['system.manage_settings' => ['label' => 'system::lang.permissions.manage_system_settings', 'tab' => 'System'], 'system.manage_updates' => ['label' => 'system::lang.permissions.manage_software_updates', 'tab' => 'System'], 'system.manage_mail_templates' => ['label' => 'system::lang.permissions.manage_mail_templates', 'tab' => 'System']]); }); /* * Register markup tags */ MarkupManager::instance()->registerCallback(function ($manager) { $manager->registerFunctions(['post' => 'post', 'link_to' => 'link_to', 'link_to_asset' => 'link_to_asset', 'link_to_route' => 'link_to_route', 'link_to_action' => 'link_to_action', 'asset' => 'asset', 'action' => 'action', 'url' => 'url', 'route' => 'route', 'secure_url' => 'secure_url', 'secure_asset' => 'secure_asset', 'str_*' => ['Str', '*'], 'url_*' => ['URL', '*'], 'html_*' => ['HTML', '*'], 'form_*' => ['Form', '*'], 'form_macro' => ['Form', '__call']]); $manager->registerFilters(['slug' => ['Str', 'slug'], 'plural' => ['Str', 'plural'], 'singular' => ['Str', 'singular'], 'finish' => ['Str', 'finish'], 'snake' => ['Str', 'snake'], 'camel' => ['Str', 'camel'], 'studly' => ['Str', 'studly'], 'md' => ['October\\Rain\\Support\\Markdown', 'parse']]); }); /* * Register settings */ SettingsManager::instance()->registerCallback(function ($manager) { $manager->registerSettingItems('October.System', ['administrators' => ['label' => 'backend::lang.user.menu_label', 'description' => 'backend::lang.user.menu_description', 'category' => SettingsManager::CATEGORY_SYSTEM, 'icon' => 'icon-users', 'url' => Backend::url('backend/users'), 'permissions' => ['backend.manage_users'], 'order' => 600], 'updates' => ['label' => 'system::lang.updates.menu_label', 'description' => 'system::lang.updates.menu_description', 'category' => SettingsManager::CATEGORY_SYSTEM, 'icon' => 'icon-cloud-download', 'url' => Backend::url('system/updates'), 'permissions' => ['system.manage_updates'], 'order' => 700], 'event_logs' => ['label' => 'system::lang.event_log.menu_label', 'description' => 'system::lang.event_log.menu_description', 'category' => SettingsManager::CATEGORY_LOGS, 'icon' => 'icon-exclamation-triangle', 'url' => Backend::url('system/eventlogs'), 'permissions' => ['system.access_event_logs'], 'order' => 800], 'request_logs' => ['label' => 'system::lang.request_log.menu_label', 'description' => 'system::lang.request_log.menu_description', 'category' => SettingsManager::CATEGORY_LOGS, 'icon' => 'icon-file-o', 'url' => Backend::url('system/requestlogs'), 'permissions' => ['system.access_request_logs'], 'order' => 800], 'mail_settings' => ['label' => 'system::lang.mail.menu_label', 'description' => 'system::lang.mail.menu_description', 'category' => SettingsManager::CATEGORY_MAIL, 'icon' => 'icon-envelope', 'class' => 'System\\Models\\MailSettings', 'order' => 400], 'mail_templates' => ['label' => 'system::lang.mail_templates.menu_label', 'description' => 'system::lang.mail_templates.menu_description', 'category' => SettingsManager::CATEGORY_MAIL, 'icon' => 'icon-envelope-square', 'url' => Backend::url('system/mailtemplates'), 'order' => 500]]); }); /* * Register console commands */ $this->registerConsoleCommand('october.up', 'System\\Console\\OctoberUp'); $this->registerConsoleCommand('october.down', 'System\\Console\\OctoberDown'); $this->registerConsoleCommand('october.update', 'System\\Console\\OctoberUpdate'); $this->registerConsoleCommand('october.util', 'System\\Console\\OctoberUtil'); $this->registerConsoleCommand('plugin.install', 'System\\Console\\PluginInstall'); $this->registerConsoleCommand('plugin.remove', 'System\\Console\\PluginRemove'); $this->registerConsoleCommand('plugin.refresh', 'System\\Console\\PluginRefresh'); /* * Override clear cache command */ App::bindShared('command.cache.clear', function ($app) { return new \System\Console\CacheClear($app['cache'], $app['files']); }); /* * Register the sidebar for the System main menu */ BackendMenu::registerContextSidenavPartial('October.System', 'system', '@/modules/system/partials/_system_sidebar.htm'); }
/** * Register the service provider. * * @return void */ public function register() { /* * Register self */ parent::register('system'); /* * Register singletons */ App::singleton('backend.helper', function () { return new \Backend\Helpers\Backend(); }); App::singleton('backend.menu', function () { return \Backend\Classes\NavigationManager::instance(); }); App::singleton('backend.auth', function () { return \Backend\Classes\AuthManager::instance(); }); /* * Check for CLI or system/updates route and disable any plugin initialization * @todo This should be moved to middleware */ $requestPath = \October\Rain\Router\Helper::normalizeUrl(\Request::path()); $systemPath = \October\Rain\Router\Helper::normalizeUrl(Config::get('cms.backendUri') . '/system/updates'); if (stripos($requestPath, $systemPath) === 0) { PluginManager::$noInit = true; } $updateCommands = ['october:up', 'october:update']; if (App::runningInConsole() && count(array_intersect($updateCommands, Request::server('argv'))) > 0) { PluginManager::$noInit = true; } /* * Register all plugins */ $pluginManager = PluginManager::instance(); $pluginManager->registerAll(); /* * Allow plugins to use the scheduler */ Event::listen('console.schedule', function ($schedule) use($pluginManager) { foreach ($pluginManager->getPlugins() as $plugin) { if (method_exists($plugin, 'registerSchedule')) { $plugin->registerSchedule($schedule); } } }); /* * Error handling for uncaught Exceptions */ Event::listen('exception.beforeRender', function ($exception, $httpCode, $request) { $handler = new ErrorHandler(); return $handler->handleException($exception); }); /* * Write all log events to the database */ Event::listen('illuminate.log', function ($level, $message, $context) { if (DbDongle::hasDatabase() && !defined('OCTOBER_NO_EVENT_LOGGING')) { EventLog::add($message, $level); } }); /* * Register basic Twig */ App::singleton('twig', function ($app) { $twig = new Twig_Environment(new TwigLoader(), ['auto_reload' => true]); $twig->addExtension(new TwigExtension()); return $twig; }); /* * Register .htm extension for Twig views */ App::make('view')->addExtension('htm', 'twig', function () { return new TwigEngine(App::make('twig')); }); /* * Register Twig that will parse strings */ App::singleton('twig.string', function ($app) { $twig = $app['twig']; $twig->setLoader(new Twig_Loader_String()); return $twig; }); /* * Override system mailer with mail settings */ Event::listen('mailer.beforeRegister', function () { if (MailSettings::isConfigured()) { MailSettings::applyConfigValues(); } }); /* * Override standard Mailer content with template */ Event::listen('mailer.beforeAddContent', function ($mailer, $message, $view, $data) { if (MailTemplate::addContentToMailer($message, $view, $data)) { return false; } }); /* * Register other module providers */ foreach (Config::get('cms.loadModules', []) as $module) { if (strtolower(trim($module)) == 'system') { continue; } App::register('\\' . $module . '\\ServiceProvider'); } /* * Register navigation */ BackendMenu::registerCallback(function ($manager) { $manager->registerMenuItems('October.System', ['system' => ['label' => 'system::lang.settings.menu_label', 'icon' => 'icon-cog', 'url' => Backend::url('system/settings'), 'permissions' => ['backend.manage_users', 'system.*'], 'order' => 1000]]); }); /* * Register report widgets */ WidgetManager::instance()->registerReportWidgets(function ($manager) { $manager->registerReportWidget('System\\ReportWidgets\\Status', ['label' => 'backend::lang.dashboard.status.widget_title_default', 'context' => 'dashboard']); }); /* * Register permissions */ BackendAuth::registerCallback(function ($manager) { $manager->registerPermissions('October.System', ['system.manage_updates' => ['label' => 'system::lang.permissions.manage_software_updates', 'tab' => 'system::lang.permissions.name'], 'system.manage_mail_settings' => ['label' => 'system::lang.permissions.manage_mail_settings', 'tab' => 'system::lang.permissions.name'], 'system.manage_mail_templates' => ['label' => 'system::lang.permissions.manage_mail_templates', 'tab' => 'system::lang.permissions.name']]); }); /* * Register markup tags */ MarkupManager::instance()->registerCallback(function ($manager) { $manager->registerFunctions(['input' => 'input', 'post' => 'post', 'get' => 'get', 'link_to' => 'link_to', 'link_to_asset' => 'link_to_asset', 'link_to_route' => 'link_to_route', 'link_to_action' => 'link_to_action', 'asset' => 'asset', 'action' => 'action', 'url' => 'url', 'route' => 'route', 'secure_url' => 'secure_url', 'secure_asset' => 'secure_asset', 'str_*' => ['Str', '*'], 'url_*' => ['URL', '*'], 'html_*' => ['HTML', '*'], 'form_*' => ['Form', '*'], 'form_macro' => ['Form', '__call']]); $manager->registerFilters(['slug' => ['Str', 'slug'], 'plural' => ['Str', 'plural'], 'singular' => ['Str', 'singular'], 'finish' => ['Str', 'finish'], 'snake' => ['Str', 'snake'], 'camel' => ['Str', 'camel'], 'studly' => ['Str', 'studly'], 'trans' => ['Lang', 'get'], 'transchoice' => ['Lang', 'choice'], 'md' => ['Markdown', 'parse']]); }); /* * Register settings */ SettingsManager::instance()->registerCallback(function ($manager) { $manager->registerSettingItems('October.System', ['administrators' => ['label' => 'backend::lang.user.menu_label', 'description' => 'backend::lang.user.menu_description', 'category' => SettingsManager::CATEGORY_SYSTEM, 'icon' => 'icon-users', 'url' => Backend::url('backend/users'), 'permissions' => ['backend.manage_users'], 'order' => 600], 'updates' => ['label' => 'system::lang.updates.menu_label', 'description' => 'system::lang.updates.menu_description', 'category' => SettingsManager::CATEGORY_SYSTEM, 'icon' => 'icon-cloud-download', 'url' => Backend::url('system/updates'), 'permissions' => ['system.manage_updates'], 'order' => 700], 'event_logs' => ['label' => 'system::lang.event_log.menu_label', 'description' => 'system::lang.event_log.menu_description', 'category' => SettingsManager::CATEGORY_LOGS, 'icon' => 'icon-exclamation-triangle', 'url' => Backend::url('system/eventlogs'), 'permissions' => ['system.access_event_logs'], 'order' => 800], 'request_logs' => ['label' => 'system::lang.request_log.menu_label', 'description' => 'system::lang.request_log.menu_description', 'category' => SettingsManager::CATEGORY_LOGS, 'icon' => 'icon-file-o', 'url' => Backend::url('system/requestlogs'), 'permissions' => ['system.access_request_logs'], 'order' => 800], 'mail_settings' => ['label' => 'system::lang.mail.menu_label', 'description' => 'system::lang.mail.menu_description', 'category' => SettingsManager::CATEGORY_MAIL, 'icon' => 'icon-envelope', 'class' => 'System\\Models\\MailSettings', 'permissions' => ['system.manage_mail_settings'], 'order' => 400], 'mail_templates' => ['label' => 'system::lang.mail_templates.menu_label', 'description' => 'system::lang.mail_templates.menu_description', 'category' => SettingsManager::CATEGORY_MAIL, 'icon' => 'icon-envelope-square', 'url' => Backend::url('system/mailtemplates'), 'permissions' => ['system.manage_mail_templates'], 'order' => 500]]); }); /* * Add CMS based cache clearing to native command */ Event::listen('cache:cleared', function () { \System\Helpers\Cache::clear(); }); /* * Register console commands */ $this->registerConsoleCommand('october.up', 'System\\Console\\OctoberUp'); $this->registerConsoleCommand('october.down', 'System\\Console\\OctoberDown'); $this->registerConsoleCommand('october.update', 'System\\Console\\OctoberUpdate'); $this->registerConsoleCommand('october.util', 'System\\Console\\OctoberUtil'); $this->registerConsoleCommand('plugin.install', 'System\\Console\\PluginInstall'); $this->registerConsoleCommand('plugin.remove', 'System\\Console\\PluginRemove'); $this->registerConsoleCommand('plugin.refresh', 'System\\Console\\PluginRefresh'); /* * Register the sidebar for the System main menu */ BackendMenu::registerContextSidenavPartial('October.System', 'system', '~/modules/system/partials/_system_sidebar.htm'); }
/** * Attach event listeners on boot. * @return void */ public function boot() { // Before send: attach blank image that will track mail opens Event::listen('mailer.prepareSend', function ($self, $view, $message) { $swift = $message->getSwiftMessage(); $mail = Email::create(['code' => $view, 'to' => $swift->getTo(), 'cc' => $swift->getCc(), 'bcc' => $swift->getBcc(), 'subject' => $swift->getSubject(), 'body' => $swift->getBody(), 'sender' => $swift->getSender(), 'reply_to' => $swift->getReplyTo(), 'date' => $swift->getDate()]); $url = Backend::url('mja/mail/image/image', ['id' => $mail->id, 'hash' => $mail->hash . '.png']); $swift->setBody($swift->getBody() . '<img src="' . $url . '" style="display:none;width:0;height:0;" />'); }); // After send: log the result Event::listen('mailer.send', function ($self, $view, $message, $response) { $swift = $message->getSwiftMessage(); $mail = Email::where('code', $view)->get()->last(); if ($mail === null) { return; } $mail->response = $response; $mail->sent = true; $mail->save(); }); // Use for the mails sent list filter Event::listen('backend.filter.extendScopesBefore', function ($filter) { if (!$filter->getController() instanceof MailController) { return; } $filter->scopes['views']['options'] = []; $templates = MailTemplate::get(); foreach ($templates as $template) { $filter->scopes['views']['options'][$template->code] = $template->code; } }); // Extend the mail template so that we could have the number of sent emails // in the template list of this plugin. MailTemplate::extend(function ($model) { // Email relation $model->addDynamicMethod('emails', function () use($model) { return $model->hasMany('Mja\\Mail\\Models\\Email', 'code', 'code'); }); // Emails sent $model->addDynamicMethod('getTimesSentAttribute', function () use($model) { return (int) $model->emails()->count(); }); // Email opens $model->addDynamicMethod('getTimesOpenedAttribute', function () use($model) { return (int) $model->opens()->count(); }); // Last time sent $model->addDynamicMethod('getLastSentAttribute', function () use($model) { $email = $model->emails()->orderBy('id', 'desc')->first(); return $email ? $email->created_at : null; }); // Last time opened $model->addDynamicMethod('getLastOpenAttribute', function () use($model) { $emails = $model->emails()->get(); $last_open = null; foreach ($emails as $email) { $lo = $email->opens()->orderBy('id', 'desc')->first(); if ($lo && ($lo->created_at < $last_open || $last_open === null)) { $last_open = $lo->created_at; } } return $last_open; }); // Get the email opens by template $model->addDynamicMethod('opens', function () use($model) { $model->setKeyName('code'); $data = $model->hasManyThrough('Mja\\Mail\\Models\\EmailOpens', 'Mja\\Mail\\Models\\Email', 'code', 'email_id'); $model->setKeyName('id'); return $data; }); }); }