create custom exceptions
This commit is contained in:
parent
7a751e92bf
commit
43be624bf6
5 changed files with 127 additions and 16 deletions
43
CRM/Twingle/Exceptions/BaseException.php
Normal file
43
CRM/Twingle/Exceptions/BaseException.php
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use CRM_Twingle_ExtensionUtil as E;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple custom exception class that indicates a problem within a class
|
||||||
|
* of the Twingle API extension.
|
||||||
|
*/
|
||||||
|
class CRM_Twingle_Exceptions_BaseException extends Exception {
|
||||||
|
|
||||||
|
private string $error_code;
|
||||||
|
private string $log_message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* BaseException Constructor
|
||||||
|
* @param string $message
|
||||||
|
* Error message
|
||||||
|
* @param string $error_code
|
||||||
|
* A meaningful error code
|
||||||
|
*/
|
||||||
|
public function __construct(string $message = '', string $error_code = '') {
|
||||||
|
parent::__construct($message, 1);
|
||||||
|
$this->log_message = !empty($message) ? E::LONG_NAME . ': ' . $message : '';
|
||||||
|
$this->error_code = $error_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the error message, but with the extension name prefixed.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getLogMessage() {
|
||||||
|
return $this->log_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the error code.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getErrorCode() {
|
||||||
|
return $this->error_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
16
CRM/Twingle/Exceptions/ProfileException.php
Normal file
16
CRM/Twingle/Exceptions/ProfileException.php
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple custom exception that indicates a problem within the
|
||||||
|
* CRM_Twingle_Profile class
|
||||||
|
*/
|
||||||
|
class CRM_Twingle_Exceptions_ProfileException extends CRM_Twingle_Exceptions_BaseException {
|
||||||
|
|
||||||
|
public const ERROR_CODE_PROFILE_NOT_FOUND = 'profile_not_found';
|
||||||
|
public const ERROR_CODE_DEFAULT_PROFILE_NOT_FOUND = 'default_profile_not_found';
|
||||||
|
public const ERROR_CODE_COULD_NOT_SAVE_PROFILE = 'could_not_save_profile';
|
||||||
|
public const ERROR_CODE_COULD_NOT_RESET_PROFILE = 'could_not_reset_profile';
|
||||||
|
public const ERROR_CODE_COULD_NOT_DELETE_PROFILE = 'could_not_delete_profile';
|
||||||
|
public const ERROR_CODE_UNKNOWN_PROFILE_ATTRIBUTE = 'unknown_profile_attribute';
|
||||||
|
|
||||||
|
}
|
34
CRM/Twingle/Exceptions/ProfileValidationError.php
Normal file
34
CRM/Twingle/Exceptions/ProfileValidationError.php
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple custom error indicating a problem with the validation of the
|
||||||
|
* CRM_Twingle_Profile
|
||||||
|
*/
|
||||||
|
class CRM_Twingle_Exceptions_ProfileValidationError extends CRM_Twingle_Exceptions_BaseException {
|
||||||
|
|
||||||
|
private string $affected_field_name;
|
||||||
|
public const ERROR_CODE_PROFILE_VALIDATION_FAILED = 'profile_validation_failed';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ProfileValidationError Constructor
|
||||||
|
* @param string $affected_field_name
|
||||||
|
* The name of the profile field which caused the exception
|
||||||
|
* @param string $message
|
||||||
|
* Error message
|
||||||
|
* @param string $error_code
|
||||||
|
* A meaningful error code
|
||||||
|
*/
|
||||||
|
public function __construct(string $affected_field_name, string $message = '', string $error_code = '') {
|
||||||
|
parent::__construct($message, 1);
|
||||||
|
$this->affected_field_name = $affected_field_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name of the profile field that caused the exception.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getAffectedFieldName() {
|
||||||
|
return $this->affected_field_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -16,6 +16,8 @@
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
use CRM_Twingle_ExtensionUtil as E;
|
use CRM_Twingle_ExtensionUtil as E;
|
||||||
|
use CRM_Twingle_Exceptions_ProfileException as ProfileException;
|
||||||
|
use CRM_Twingle_Exceptions_ProfileValidationError as ProfileValidationError;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Form controller class
|
* Form controller class
|
||||||
|
@ -633,23 +635,33 @@ class CRM_Twingle_Form_Profile extends CRM_Core_Form {
|
||||||
*/
|
*/
|
||||||
public function postProcess() {
|
public function postProcess() {
|
||||||
$values = $this->exportValues();
|
$values = $this->exportValues();
|
||||||
if (in_array($this->_op, ['create', 'edit', 'copy'])) {
|
try {
|
||||||
if (empty($values['name'])) {
|
if (in_array($this->_op, ['create', 'edit', 'copy'])) {
|
||||||
$values['name'] = 'default';
|
if (empty($values['name'])) {
|
||||||
}
|
$values['name'] = 'default';
|
||||||
$this->profile->setName($values['name']);
|
|
||||||
foreach ($this->profile->getData() as $element_name => $value) {
|
|
||||||
if ($element_name == 'newsletter_double_opt_in') {
|
|
||||||
$values[$element_name] = (int) isset($values[$element_name]);
|
|
||||||
}
|
}
|
||||||
if (isset($values[$element_name])) {
|
$this->profile->setName($values['name']);
|
||||||
$this->profile->setAttribute($element_name, $values[$element_name]);
|
foreach ($this->profile->getData() as $element_name => $value) {
|
||||||
|
if ($element_name == 'newsletter_double_opt_in') {
|
||||||
|
$values[$element_name] = (int) isset($values[$element_name]);
|
||||||
|
}
|
||||||
|
if (isset($values[$element_name])) {
|
||||||
|
$this->profile->setAttribute($element_name, $values[$element_name]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
$this->profile->saveProfile();
|
||||||
}
|
}
|
||||||
$this->profile->saveProfile();
|
elseif ($this->_op == 'delete') {
|
||||||
}
|
$this->profile->deleteProfile();
|
||||||
elseif ($this->_op == 'delete') {
|
}
|
||||||
$this->profile->deleteProfile();
|
} catch (ProfileException $e) {
|
||||||
|
Civi::log()->error($e->getLogMessage());
|
||||||
|
CRM_Core_Session::setStatus(
|
||||||
|
E::ts('Error'),
|
||||||
|
$e->getMessage(),
|
||||||
|
'error',
|
||||||
|
['unique' => TRUE]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
parent::postProcess();
|
parent::postProcess();
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
declare(strict_types = 1);
|
declare(strict_types = 1);
|
||||||
|
|
||||||
use CRM_Twingle_ExtensionUtil as E;
|
use CRM_Twingle_ExtensionUtil as E;
|
||||||
|
use CRM_Twingle_Exceptions_ProfileException as ProfileException;
|
||||||
|
use CRM_Twingle_Exceptions_ProfileValidationError as ProfileValidationError;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Profiles define how incoming submissions from the Twingle API are
|
* Profiles define how incoming submissions from the Twingle API are
|
||||||
|
@ -142,12 +144,15 @@ class CRM_Twingle_Profile {
|
||||||
* @param string $attribute_name
|
* @param string $attribute_name
|
||||||
* @param mixed $value
|
* @param mixed $value
|
||||||
*
|
*
|
||||||
* @throws \Exception
|
* @throws \CRM_Twingle_Exceptions_ProfileException
|
||||||
* When the attribute name is not known.
|
* When the attribute name is not known.
|
||||||
*/
|
*/
|
||||||
public function setAttribute($attribute_name, $value) {
|
public function setAttribute($attribute_name, $value) {
|
||||||
if (!in_array($attribute_name, self::allowedAttributes())) {
|
if (!in_array($attribute_name, self::allowedAttributes())) {
|
||||||
throw new Exception(E::ts('Unknown attribute %1.', [1 => $attribute_name]));
|
throw new ProfileException(
|
||||||
|
E::ts('Unknown attribute %1.', [1 => $attribute_name]),
|
||||||
|
ProfileException::ERROR_CODE_UNKNOWN_PROFILE_ATTRIBUTE
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// TODO: Check if value is acceptable.
|
// TODO: Check if value is acceptable.
|
||||||
$this->data[$attribute_name] = $value;
|
$this->data[$attribute_name] = $value;
|
||||||
|
@ -430,6 +435,7 @@ class CRM_Twingle_Profile {
|
||||||
* Get the stats (access_count, last_access) for all twingle profiles
|
* Get the stats (access_count, last_access) for all twingle profiles
|
||||||
*
|
*
|
||||||
* @return CRM_Twingle_Profile[]
|
* @return CRM_Twingle_Profile[]
|
||||||
|
* @throws \Civi\Core\Exception\DBQueryException
|
||||||
*/
|
*/
|
||||||
public static function getProfileStats() {
|
public static function getProfileStats() {
|
||||||
$stats = [];
|
$stats = [];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue