/** * Update Extension * * @param string $current Previous installed version of the extension */ function update_extension($current = '') { global $DB; if (!$current or $current == FF_VERSION) { return FALSE; } if ($current < '1.1.3') { // no longer saving settings on a per-site basis $sql = array(); // no more per-site FF settings $query = $DB->query('SELECT settings FROM exp_extensions WHERE class = "' . FF_CLASS . '" AND settings != "" LIMIT 1'); if ($query->row) { $settings = array_shift(Fieldframe_Main::_unserialize($query->row['settings'])); $sql[] = $DB->update_string('exp_extensions', array('settings' => Fieldframe_Main::_serialize($settings)), 'class = "' . FF_CLASS . '"'); } // collect conversion info $query = $DB->query('SELECT * FROM exp_ff_fieldtypes ORDER BY enabled DESC, site_id ASC'); $firsts = array(); $conversions = array(); foreach ($query->result as $ftype) { if (!isset($firsts[$ftype['class']])) { $firsts[$ftype['class']] = $ftype['fieldtype_id']; } else { $conversions[$ftype['fieldtype_id']] = $firsts[$ftype['class']]; } } if ($conversions) { // remove duplicate ftype rows in exp_ff_fieldtypes $sql[] = 'DELETE FROM exp_ff_fieldtypes WHERE fieldtype_id IN (' . implode(',', array_keys($conversions)) . ')'; // update field_type's in exp_weblog_fields foreach ($conversions as $old_id => $new_id) { $sql[] = $DB->update_string('exp_weblog_fields', array('field_type' => 'ftype_id_' . $new_id), 'field_type = "ftype_id_' . $old_id . '"'); } } // remove site_id column from exp_ff_fieldtypes $sql[] = 'ALTER TABLE exp_ff_fieldtypes DROP COLUMN site_id'; // apply changes foreach ($sql as $query) { //$this->log($query); $DB->query($query); } } if ($current < '1.1.0') { // hooks have changed, so go through // the whole activate_extension() process $this->activate_extension(); } else { // just update the version #s $DB->query('UPDATE exp_extensions SET version = "' . FF_VERSION . '" WHERE class = "' . FF_CLASS . '"'); } }
function save_settings() { $settings = Fieldframe_Main::_get_all_settings(); $this->_init_main($settings, TRUE); global $FF; $FF->save_settings(); }