diff --git a/CRM/Twingle/Form/Profile.php b/CRM/Twingle/Form/Profile.php index 1f28cfe..5c4bdc7 100644 --- a/CRM/Twingle/Form/Profile.php +++ b/CRM/Twingle/Form/Profile.php @@ -201,27 +201,29 @@ class CRM_Twingle_Form_Profile extends CRM_Core_Form { // Assign template variables. $this->assign('op', $this->_op); - $this->assign('profile_name', $this->profile->getName()); + $this->assign('profile_name', $profile_name); $this->assign('is_default', $this->profile->is_default()); // Add form elements. - $is_default = $profile_name == 'default'; - $this->add( - ($is_default ? 'static' : 'text'), - 'name', - E::ts('Profile name'), - array(), - !$is_default - ); - $this->add( 'text', // field type - 'selector', // field name - E::ts('Project IDs'), // field label - ['class' => 'huge'], - TRUE // is required + 'name', // field name + E::ts('Profile name'), + ['class' => 'huge'] + ($this->profile->is_default() && $this->_op == 'edit' ? ['readonly'] : []), + !$this->profile->is_default() ); + // Do only display selector if this is not the default profile + if (!$this->profile->is_default()) { + $this->add( + 'text', // field type + 'selector', // field name + E::ts('Project IDs'), // field label + ['class' => 'huge'], + TRUE // is required + ); + } + $this->add( 'select', 'xcm_profile', diff --git a/CRM/Twingle/Page/Profiles.php b/CRM/Twingle/Page/Profiles.php index f4e6dad..a4c85b0 100644 --- a/CRM/Twingle/Page/Profiles.php +++ b/CRM/Twingle/Page/Profiles.php @@ -23,6 +23,7 @@ class CRM_Twingle_Page_Profiles extends CRM_Core_Page { foreach (CRM_Twingle_Profile::getProfiles() as $profile_id => $profile) { $profiles[$profile_id]['id'] = $profile_id; $profiles[$profile_id]['name'] = $profile->getName(); + $profiles[$profile_id]['is_default'] = $profile->is_default(); foreach (CRM_Twingle_Profile::allowedAttributes() as $attribute) { $profiles[$profile_id][$attribute] = $profile->getAttribute($attribute); } diff --git a/CRM/Twingle/Profile.php b/CRM/Twingle/Profile.php index 7811644..806e60c 100644 --- a/CRM/Twingle/Profile.php +++ b/CRM/Twingle/Profile.php @@ -164,6 +164,15 @@ class CRM_Twingle_Profile { $this->name = $name; } + /** + * Is this the default profile? + * + * @return bool + */ + public function is_default() { + return $this->name == 'default'; + } + /** * Retrieves an attribute of the profile. * @@ -445,18 +454,29 @@ class CRM_Twingle_Profile { * @param $project_id * * @return CRM_Twingle_Profile + * @throws \CRM_Twingle_Exceptions_ProfileException + * @throws \Civi\Core\Exception\DBQueryException */ public static function getProfileForProject($project_id) { $profiles = self::getProfiles(); + $default_profile = NULL; foreach ($profiles as $profile) { if ($profile->matches($project_id)) { return $profile; } + if ($profile->is_default()) { + $default_profile = $profile; + } } // If none matches, use the default profile. - return $profiles['default']; + if (!empty($default_profile)) { + return $default_profile; + } + else { + throw new ProfileException('Could not find default profile', ProfileException::ERROR_CODE_DEFAULT_PROFILE_NOT_FOUND); + } } /** diff --git a/templates/CRM/Twingle/Form/Profile.tpl b/templates/CRM/Twingle/Form/Profile.tpl index 00794ef..df54418 100644 --- a/templates/CRM/Twingle/Form/Profile.tpl +++ b/templates/CRM/Twingle/Form/Profile.tpl @@ -28,6 +28,7 @@ + {if not $form.is_default} {$form.selector.label}