예제 #1
0
 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;
 }
예제 #2
0
 /**
  * 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);
         }
     }
 }
예제 #3
0
 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;
 }
예제 #4
0
 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;
 }
예제 #5
0
 /**
  * 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');
     });
 }
예제 #6
0
 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;
 }
예제 #7
0
 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';
 }
예제 #8
0
 /**
  * ПОлучаем список шаблонов для рассылки
  * @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;
 }
예제 #9
0
 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;
     }
 }
예제 #10
0
 /**
  * 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.']);
     });
 }
예제 #11
0
 /**
  * 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;
         }
     });
 }
예제 #12
0
 /**
  * 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.']);
     });
 }
예제 #13
0
 public function index()
 {
     MailTemplate::syncAll();
     $this->asExtension('ListController')->index();
     $this->bodyClass = 'compact-container';
 }
예제 #14
0
 public function getWelcomeTemplateOptions()
 {
     return ['' => '- ' . Lang::get('rainlab.user::lang.settings.no_mail_template') . ' -'] + MailTemplate::orderBy('code')->lists('code', 'code');
 }
예제 #15
0
 /**
  * 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');
 }
예제 #16
0
 /**
  * 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');
 }
예제 #17
0
 /**
  * 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;
         });
     });
 }