/** * Convert Field Settings * * @todo - find unique words and add them to the exp_channel_data cell */ function _convert_field($settings, $field) { $settings['col_ids'] = array(); if (isset($settings['cols'])) { if ($settings['cols']) { // ------------------------------------------- // Add the rows to exp_matrix_cols // ------------------------------------------- $col_ids_by_key = array(); $matrix_data_columns = array(); foreach ($settings['cols'] as $col_key => $col) { $col_type = $col['type']; $col_settings = $col['settings']; switch ($col_type) { case 'ff_checkbox': case 'ff_checkbox_group': if ($col_type == 'ff_checkbox') { $col_settings = array('options' => array('y' => $col_settings['label'])); } $col_type = 'pt_checkboxes'; break; case 'ff_select': $col_type = 'pt_dropdown'; break; case 'ff_multiselect': $col_type = 'pt_multiselect'; break; case 'ff_radio_group': $col_type = 'pt_radio_buttons'; break; case 'ff_matrix_text': case 'ff_matrix_textarea': $col_settings['multiline'] = ($col_type == 'ff_matrix_text' ? 'n' : 'y'); $col_type = 'text'; break; case 'ff_matrix_date': $col_type = 'date'; break; } $this->EE->db->insert('matrix_cols', array( 'site_id' => $field['site_id'], 'field_id' => $field['field_id'], 'col_name' => $col['name'], 'col_label' => $col['label'], 'col_type' => $col_type, 'col_search' => $field['field_search'], 'col_order' => $col_key, 'col_settings' => base64_encode(serialize($col_settings)) )); // get the col_id $this->EE->db->select_max('col_id'); $query = $this->EE->db->get('matrix_cols'); $col_id = $query->row('col_id'); $settings['col_ids'][] = $col_id; // add it to the matrix_data_columns queue $matrix_data_columns['col_id_'.$col_id] = array('type' => 'text'); // map the col_id to the col_key for later $col_ids_by_key[$col_key] = $col_id; } // ------------------------------------------- // Add the columns to matrix_data // ------------------------------------------- $this->EE->dbforge->add_column('matrix_data', $matrix_data_columns); // ------------------------------------------- // Move the field data into exp_matrix_data // ------------------------------------------- $field_id = 'field_id_'.$field['field_id']; $this->EE->db->select('entry_id, '.$field_id); $this->EE->db->where($field_id.' !=', ''); $entries = $this->EE->db->get('channel_data'); foreach ($entries->result_array() as $entry) { // unserialize the data $old_data = FF2EE2::_unserialize($entry[$field_id]); foreach ($old_data as $row_count => $row) { $data = array( 'site_id' => $field['site_id'], 'entry_id' => $entry['entry_id'], 'field_id' => $field['field_id'], 'row_order' => $row_count+1 ); foreach ($row as $col_key => $cell_data) { // does this col exist? if (! isset($col_ids_by_key[$col_key])) continue; // get the col_id $col_id = $col_ids_by_key[$col_key]; // flatten the cell data if necessary $cell_data = $this->_flatten_data($cell_data); // queue it up $data['col_id_'.$col_id] = $cell_data; } // add the row to exp_matrix_data $this->EE->db->insert('matrix_data', $data); } // clear out the old field data from exp_channel_data $new_data = $this->_flatten_data($old_data); $this->EE->db->where('entry_id', $entry['entry_id']); $this->EE->db->update('channel_data', array($field_id => $new_data)); } } // ------------------------------------------- // Remove 'cols' from field settings // ------------------------------------------- unset($settings['cols']); } return $settings; }
/** * Prep Field Data * * Ensures $data is an array. */ function prep_field_data(&$data) { if (!is_array($data)) { if ($this->unserialize_data) { if (!class_exists('FF2EE2')) { require PATH_THIRD . 'pt_field_pack/ff2ee2/ff2ee2.php'; } $data = FF2EE2::_unserialize($data); if (is_array($data)) { return; } } $data = array_filter(preg_split("/[\r\n]+/", $data)); } }