View source
<?php
function slickgrid_content_add_more_js($type_name_url, $field_name) {
module_load_include('inc', 'node', 'node.pages');
module_load_include('inc', 'content', 'includes/content.node_form');
$type = content_types($type_name_url);
$field = content_fields($field_name, $type['type']);
if ($field['multiple'] != 1 || empty($_POST['form_build_id'])) {
slickgrid_json(array(
'data' => '',
));
exit;
}
$form_state = array(
'submitted' => FALSE,
);
$form_build_id = $_POST['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
if (!$form) {
slickgrid_json(array(
'data' => '',
));
exit;
}
$form_copy = $form;
$form_state_copy = $form_state;
$form_copy['#post'] = array();
form_builder($_POST['form_id'], $form_copy, $form_state_copy);
$form_state['values'] = $form_state_copy['values'];
form_clean_id(NULL, TRUE);
unset($form_state['values'][$field_name][$field['field_name'] . '_add_more']);
foreach ($_POST[$field_name] as $delta => $item) {
$form_state['values'][$field_name][$delta]['_weight'] = $item['_weight'];
}
$form_state['values'][$field_name] = _content_sort_items($field, $form_state['values'][$field_name]);
$_POST[$field_name] = _content_sort_items($field, $_POST[$field_name]);
$form_state['item_count'] = array(
$field_name => count($_POST[$field_name]) + 1,
);
$form_element = content_field_form($form, $form_state, $field);
drupal_alter('form', $form_element, array(), 'content_add_more_js');
if (module_exists('fieldgroup') && ($group_name = _fieldgroup_field_get_group($type['type'], $field_name))) {
$form[$group_name][$field_name] = $form_element[$field_name];
}
else {
$form[$field_name] = $form_element[$field_name];
}
$form_state['values'] = array();
form_set_cache($form_build_id, $form, $form_state);
$delta = max(array_keys($_POST[$field_name])) + 1;
$_POST[$field_name][$delta]['_weight'] = $delta;
$form_state = array(
'submitted' => FALSE,
);
$form += array(
'#post' => $_POST,
'#programmed' => FALSE,
);
$form = form_builder($_POST['form_id'], $form, $form_state);
$field_form = !empty($group_name) ? $form[$group_name][$field_name] : $form[$field_name];
$field_form[$delta]['#prefix'] = '<div class="ahah-new-content">' . (isset($field_form[$delta]['#prefix']) ? $field_form[$delta]['#prefix'] : '');
$field_form[$delta]['#suffix'] = (isset($field_form[$delta]['#suffix']) ? $field_form[$delta]['#suffix'] : '') . '</div>';
unset($field_form['#prefix'], $field_form['#suffix']);
$javascript = drupal_add_js(NULL, NULL);
$output_js = isset($javascript['setting']) ? '<script type="text/javascript">jQuery.extend(Drupal.settings, ' . drupal_to_js(call_user_func_array('array_merge_recursive', $javascript['setting'])) . ');</script>' : '';
$output = theme('status_messages') . drupal_render($field_form) . $output_js;
$GLOBALS['devel_shutdown'] = FALSE;
print slickgrid_json(array(
'status' => TRUE,
'data' => $output,
));
exit;
}
function slickgrid_filefield_js($type_name, $field_name, $delta) {
module_load_include('inc', 'node', 'node.pages');
module_load_include('inc', 'content', 'includes/content.node_form');
$field = content_fields($field_name, $type_name);
if (empty($field) || empty($_POST['form_build_id'])) {
drupal_set_message(t('An unrecoverable error occurred. The uploaded file likely exceeded the maximum file size (@size) that this server supports.', array(
'@size' => format_size(file_upload_max_size()),
)), 'error');
print slickgrid_json(array(
'data' => theme('status_messages'),
));
exit;
}
$form_state = array(
'submitted' => FALSE,
);
$form_build_id = $_POST['form_build_id'];
$form = form_get_cache($form_build_id, $form_state);
if (!$form) {
drupal_set_message(t('An unrecoverable error occurred. This form was missing from the server cache. Try reloading the page and submitting again.'), 'error');
print slickgrid_json(array(
'data' => theme('status_messages'),
));
exit;
}
$args = $form['#parameters'];
$form_id = array_shift($args);
$form['#post'] = $_POST;
$form = form_builder($form_id, $form, $form_state);
if (module_exists('fieldgroup') && ($group_name = _fieldgroup_field_get_group($type_name, $field_name))) {
if (isset($form['#multigroups']) && isset($form['#multigroups'][$group_name][$field_name])) {
$form_element = $form[$group_name][$delta][$field_name];
}
else {
$form_element = $form[$group_name][$field_name][$delta];
}
}
else {
$form_element = $form[$field_name][$delta];
}
if (isset($form_element['_weight'])) {
unset($form_element['_weight']);
}
$output = drupal_render($form_element);
$javascript = drupal_add_js(NULL, NULL);
$filefield_ahah_settings = array();
if (isset($javascript['setting'])) {
foreach ($javascript['setting'] as $settings) {
if (isset($settings['ahah'])) {
foreach ($settings['ahah'] as $id => $ahah_settings) {
if (strpos($id, 'filefield-upload') || strpos($id, 'filefield-remove')) {
$filefield_ahah_settings[$id] = $ahah_settings;
}
}
}
}
}
if (!empty($filefield_ahah_settings)) {
$output .= '<script type="text/javascript">jQuery.extend(Drupal.settings.ahah, ' . drupal_to_js($filefield_ahah_settings) . ');</script>';
}
$output = theme('status_messages') . $output;
$GLOBALS['devel_shutdown'] = FALSE;
if ($_POST[$form_element['filefield_remove']['#name']]) {
slickgrid_json(array(
'status' => TRUE,
'data' => $output,
));
}
else {
print drupal_to_js(array(
'status' => TRUE,
'data' => $output,
));
}
exit;
}
function slickgrid_nodereference_autocomplete($field_name, $string = '') {
$fields = content_fields();
$field = $fields[$field_name];
$match = isset($field['widget']['autocomplete_match']) ? $field['widget']['autocomplete_match'] : 'contains';
$matches = array();
$references = _nodereference_potential_references($field, $string, $match, array(), 10);
foreach ($references as $id => $row) {
$matches[$row['title'] . " [nid:{$id}]"] = '<div class="reference-autocomplete">' . $row['rendered'] . '</div>';
}
slickgrid_json($matches);
}