/** * Load self::$personFields, self::$companyFields, self::$fieldStatus if not loaded yet * @throws waException * @return */ protected static function ensureStaticVars() { if (self::$personFields !== null) { return; } // Temporary storage for field objects; id => waContactField $fields = array(); // Load system fields self::$fieldStatus = array(); foreach (include wa()->getConfig()->getPath('system', 'contact/data/fields') as $f) { /** * @var waContactField $f */ if (!$f instanceof waContactField) { throw new waException("Invalid contact field " . print_r($f, TRUE)); } $id = $f->getId(); self::$fieldStatus[$id] = true; $fields[$id] = $f; } // Load custom fields $file = wa()->getConfig()->getConfigPath('custom_fields.php', true, 'contacts'); if (is_readable($file)) { $cfg = (include $file); if (empty($cfg) || !is_array($cfg)) { $cfg = array(); } foreach ($cfg as $f) { /** * @var waContactField $f */ if (!$f instanceof waContactField) { throw new waException("Invalid contact field " . print_r($f, TRUE)); } $id = $f->getId(); self::$fieldStatus[$id] = false; $fields[$id] = $f; } } // Person field order $file = wa()->getConfig()->getConfigPath('person_fields_order.php', true, 'contacts'); if (!is_readable($file)) { $file = wa()->getConfig()->getPath('system', 'contact/data/person_fields_default'); } $contactOrder = (include $file); // Company field order $file = wa()->getConfig()->getConfigPath('company_fields_order.php', true, 'contacts'); if (!is_readable($file)) { $file = wa()->getConfig()->getPath('system', 'contact/data/company_fields_default'); } $companyOrder = (include $file); // Load fields into self::$companyFields in correct order, and the rest into self::$companyDisabled self::$companyFields = array(); foreach ($companyOrder as $id => $param) { if (!isset($fields[$id])) { throw new waException('Unknown field ' . $id . ' in company field order.'); } self::$companyFields[$id] = clone $fields[$id]; self::$companyFields[$id]->setParameters($param); } self::$companyDisabled = array_diff_key($fields, self::$companyFields); // same for self::$personFields and self::$personDisabled self::$personFields = array(); foreach ($contactOrder as $id => $param) { if (!isset($fields[$id])) { throw new waException('Unknown field ' . $id . ' in person field order.'); } if (isset(self::$companyDisabled[$id])) { self::$personFields[$id] = clone $fields[$id]; } else { // don't have to clone since this object is used nowhere else self::$personFields[$id] = $fields[$id]; unset($fields[$id]); // being paranoid } self::$personFields[$id]->setParameters($param); } self::$personDisabled = array_diff_key($fields, self::$personFields); }