/** * Get all settings of one record. * * @param string $table Database table * @param int $uid Record UID * * @return array Array of settings * Key is the context column name (e.g. "tx_contexts_nav") * Value is a Tx_Contexts_Context_Setting object */ public final function getSettings($table, $uid) { $settingsKey = $table . '.' . $uid; if (array_key_exists($settingsKey, $this->settings)) { return $this->settings[$settingsKey]; } $uids = array($uid); if ($uid && !array_key_exists($table . '.0', $this->settings)) { $uids[] = 0; } $where = 'context_uid = ' . $this->uid; $where .= " AND foreign_table = '{$table}'"; $where .= " AND foreign_uid IN ('" . implode("','", $uids) . "')"; $rows = (array) Tx_Contexts_Api_Configuration::getDb()->exec_SELECTgetRows('*', 'tx_contexts_settings', $where); foreach ($uids as $uid) { $this->settings[$table . '.' . $uid] = array(); } foreach ($rows as $row) { $this->settings[$table . '.' . $row['foreign_uid']][$row['name']] = new Tx_Contexts_Context_Setting($this, $row); } return $this->settings[$settingsKey]; }
/** * Save the default settings to the settings table - default * settings will have a foreign_uid of 0 * * @param int $contextId * @param array $settings * @return void */ protected function saveDefaultSettings($contextId, $settings) { $existingSettings = (array) Tx_Contexts_Api_Configuration::getDb()->exec_SELECTgetRows('*', 'tx_contexts_settings', "context_uid = '{$contextId}' AND foreign_uid = 0"); foreach ($settings as $table => $fields) { $fieldSettings = array(); foreach ($existingSettings as $setting) { if ($setting['foreign_table'] == $table) { $fieldSettings[$setting['name']] = $setting['uid']; } } foreach ($fields as $field => $enabled) { if (array_key_exists($field, $fieldSettings)) { Tx_Contexts_Api_Configuration::getDb()->exec_UPDATEquery('tx_contexts_settings', 'uid=' . $fieldSettings[$field], array('enabled' => (int) $enabled)); } else { Tx_Contexts_Api_Configuration::getDb()->exec_INSERTquery('tx_contexts_settings', array('context_uid' => $contextId, 'foreign_table' => $table, 'name' => $field, 'foreign_uid' => 0, 'enabled' => (int) $enabled)); } } } }