}
/**
- * Determine whether this is a developmental system.
+ * Determine whether this system is deployed using version control.
+ *
+ * Normally sites would tune their php error settings to prevent deprecation
+ * notices appearing on a live site. However, on some systems the user
+ * does not have control over this setting. Sites with version-controlled
+ * deployments are unlikely to be in a situation where they cannot alter their
+ * php error level reporting so we can trust that the are able to set them
+ * to suppress deprecation / php error level warnings if appropriate but
+ * in order to phase in deprecation warnings we originally chose not to
+ * show them on sites who might not be able to set their error_level in
+ * a way that is appropriate to their site.
*
* @return bool
*/
* Is in upgrade mode.
*
* @return bool
+ * @deprecated
+ * @see CRM_Core_Config::isUpgradeMode()
*/
public static function isInUpgradeMode() {
- $args = explode('/', CRM_Utils_Array::value('q', $_GET));
- $upgradeInProcess = CRM_Core_Session::singleton()->get('isUpgradePending');
- if ((isset($args[1]) && $args[1] == 'upgrade') || $upgradeInProcess) {
- return TRUE;
- }
- else {
- return FALSE;
- }
+ return CRM_Core_Config::isUpgradeMode();
}
/**
- * Determine the standard URL for viewing or editing the specified link.
- *
- * This function delegates the decision-making to (a) the hook system and
- * (b) the BAO system.
+ * Determine the standard URL for view/update/delete of a given entity.
*
* @param array $crudLinkSpec
* With keys:.
- * - action: int, CRM_Core_Action::UPDATE or CRM_Core_Action::VIEW [default: VIEW]
- * - entity_table: string, eg "civicrm_contact"
- * - entity_id: int
+ * - action: sting|int, e.g. 'update' or CRM_Core_Action::UPDATE or 'view' or CRM_Core_Action::VIEW [default: 'view']
+ * - entity|entity_table: string, eg "Contact" or "civicrm_contact"
+ * - id|entity_id: int
+ *
+ * @param bool $absolute whether the generated link should have an absolute (external) URL beginning with http
*
* @return array|NULL
* NULL if unavailable, or an array. array has keys:
- * - path: string
- * - query: array
* - title: string
* - url: string
*/
- public static function createDefaultCrudLink($crudLinkSpec) {
- $crudLinkSpec['action'] = CRM_Utils_Array::value('action', $crudLinkSpec, CRM_Core_Action::VIEW);
- $daoClass = CRM_Core_DAO_AllCoreTables::getClassForTable($crudLinkSpec['entity_table']);
- if (!$daoClass) {
- return NULL;
+ public static function createDefaultCrudLink($crudLinkSpec, $absolute = FALSE) {
+ $action = $crudLinkSpec['action'] ?? 'view';
+ if (is_numeric($action)) {
+ $action = CRM_Core_Action::description($action);
}
-
- $baoClass = str_replace('_DAO_', '_BAO_', $daoClass);
- if (!class_exists($baoClass)) {
- return NULL;
+ else {
+ $action = strtolower($action);
}
- $bao = new $baoClass();
- $bao->id = $crudLinkSpec['entity_id'];
- if (!$bao->find(TRUE)) {
+ $daoClass = isset($crudLinkSpec['entity']) ? CRM_Core_DAO_AllCoreTables::getFullName($crudLinkSpec['entity']) : CRM_Core_DAO_AllCoreTables::getClassForTable($crudLinkSpec['entity_table']);
+ $paths = $daoClass ? $daoClass::getEntityPaths() : [];
+ $path = $paths[$action] ?? NULL;
+ if (!$path) {
return NULL;
}
- $link = [];
- CRM_Utils_Hook::crudLink($crudLinkSpec, $bao, $link);
- if (empty($link) && is_callable([$bao, 'createDefaultCrudLink'])) {
- $link = $bao->createDefaultCrudLink($crudLinkSpec);
+ if (empty($crudLinkSpec['id']) && !empty($crudLinkSpec['entity_id'])) {
+ $crudLinkSpec['id'] = $crudLinkSpec['entity_id'];
+ }
+ foreach ($crudLinkSpec as $key => $value) {
+ $path = str_replace('[' . $key . ']', $value, $path);
}
- if (!empty($link)) {
- if (!isset($link['url'])) {
- $link['url'] = self::url($link['path'], $link['query'], TRUE, NULL, FALSE);
- }
- return $link;
+ switch ($action) {
+ case 'add':
+ $title = ts('New %1', [1 => $daoClass::getEntityTitle()]);
+ break;
+
+ case 'view':
+ $title = ts('View %1', [1 => $daoClass::getEntityTitle()]);
+ break;
+
+ case 'update':
+ $title = ts('Edit %1', [1 => $daoClass::getEntityTitle()]);
+ break;
+
+ case 'delete':
+ $title = ts('Delete %1', [1 => $daoClass::getEntityTitle()]);
+ break;
+
+ default:
+ $title = ts(ucfirst($action)) . ' ' . $daoClass::getEntityTitle();
}
- return NULL;
+ return [
+ 'title' => $title,
+ 'url' => self::url($path, NULL, $absolute, NULL, FALSE),
+ ];
}
/**