Example #1
0
 /**
  * Populates template and related models with the data, validates and saves
  * @param Template $template
  * @param array $data
  * @return bool
  */
 public function saveTemplate(Template $template, $data)
 {
     if ($template->load($data)) {
         $widgetAreas = $this->loadWidgetAreas($data);
         $widgets = $this->loadWidgets($data, 'Widgets');
         $valid = true;
         $valid = $template->validate() && $valid;
         $first = reset($widgetAreas);
         $valid = Model::validateMultiple($widgetAreas, array_diff($first->activeAttributes(), ['template_id'])) && $valid;
         $valid = Model::validateMultiple($widgets) && $valid;
         if ($valid && $template->save(false)) {
             if ($widgetAreas) {
                 foreach ($widgetAreas as $area) {
                     $area->template_id = $template->id;
                     if ($widgets) {
                         $this->setWidgets($area, $widgets);
                     }
                     $area->save();
                 }
             }
             return true;
         } else {
             if ($widgetAreas) {
                 $template->populateRelation('widgetAreas', $widgetAreas);
             }
             if ($widgets) {
                 $this->linkWidgets($widgetAreas, $widgets);
             }
         }
     }
     return false;
 }