/**
  * Create the settings inheriting default values defined in the type
  *
  */
 protected function createSettings()
 {
     $type_settings = $this->type->getSettings();
     /** @var srCertificateTypeSetting $type_setting */
     foreach ($type_settings as $type_setting) {
         $setting = srCertificateDefinitionSetting::where(array('definition_id' => $this->getId(), 'identifier' => $type_setting->getIdentifier()))->first();
         if (!$setting) {
             $setting = new srCertificateDefinitionSetting();
             $setting->create();
         }
         $setting->setIdentifier($type_setting->getIdentifier());
         $setting->setDefinitionId($this->getId());
         $setting->setValue($type_setting->getValue());
         $setting->update();
         $this->settings[] = $setting;
     }
     foreach ($this->type->getCustomSettings() as $custom_setting) {
         $setting = srCertificateCustomDefinitionSetting::where(array('definition_id' => $this->getId(), 'identifier' => $type_setting->getIdentifier()))->first();
         if (!$setting) {
             $setting = new srCertificateCustomDefinitionSetting();
             $setting->create();
         }
         $setting->setDefinitionId($this->getId());
         $setting->setValue($custom_setting->getValue());
         $setting->setIdentifier($custom_setting->getIdentifier());
         $setting->update();
         $this->custom_settings[] = $setting;
     }
 }
 /**
  * Get settings
  */
 protected function buildData()
 {
     $data = array();
     /** @var $setting srCertificateTypeSetting */
     foreach ($this->type->getSettings() as $setting) {
         $row = array();
         $row['identifier'] = $setting->getIdentifier();
         $row['setting'] = $this->pl->txt("setting_id_" . $setting->getIdentifier());
         $row['editable_in'] = implode(',', $setting->getEditableIn());
         $default_value = $setting->getValue();
         switch ($setting->getIdentifier()) {
             case srCertificateTypeSetting::IDENTIFIER_VALIDITY_TYPE:
                 $default_value = $this->pl->txt("setting_validity_{$default_value}");
                 break;
             case srCertificateTypeSetting::IDENTIFIER_VALIDITY:
                 $validity_type = $this->type->getSettingByIdentifier(srCertificateTypeSetting::IDENTIFIER_VALIDITY_TYPE)->getValue();
                 if ($default_value && $validity_type == srCertificateTypeSetting::VALIDITY_TYPE_DATE_RANGE) {
                     $date_data = json_decode($default_value);
                     $default_value = sprintf($this->pl->txt('validity_date_range'), $date_data->m, $date_data->d);
                 }
                 break;
         }
         $row['default_value'] = $default_value;
         $data[] = $row;
     }
     $this->setData($data);
 }