original_string: public function onSave()
      {
          $this->validateRequestTheme();
          $type = Request::input('templateType');
          $templatePath = trim(Request::input('templatePath'));
          $template = $templatePath ? $this->loadTemplate($type, $templatePath) : $this->createTemplate($type);
          $formWidget = $this->makeTemplateFormWidget($type, $template);
  
          $saveData = $formWidget->getSaveData();
          $postData = post();
          $templateData = [];
  
          $settings = array_get($saveData, 'settings', []) + Request::input('settings', []);
          $settings = $this->upgradeSettings($settings);
  
          if ($settings) {
              $templateData['settings'] = $settings;
          }
  
          $fields = ['markup', 'code', 'fileName', 'content'];
  
          foreach ($fields as $field) {
              if (array_key_exists($field, $saveData)) {
                  $templateData[$field] = $saveData[$field];
              }
              elseif (array_key_exists($field, $postData)) {
                  $templateData[$field] = $postData[$field];
              }
          }
  
          if (!empty($templateData['markup']) && Config::get('cms.convertLineEndings', false) === true) {
              $templateData['markup'] = $this->convertLineEndings($templateData['markup']);
          }
  
          if (!empty($templateData['code']) && Config::get('cms.convertLineEndings', false) === true) {
              $templateData['code'] = $this->convertLineEndings($templateData['code']);
          }
  
          if (
              !Request::input('templateForceSave') && $template->mtime
              && Request::input('templateMtime') != $template->mtime
          ) {
              throw new ApplicationException('mtime-mismatch');
          }
  
          $template->attributes = [];
          $template->fill($templateData);
          $template->save();
  
          /**
           * @event cms.template.save
           * Fires after a CMS template (page|partial|layout|content|asset) has been saved.
           *
           * Example usage:
           *
           *     Event::listen('cms.template.save', function ((\Cms\Controllers\Index) $controller, (mixed) $templateObject, (string) $type) {
           *         \Log::info("A $type has been saved");
           *     });
           *
           * Or
           *
           *     $CmsIndexController->bindEvent('template.save', function ((mixed) $templateObject, (string) $type) {
           *         \Log::info("A $type has been saved");
           *     });
           *
           */
          $this->fireSystemEvent('cms.template.save', [$template, $type]);
  
          Flash::success(Lang::get('cms::lang.template.saved'));
  
          $result = [
              'templatePath'  => $template->fileName,
              'templateMtime' => $template->mtime,
              'tabTitle'      => $this->getTabTitle($type, $template)
          ];
  
          if ($type === 'page') {
              $result['pageUrl'] = Url::to($template->url);
              $router = new Router($this->theme);
              $router->clearCache();
              CmsCompoundObject::clearCache($this->theme);
          }
  
          return $result;
      }
code: public function onSave()
      {
          $this->validateRequestTheme();
          $type = Request::input('templateType');
          $templatePath = trim(Request::input('templatePath'));
          $template = $templatePath ? $this->loadTemplate($type, $templatePath) : $this->createTemplate($type);
          $formWidget = $this->makeTemplateFormWidget($type, $template);
  
          $saveData = $formWidget->getSaveData();
          $postData = post();
          $templateData = [];
  
          $settings = array_get($saveData, 'settings', []) + Request::input('settings', []);
          $settings = $this->upgradeSettings($settings);
  
          if ($settings) {
              $templateData['settings'] = $settings;
          }
  
          $fields = ['markup', 'code', 'fileName', 'content'];
  
          foreach ($fields as $field) {
              if (array_key_exists($field, $saveData)) {
                  $templateData[$field] = $saveData[$field];
              }
              elseif (array_key_exists($field, $postData)) {
                  $templateData[$field] = $postData[$field];
              }
          }
  
          if (!empty($templateData['markup']) && Config::get('cms.convertLineEndings', false) === true) {
              $templateData['markup'] = $this->convertLineEndings($templateData['markup']);
          }
  
          if (!empty($templateData['code']) && Config::get('cms.convertLineEndings', false) === true) {
              $templateData['code'] = $this->convertLineEndings($templateData['code']);
          }
  
          if (
              !Request::input('templateForceSave') && $template->mtime
              && Request::input('templateMtime') != $template->mtime
          ) {
              throw new ApplicationException('mtime-mismatch');
          }
  
          $template->attributes = [];
          $template->fill($templateData);
          $template->save();
  
          /**
           * @event cms.template.save
           * Fires after a CMS template (page|partial|layout|content|asset) has been saved.
           *
           * Example usage:
           *
           *     Event::listen('cms.template.save', function ((\Cms\Controllers\Index) $controller, (mixed) $templateObject, (string) $type) {
           *         \Log::info("A $type has been saved");
           *     });
           *
           * Or
           *
           *     $CmsIndexController->bindEvent('template.save', function ((mixed) $templateObject, (string) $type) {
           *         \Log::info("A $type has been saved");
           *     });
           *
           */
          $this->fireSystemEvent('cms.template.save', [$template, $type]);
  
          Flash::success(Lang::get('cms::lang.template.saved'));
  
          $result = [
              'templatePath'  => $template->fileName,
              'templateMtime' => $template->mtime,
              'tabTitle'      => $this->getTabTitle($type, $template)
          ];
  
          if ($type === 'page') {
              $result['pageUrl'] = Url::to($template->url);
              $router = new Router($this->theme);
              $router->clearCache();
              CmsCompoundObject::clearCache($this->theme);
          }
  
          return $result;
      }
code_tokens: public function onSave ( ) { $ this -> validateRequestTheme ( ) ; $ type = Request :: input ( 'templateType' ) ; $ templatePath = trim ( Request :: input ( 'templatePath' ) ) ; $ template = $ templatePath ? $ this -> loadTemplate ( $ type , $ templatePath ) : $ this -> createTemplate ( $ type ) ; $ formWidget = $ this -> makeTemplateFormWidget ( $ type , $ template ) ; $ saveData = $ formWidget -> getSaveData ( ) ; $ postData = post ( ) ; $ templateData = [ ] ; $ settings = array_get ( $ saveData , 'settings' , [ ] ) + Request :: input ( 'settings' , [ ] ) ; $ settings = $ this -> upgradeSettings ( $ settings ) ; if ( $ settings ) { $ templateData [ 'settings' ] = $ settings ; } $ fields = [ 'markup' , 'code' , 'fileName' , 'content' ] ; foreach ( $ fields as $ field ) { if ( array_key_exists ( $ field , $ saveData ) ) { $ templateData [ $ field ] = $ saveData [ $ field ] ; } elseif ( array_key_exists ( $ field , $ postData ) ) { $ templateData [ $ field ] = $ postData [ $ field ] ; } } if ( ! empty ( $ templateData [ 'markup' ] ) && Config :: get ( 'cms.convertLineEndings' , false ) === true ) { $ templateData [ 'markup' ] = $ this -> convertLineEndings ( $ templateData [ 'markup' ] ) ; } if ( ! empty ( $ templateData [ 'code' ] ) && Config :: get ( 'cms.convertLineEndings' , false ) === true ) { $ templateData [ 'code' ] = $ this -> convertLineEndings ( $ templateData [ 'code' ] ) ; } if ( ! Request :: input ( 'templateForceSave' ) && $ template -> mtime && Request :: input ( 'templateMtime' ) != $ template -> mtime ) { throw new ApplicationException ( 'mtime-mismatch' ) ; } $ template -> attributes = [ ] ; $ template -> fill ( $ templateData ) ; $ template -> save ( ) ; /**
           * @event cms.template.save
           * Fires after a CMS template (page|partial|layout|content|asset) has been saved.
           *
           * Example usage:
           *
           *     Event::listen('cms.template.save', function ((\Cms\Controllers\Index) $controller, (mixed) $templateObject, (string) $type) {
           *         \Log::info("A $type has been saved");
           *     });
           *
           * Or
           *
           *     $CmsIndexController->bindEvent('template.save', function ((mixed) $templateObject, (string) $type) {
           *         \Log::info("A $type has been saved");
           *     });
           *
           */ $ this -> fireSystemEvent ( 'cms.template.save' , [ $ template , $ type ] ) ; Flash :: success ( Lang :: get ( 'cms::lang.template.saved' ) ) ; $ result = [ 'templatePath' => $ template -> fileName , 'templateMtime' => $ template -> mtime , 'tabTitle' => $ this -> getTabTitle ( $ type , $ template ) ] ; if ( $ type === 'page' ) { $ result [ 'pageUrl' ] = Url :: to ( $ template -> url ) ; $ router = new Router ( $ this -> theme ) ; $ router -> clearCache ( ) ; CmsCompoundObject :: clearCache ( $ this -> theme ) ; } return $ result ; }
docstring: Saves the template currently open
  @return array
docstring_tokens: Saves the template currently open