Merge pull request #6739 from jitendrapurohit/CRM-17205
[civicrm-core.git] / api / Exception.php
CommitLineData
e7c0be9a 1<?php
2/**
61fe4988 3 * @file
e7c0be9a 4 * File for the CiviCRM APIv3 API wrapper
5 *
6 * @package CiviCRM_APIv3
e7c0be9a 7 *
e7112fa7 8 * @copyright CiviCRM LLC (c) 2004-2015
e7c0be9a 9 */
10
11/**
7cdbcb16
TO
12 * This api exception returns more information than the default one. The aim
13 * it let the api consumer know better what is exactly the error without
14 * having to parse the error message.
15 *
16 * If you consume an api that doesn't return an error_code or the extra data
17 * you need, consider improving the api and contribute.
e7c0be9a 18 */
8882ff5c 19class API_Exception extends Exception {
5fda6437
TO
20 const UNAUTHORIZED = 'unauthorized';
21 const NOT_IMPLEMENTED = 'not-found';
22
e7c0be9a 23 private $extraParams = array();
aa1b1481
EM
24
25 /**
2e66abf8
EM
26 * Class constructor.
27 *
aa1b1481 28 * @param string $message
8882ff5c
TO
29 * The human friendly error message.
30 * @param mixed $error_code
31 * A computer friendly error code. By convention, no space (but underscore
32 * allowed) (ex: mandatory_missing, duplicate, invalid_format).
aa1b1481 33 * @param array $extraParams
8882ff5c
TO
34 * Extra params to return. eg an extra array of ids. It is not mandatory,
35 * but can help the computer using the api. Keep in mind the api consumer
36 * isn't to be trusted. eg. the database password is NOT a good extra data.
37 * @param Exception|NULL $previous
38 * A previous exception which caused this new exception.
aa1b1481 39 */
8882ff5c
TO
40 public function __construct($message, $error_code = 0, $extraParams = array(), Exception $previous = NULL) {
41 // Using int for error code "old way") ?
42 if (is_numeric($error_code)) {
e7c0be9a 43 $code = $error_code;
8882ff5c
TO
44 }
45 else {
46 $code = 0;
47 }
e7c0be9a 48 parent::__construct(ts($message), $code, $previous);
49 $this->extraParams = $extraParams + array('error_code' => $error_code);
50 }
51
aa1b1481 52 /**
22242c87
EM
53 * Custom string representation of object.
54 *
aa1b1481
EM
55 * @return string
56 */
e7c0be9a 57 public function __toString() {
58 return __CLASS__ . ": [{$this->code}]: {$this->message}\n";
59 }
60
aa1b1481 61 /**
dc64d047
EM
62 * Get extra parameters.
63 *
aa1b1481
EM
64 * @return array
65 */
e7c0be9a 66 public function getExtraParams() {
67 return $this->extraParams;
68 }
69
aa1b1481 70 /**
dc64d047
EM
71 * Get error codes.
72 *
aa1b1481
EM
73 * @return array
74 */
8882ff5c 75 public function getErrorCodes() {
e7c0be9a 76 return array(
8882ff5c
TO
77 2000 => '$params was not an array',
78 2001 => 'Invalid Value for Date field',
79 2100 => 'String value is longer than permitted length',
80 self::UNAUTHORIZED => 'Unauthorized',
81 self::NOT_IMPLEMENTED => 'Entity or method is not implemented',
82 );
e7c0be9a 83 }
96025800 84
e7c0be9a 85}
8882ff5c 86
6b359437 87/**
88 * This api exception returns more information than the default one. We are using it rather than
89 * API_Exception from the api wrapper as the namespace is more generic
6b359437 90 */
8882ff5c 91class CiviCRM_API3_Exception extends Exception {
6b359437 92 private $extraParams = array();
aa1b1481
EM
93
94 /**
dc64d047
EM
95 * Class constructor.
96 *
aa1b1481 97 * @param string $message
8882ff5c
TO
98 * The human friendly error message.
99 * @param mixed $error_code
100 * A computer friendly error code. By convention, no space (but underscore
101 * allowed) (ex: mandatory_missing, duplicate, invalid_format).
aa1b1481 102 * @param array $extraParams
8882ff5c
TO
103 * Extra params to return. eg an extra array of ids. It is not mandatory,
104 * but can help the computer using the api. Keep in mind the api consumer
105 * isn't to be trusted. eg. the database password is NOT a good extra data.
106 * @param Exception|NULL $previous
107 * A previous exception which caused this new exception.
aa1b1481 108 */
8882ff5c 109 public function __construct($message, $error_code, $extraParams = array(), Exception $previous = NULL) {
6b359437 110 parent::__construct(ts($message));
111 $this->extraParams = $extraParams + array('error_code' => $error_code);
112 }
113
aa1b1481 114 /**
22242c87
EM
115 * Custom string representation of object.
116 *
aa1b1481
EM
117 * @return string
118 */
6b359437 119 public function __toString() {
120 return __CLASS__ . ": [{$this->extraParams['error_code']}: {$this->message}\n";
121 }
122
8882ff5c 123 /**
22242c87
EM
124 * Get error code.
125 *
8882ff5c
TO
126 * @return mixed
127 */
6b359437 128 public function getErrorCode() {
129 return $this->extraParams['error_code'];
130 }
aa1b1481
EM
131
132 /**
dc64d047
EM
133 * Get extra parameters.
134 *
aa1b1481
EM
135 * @return array
136 */
6b359437 137 public function getExtraParams() {
138 return $this->extraParams;
139 }
96025800 140
6b359437 141}