/** * Install */ function install() { $this->EE->load->dbforge(); $this->EE->db->insert('modules', array('module_name' => WYGWAM_NAME, 'module_version' => WYGWAM_VER, 'has_cp_backend' => 'y', 'has_publish_fields' => 'n')); // ------------------------------------------- // Create the exp_wygwam_configs table // ------------------------------------------- if (!$this->EE->db->table_exists('wygwam_configs')) { $this->EE->load->dbforge(); $this->EE->dbforge->add_field(array('config_id' => array('type' => 'int', 'constraint' => 6, 'unsigned' => TRUE, 'auto_increment' => TRUE), 'config_name' => array('type' => 'varchar', 'constraint' => 32), 'settings' => array('type' => 'text'))); $this->EE->dbforge->add_key('config_id', TRUE); $this->EE->dbforge->create_table('wygwam_configs'); } // ------------------------------------------- // Populate it // ------------------------------------------- // Do toolbars already exist in the fieldtype's global settings? $this->EE->db->select('settings'); $query = $this->EE->db->get_where('fieldtypes', array('name' => 'wygwam')); if ($query->num_rows() && ($ft_settings = unserialize(base64_decode($query->row('settings')))) && is_array($ft_settings) && isset($ft_settings['toolbars']) && is_array($ft_settings['toolbars']) && $ft_settings['toolbars']) { $toolbars = $ft_settings['toolbars']; foreach ($toolbars as &$toolbar) { // stylesCombo_stylesSet => stylesSet if (isset($toolbar['stylesCombo_stylesSet'])) { $toolbar['stylesSet'] = $toolbar['stylesCombo_stylesSet']; unset($toolbar['stylesCombo_stylesSet']); } // remove MediaEmbed if (($key = array_search('MediaEmbed', $toolbar)) !== FALSE) { array_splice($toolbar, $key, 1, 'EmbedMedia'); } } } else { $toolbars = Wygwam_helper::default_toolbars(); } foreach ($toolbars as $name => &$toolbar) { $config_settings = array_merge(Wygwam_helper::default_config_settings(), array('toolbar' => $toolbar)); $this->EE->db->insert('wygwam_configs', array('config_name' => $name, 'settings' => base64_encode(serialize($config_settings)))); } // ------------------------------------------- // Get Config IDs // ------------------------------------------- $config_ids = array(); $this->EE->db->select('config_id, config_name'); $query = $this->EE->db->get('wygwam_configs'); foreach ($query->result_array() as $config) { $config_ids[$config['config_name']] = $config['config_id']; } // ------------------------------------------- // Update fields // ------------------------------------------- $this->EE->db->select('field_id, field_label, field_settings'); $query = $this->EE->db->get_where('channel_fields', array('field_type' => 'wygwam')); foreach ($query->result_array() as $field) { $field_settings = unserialize(base64_decode($field['field_settings'])); if (!isset($field_settings['toolbar']) || !isset($toolbars[$field_settings['toolbar']])) { // wtf is wrong with this? continue; } // create a new config? if (isset($field_settings['config']) && $field_settings['config'] || (isset($field_settings['upload_dir']) || $field_settings['upload_dir'])) { $new_config_settings = array_merge(Wygwam_helper::default_config_settings(), array('toolbar' => $toolbars[$field_settings['toolbar']])); // merge in config settings if (isset($field_settings['config']) && $field_settings['config']) { $new_config_settings = array_merge($new_config_settings, $field_settings['config']); unset($field_settings['config']); } // merge in upload directory if (isset($field_settings['upload_dir']) && $field_settings['upload_dir']) { $new_config_settings['upload_dir'] = $field_settings['upload_dir']; unset($field_settings['upload_dir']); } // add the new config $this->EE->db->insert('wygwam_configs', array('config_name' => $field_settings['toolbar'] . ' - ' . $field['field_label'], 'settings' => base64_encode(serialize($new_config_settings)))); // get its ID $this->EE->db->select_max('config_id'); $query = $this->EE->db->get('wygwam_configs'); $field_settings['config'] = $query->row('config_id'); } else { $field_settings['config'] = $config_ids[$field_settings['toolbar']]; } unset($field_settings['toolbar']); // update the field $data = array('field_settings' => base64_encode(serialize($field_settings))); $this->EE->db->update('channel_fields', $data, array('field_id' => $field['field_id'])); } return TRUE; }