'required|unique:system_mail_layouts', 'name' => 'required', 'content_html' => 'required', ]; public static $codeCache; public function beforeDelete() { if ($this->is_locked) { throw new ApplicationException('Cannot delete this template because it is locked'); } } public static function listCodes() { if (self::$codeCache !== null) { return self::$codeCache; } return self::$codeCache = self::lists('id', 'code'); } public static function getIdFromCode($code) { return array_get(self::listCodes(), $code); } /** * Loops over each mail layout and ensures the system has a layout, * if the layout does not exist, it will create one. * @return void */ public static function createLayouts() { $dbLayouts = self::lists('code', 'code'); $definitions = MailManager::instance()->listRegisteredLayouts(); foreach ($definitions as $code => $path) { if (array_key_exists($code, $dbLayouts)) { continue; } $layout = new static; $layout->code = $code; $layout->is_locked = true; $layout->fillFromView($path); $layout->save(); } } public function fillFromCode($code = null) { $definitions = MailManager::instance()->listRegisteredLayouts(); if ($code === null) { $code = $this->code; } if (!$definition = array_get($definitions, $code)) { throw new ApplicationException('Unable to find a registered layout with code: '.$code); } $this->fillFromView($definition); } public function fillFromView($path) { $sections = self::getTemplateSections($path); $css = ' @media only screen and (max-width: 600px) { .inner-body { width: 100% !important; } .footer { width: 100% !important; } } @media only screen and (max-width: 500px) { .button { width: 100% !important; } } '; $this->name = array_get($sections, 'settings.name', '???'); $this->content_css = $css; $this->content_html = array_get($sections, 'html'); $this->content_text = array_get($sections, 'text'); } protected static function getTemplateSections($code) { return MailParser::parse(File::get(View::make($code)->getPath())); } }