+--------------------------------------------------------------------+
| CiviCRM version 4.7 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2016 |
+ | Copyright CiviCRM LLC (c) 2004-2017 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2016
- * $Id$
- *
+ * @copyright CiviCRM LLC (c) 2004-2017
*/
class CRM_Core_DAO_AllCoreTables {
private static $daoToClass = NULL;
private static $entityTypes = NULL;
+ /**
+ * Initialise.
+ *
+ * @param bool $fresh
+ */
public static function init($fresh = FALSE) {
static $init = FALSE;
if ($init && !$fresh) {
/**
* (Quasi-Private) Do not call externally (except for unit-testing)
+ *
+ * @param string $daoName
+ * @param string $className
+ * @param string $tableName
+ * @param string $fields_callback
+ * @param string $links_callback
*/
public static function registerEntityType($daoName, $className, $tableName, $fields_callback = NULL, $links_callback = NULL) {
self::$daoToClass[$daoName] = $className;
return self::$tables;
}
+ /**
+ * @return array
+ * List of indices.
+ */
+ public static function indices($localize = TRUE) {
+ $indices = array();
+ self::init();
+ foreach (self::$daoToClass as $class) {
+ if (is_callable(array($class, 'indices'))) {
+ $indices[$class::getTableName()] = $class::indices($localize);
+ }
+ }
+ return $indices;
+ }
+
+ /**
+ * Modify indices to account for localization options.
+ *
+ * @param CRM_Core_DAO $class DAO class
+ * @param array $originalIndices index definitions before localization
+ *
+ * @return array
+ * index definitions after localization
+ */
+ public static function multilingualize($class, $originalIndices) {
+ $domain = new CRM_Core_DAO_Domain();
+ $domain->find(TRUE);
+ $locales = explode(CRM_Core_DAO::VALUE_SEPARATOR, $domain->locales);
+ if (CRM_Utils_System::isNull($locales)) {
+ return $originalIndices;
+ }
+ $classFields = $class::fields();
+
+ $finalIndices = array();
+ foreach ($originalIndices as $index) {
+ if ($index['localizable']) {
+ foreach ($locales as $locale) {
+ $localIndex = $index;
+ $localIndex['name'] .= "_" . $locale;
+ $fields = array();
+ foreach ($localIndex['field'] as $field) {
+ $baseField = explode('(', $field);
+ if ($classFields[$baseField[0]]['localizable']) {
+ // field name may have eg (3) at end for prefix length
+ // last_name => last_name_fr_FR
+ // last_name(3) => last_name_fr_FR(3)
+ $fields[] = preg_replace('/^([^(]+)(\(\d+\)|)$/', '${1}_' . $locale . '${2}', $field);
+ }
+ else {
+ $fields[] = $field;
+ }
+ }
+ $localIndex['field'] = $fields;
+ $finalIndices[$localIndex['name']] = $localIndex;
+ }
+ }
+ else {
+ $finalIndices[$index['name']] = $index;
+ }
+ }
+ CRM_Core_BAO_SchemaHandler::addIndexSignature(self::getTableForClass($class), $finalIndices);
+ return $finalIndices;
+ }
+
/**
* @return array
* Mapping from brief-names to class-names.
return FALSE !== array_search($tableName, self::tables());
}
+ /**
+ * Get the DAO for the class.
+ *
+ * @param string $className
+ *
+ * @return string
+ */
public static function getCanonicalClassName($className) {
return str_replace('_BAO_', '_DAO_', $className);
}
/**
+ * Get a list of all DAO classes.
+ *
* @return array
* List of class names.
*/
return array_values(self::daoToClass());
}
+ /**
+ * Get the classname for the table.
+ *
+ * @param string $tableName
+ * @return string
+ */
public static function getClassForTable($tableName) {
//CRM-19677: on multilingual setup, trim locale from $tableName to fetch class name
if (CRM_Core_I18n::isMultilingual()) {
self::tables());
}
+ /**
+ * Reinitialise cache.
+ *
+ * @param bool $fresh
+ */
public static function reinitializeCache($fresh = FALSE) {
self::init($fresh);
}
$exports = array();
$fields = $dao::fields();
- foreach($fields as $name => $field) {
+ foreach ($fields as $name => $field) {
if (CRM_Utils_Array::value('export', $field)) {
if ($prefix) {
$exports[$labelName] = & $fields[$name];
- } else {
+ }
+ else {
$exports[$name] = & $fields[$name];
}
}
$imports = array();
$fields = $dao::fields();
- foreach($fields as $name => $field) {
+ foreach ($fields as $name => $field) {
if (CRM_Utils_Array::value('import', $field)) {
if ($prefix) {
$imports[$labelName] = & $fields[$name];
- } else {
+ }
+ else {
$imports[$name] = & $fields[$name];
}
}