/** * Build Field */ private function _build_field($data, $context) { // include the resources Assets_helper::include_sheet_resources(); // prep the settings $this->_prep_settings($this->settings); // ------------------------------------------- // Field HTML // ------------------------------------------- if ($is_cell = isset($this->cell_name)) { $vars['field_name'] = $this->cell_name; $vars['field_id'] = str_replace(array('[', ']'), array('_', ''), $this->cell_name); } else { if ($this->var_id) { $vars['field_name'] = $this->field_name; $vars['field_id'] = str_replace(array('[', ']'), array('_', ''), $this->field_name); } else { if ($this->element_id) { $vars['field_name'] = $this->field_name; $vars['field_id'] = $this->_extract_element_id($this->field_name); } else { if ($context == 'grid') { $cell_name = 'col_id_' . $this->settings['col_id']; $vars['field_id'] = $vars['field_name'] = $cell_name; } else { $vars['field_name'] = $vars['field_id'] = $this->field_name; } } } } // ------------------------------------------- // Get the selected files // ------------------------------------------- $entry_id = $this->EE->input->get('entry_id'); $vars['files'] = array(); // if there was a validation error, EE's already passed us the post array if (is_array($data)) { foreach ($data as $file_id) { if (!empty($file_id)) { $file = $this->EE->assets_lib->get_file_by_id($file_id, TRUE); if ($file !== FALSE) { $vars['files'][] = $file; } } } } else { if ($context == 'channel' && $this->EE->input->get('entry_id') || $context == 'matrix' && isset($this->row_id) || $context == 'grid' && isset($this->settings['grid_row_id']) && isset($this->settings['col_id']) || $context == 'low' || $context == 'content_elements') { if ($context == 'grid') { // Set up these properties so we can select data the same way we do for Matrix $this->row_id = $this->settings['grid_row_id']; $this->col_id = $this->settings['col_id']; // Also stop lying about our field id. $this->field_id = $this->settings['grid_field_id']; } $sql = "SELECT DISTINCT a.source_type, a.folder_id, a.file_name, a.file_id, af.source_id, af.filedir_id\n\t\t\t FROM exp_assets_files AS a\n\t\t\t INNER JOIN exp_assets_selections AS ae ON ae.file_id = a.file_id\n\t\t\t INNER JOIN exp_assets_folders AS af ON af.folder_id = a.folder_id\n\t\t\t WHERE"; switch ($context) { case 'low': $sql .= " ae.var_id = {$this->var_id}"; break; case 'content_elements': $element_id = $this->_extract_element_id($this->field_name); $sql .= ' ae.element_id = "' . $element_id . '"'; $is_draft = isset($this->EE->session->cache['ep_better_workflow']['is_draft']) && $this->EE->session->cache['ep_better_workflow']['is_draft']; $sql .= ' AND is_draft = ' . ($is_draft ? '1' : '0') . ' '; break; case 'matrix': case 'grid': $sql .= " ae.col_id = '{$this->col_id}'\n\t\t\t\t\t\t\t\t AND ae.row_id = '{$this->row_id}'\n\t\t\t\t\t\t\t\t AND"; if (!empty($this->var_id)) { $sql .= " ae.var_id = " . $this->var_id; } else { $entry_id = $this->EE->security->xss_clean($this->EE->input->get('entry_id')); if (!$entry_id) { $entry_id = $this->settings['entry_id']; } $sql .= " ae.entry_id " . ($entry_id ? "= '{$entry_id}'" : 'IS NULL') . " AND ae.field_id " . ($this->field_id ? "= '{$this->field_id}'" : 'IS NULL'); } break; case 'channel': $entry_id = $this->EE->security->xss_clean($this->EE->input->get('entry_id')); $sql .= " ae.entry_id " . ($entry_id ? "= '{$entry_id}'" : 'IS NULL') . " AND ae.field_id " . ($this->field_id ? "= '{$this->field_id}'" : 'IS NULL'); } $sql .= ' ORDER BY ae.sort_order'; if ($this->settings['multi'] == 'n') { $sql .= ' LIMIT 1'; } // ------------------------------------------- // 'assets_field_selections_query' hook // - Modify the row data before it gets saved to exp_assets_selections // if ($this->EE->extensions->active_hook('assets_field_selections_query')) { $query = $this->EE->extensions->call('assets_field_selections_query', $this, $sql); } else { $query = $this->EE->db->query($sql); } // // ------------------------------------------- foreach ($query->result() as $row) { try { if ($file = $this->EE->assets_lib->get_file_by_id($row->file_id, TRUE)) { $vars['files'][] = $file; } } catch (Exception $exception) { // these files are gone. } } } } $vars['multi'] = $this->settings['multi'] == 'y'; $vars['helper'] = $this->EE->assets_lib; if ($this->settings['view'] == 'thumbs') { // load the filemanager library and file helper for generating thumbs $this->EE->load->library('filemanager'); $this->EE->load->helper('file'); $vars['file_view'] = 'thumbview/thumbview'; $vars['thumb_size'] = $this->settings['thumb_size']; $vars['show_filenames'] = $this->settings['show_filenames'] == 'y'; } else { $vars['file_view'] = 'listview/listview'; $vars['cols'] = $this->settings['show_cols']; } if ($context == 'content_elements') { $vars['ce_options'] = Assets_helper::get_json($this->settings); } else { $vars['ce_options'] = NULL; } $r = $this->EE->load->view('field/field', $vars, TRUE); // Add a hidden input in case no files are selected $r .= '<input type="hidden" name="' . ($is_cell ? $this->cell_name : $this->field_name) . '[]" value="" />'; // Include any thumb CSS queued up by the field Assets_helper::insert_queued_css(); // ------------------------------------------- // Pass field settings to JS // ------------------------------------------- if (!$is_cell || !isset($this->cache['initialized_col_settings'][$this->col_id])) { if ($is_cell) { $namespace = 'col_id_' . $this->col_id; } else { if ($context == 'content_elements') { $namespace = 'element_id_' . $this->element_id; } else { $namespace = 'field_id_' . $this->field_id; } } $settings_json = Assets_helper::get_json(array('filedirs' => $this->settings['filedirs'], 'multi' => $vars['multi'], 'view' => $this->settings['view'], 'thumb_size' => $this->settings['thumb_size'], 'show_filenames' => $this->settings['show_filenames'], 'show_cols' => $this->settings['show_cols'], 'namespace' => $namespace)); if ($is_cell) { Assets_helper::insert_js('Assets.Field.matrixConfs.col_id_' . $this->col_id . ' = ' . $settings_json . ';'); $this->cache['initialized_col_settings'][$this->col_id] = TRUE; } if (!empty($this->element_id)) { if ($this->field_name != '__element_name__[__index__][data]') { $field_id = $this->_extract_element_id($this->field_name); Assets_helper::insert_js("new Assets.Field('{$field_id}', '{$this->field_name}', {$settings_json});"); } } else { if ($context == 'grid') { Assets_helper::insert_js('Assets.Field.gridConfs.col_id_' . $this->settings['col_id'] . ' = ' . $settings_json . ';'); } else { $field_id = preg_replace('/[^\\w\\-]+/', '_', $vars['field_id']); Assets_helper::insert_js("new Assets.Field('{$field_id}', '{$this->field_name}', {$settings_json});"); } } } return $r; }