function asset_wizard_form in Asset 6
Same name in this branch
- 6 asset_wizard.inc \asset_wizard_form()
- 6 inc/asset_wizard.inc \asset_wizard_form()
Same name and namespace in other branches
- 5 asset_wizard.inc \asset_wizard_form()
Main form builder function for the asset wizard.
1 string reference to 'asset_wizard_form'
- asset_wizard in ./
asset.module - Menu callback to load the asset popup window.
File
- inc/
asset_wizard.inc, line 22
Code
function asset_wizard_form(&$form_state) {
$form_values =& $form_state['post'];
if (empty($form_state['post'])) {
$form_values = NULL;
}
$oper = $_GET['op'];
// We need some values passed around:
// $op for the "delete" button on the asset selection screen
// $fieldname for the direct "select" button
if (!isset($_GET['noreset'])) {
$_SESSION['asset_op'] = $_GET['op'];
}
if (isset($_GET['textfield'])) {
list($fieldname, $lost) = split("\\]\\[", $_GET['textfield']);
$fieldname = str_replace(array(
"_",
"[",
), "-", $fieldname);
$fieldname = "edit-" . $fieldname . "-";
$_SESSION['asset_fieldname'] = $fieldname;
}
elseif (isset($_GET['textarea']) || $_GET['q'] == "asset/wizard/tinymce") {
unset($_SESSION['asset_fieldname']);
$_SESSION['asset_op'] = "tinymce";
}
// Allow the aid to be passed in the querystring
if ($form_values == null && is_numeric($_GET['aid'])) {
$form_values['step'] = 2;
$form_values['aid'] = $_GET['aid'];
}
// Step Handling
if (!isset($form_values)) {
$step = 1;
}
else {
list($lost, $lost, $field) = split("-", $fieldname);
switch ($form_values['op']) {
case t('Back'):
if ($field == ASSET_THUMBNAIL) {
$step = 1;
}
elseif (isset($form_values['delete_cancel'])) {
unset($_SESSION['messages']);
drupal_goto(filter_xss($_GET['q']), 'dir=' . $form_values['dir']);
}
else {
$step = $form_values['step'] > 1 ? $form_values['step'] - 1 : 1;
}
break;
case t('Next'):
case t('Finish'):
if ($step == 1 && !$form_values['aid']) {
break;
// dont proceed without a valid aid.
}
if ($field == ASSET_THUMBNAIL && $form_values['step'] == 1) {
// When inserting an image preview, don't offer the option to select a size
$step = $form_values['step'] + 2;
}
else {
$step = $form_values['step'] + 1;
}
break;
case t('Edit'):
if (!empty($form_values['aid'])) {
$asset = asset_load(array(
'aid' => $form_values['aid'],
));
$form['edit-asset'] = array(
'#type' => 'hidden',
'#value' => '1',
);
$form['aid'] = array(
'#type' => 'hidden',
'#value' => $form_values['aid'],
);
$fileinfo = pathinfo($asset->filename);
if (strlen($fileinfo['extension']) == 3) {
// This is a regular file
$form['filename'] = array(
'#title' => Filename,
'#type' => 'textfield',
'#value' => $asset->filename,
'#description' => t("Warning: you are changing the actual filename. If you're not sure what you're doing, you should leave this unchanged."),
);
}
else {
// Not a regular file, could be a youtube movie for instance (filename $instance.youtube)
$form['filename'] = array(
'#title' => Filename,
'#type' => 'item',
'#value' => $asset->filename,
'#description' => t("You can only change the filename of regular files, not of YouTube movies for instance."),
);
}
$form['old-filename'] = array(
'#type' => 'hidden',
'#value' => $asset->filename,
);
$form['old-parent'] = array(
'#type' => 'hidden',
'#value' => $asset->dirname,
);
$form = array_merge($form, asset_wizard_default_fields($form_values));
$form['title']['#value'] = $asset->title;
$form['author']['#value'] = $asset->author;
$form['description']['#value'] = $asset->description;
}
break;
case t('Delete'):
if (!empty($form_values['aid'])) {
if (!$form_values['deleteme']) {
$form_values['step'] = 1;
$form['delete_warning'] = array(
'#type' => 'markup',
'#value' => t("You are about to delete the selected asset. Press the delete button to confirm deletion."),
);
$form['deleteme'] = array(
'#type' => 'hidden',
'#value' => 1,
);
form_set_error('aid');
}
elseif ($form_values['deleteme'] == 1) {
$form['deleteme'] = array(
'#type' => 'hidden',
'#value' => 0,
);
}
}
default:
// only back,next,finish buttons should effect the step
$step = $form_values['step'];
break;
}
}
if ($oper == t('Upload')) {
$step = 1;
}
$form['step'] = array(
'#type' => 'hidden',
'#value' => $step,
);
drupal_set_title("Asset Wizard - Step {$step}");
// Extract asset info from the macro or aid
if ($form_values['macro']) {
$macros = asset_get_macros(' ' . $form_values['macro'] . ' ');
$macro = array_pop($macros);
if ($macro['aid']) {
$asset = asset_load($macro['aid']);
}
}
else {
if ($form_values['aid']) {
$asset = asset_load($form_values['aid']);
$macro['aid'] = $form_values['aid'];
}
}
if (is_object($asset) && $step > 1) {
$form[] = array(
'#value' => '<div class="asset-selected-preview">' . asset_js_preview($asset->aid, false, true) . '</div>',
);
}
switch ($step) {
case 1:
asset_wizard_form_asset_selection($form, $form_values, $asset);
break;
case 2:
$form['macro'] = array(
'#type' => 'hidden',
'#value' => asset_build_macro($macro),
);
$form['help'] = array(
'#value' => t('Select a formatting option, or <em>Choose</em> or <em>Upload</em> a new asset.'),
);
$formatters = asset_get_formatters();
$ext = strtolower($asset->extension);
$default = variable_get('asset_default_formatter_' . $asset->type . '_' . $ext, 'asset:link');
if (is_array($formatters[$asset->type][$ext])) {
foreach ($formatters[$asset->type][$ext] as $formatter) {
$form['formatter'][] = array(
'#type' => 'radio',
'#title' => $formatter['name'],
'#return_value' => $formatter['module'] . ':' . $formatter['format'],
'#default_value' => !isset($_GET['format']) ? $default : $_GET['format'],
'#description' => $formatter['description'] ? $formatter['description'] : NULL,
'#parents' => array(
'formatter',
),
);
}
}
if (is_array($formatters[$asset->type]['*'])) {
foreach ($formatters[$asset->type]['*'] as $formatter) {
$form['formatter'][] = array(
'#type' => 'radio',
'#title' => $formatter['name'],
'#return_value' => $formatter['module'] . ':' . $formatter['format'],
'#default_value' => !isset($_GET['format']) ? $default : $_GET['format'],
'#description' => $formatter['description'] ? $formatter['description'] : NULL,
'#parents' => array(
'formatter',
),
);
}
}
if (is_array($formatters['*']['*'])) {
foreach ($formatters['*']['*'] as $formatter) {
$form['formatter'][] = array(
'#type' => 'radio',
'#title' => $formatter['name'],
'#return_value' => $formatter['module'] . ':' . $formatter['format'],
'#default_value' => !isset($_GET['format']) ? $default : $_GET['format'],
'#description' => $formatter['description'] ? $formatter['description'] : NULL,
'#parents' => array(
'formatter',
),
);
}
}
break;
case 3:
list($macro['formatter'], $macro['format']) = explode(':', $form_values['formatter']);
$form['macro'] = array(
'#type' => 'hidden',
'#value' => asset_build_macro($macro),
);
$default_options['title'] = array(
'#type' => 'textfield',
'#title' => t('Title'),
'#default_value' => $asset->title,
'#size' => 40,
);
list($lost, $lost, $field) = split("-", $fieldname);
if (!preg_match('@link@i', $form_values['formatter'])) {
if ($field != ASSET_THUMBNAIL) {
// Don't allow the option to select a width/height when inserting a node thumbnail
$default_options['width'] = array(
'#type' => 'textfield',
'#title' => t('Width'),
'#default_value' => !isset($_GET['width']) ? $asset->width : filter_xss($_GET['width']),
);
$default_options['height'] = array(
'#type' => 'textfield',
'#title' => t('Height'),
'#default_value' => !isset($_GET['height']) ? $asset->height : filter_xss($_GET['height']),
);
$default_options['resizable'] = array(
'#type' => 'hidden',
'#value' => 'true',
);
}
else {
$default_options['width'] = array(
'#type' => 'hidden',
'#title' => t('Width'),
'#default_value' => $asset->height,
);
$default_options['height'] = array(
'#type' => 'hidden',
'#title' => t('Height'),
'#default_value' => $asset->width,
);
}
$default_options['align'] = array(
'#type' => 'select',
'#title' => t('Alignment'),
'#options' => array(
'none' => t('None'),
'left' => t('Left'),
'center' => t('Center'),
'right' => t('Right'),
),
'#default_value' => !isset($_GET['align']) ? 'none' : filter_xss($_GET['align']),
);
}
$module_options = (array) module_invoke($macro['formatter'], 'asset_formatter', 'options', $asset, $macro);
$form['options'] = array_merge($default_options, $module_options);
$form['options']['#tree'] = true;
break;
case 4:
if (is_array($form_values['options'])) {
foreach ($form_values['options'] as $k => $v) {
if (!in_array($k, array(
'aid',
'formatter',
'format',
)) && $v) {
$macro[$k] = $v;
}
}
}
$form['macro'] = array(
'#type' => 'textarea',
'#title' => 'Paste the following code into your text.',
'#value' => asset_build_macro($macro),
);
// Create the preview code for the CCK field
$is_image = array(
'jpg',
'jpeg',
'png',
'gif',
'tif',
'tiff',
'bmp',
);
$a = asset_load(array(
'aid' => $macro['aid'],
));
// Preview the image
if (in_array($a->extension, $is_image)) {
if (variable_get('asset_imagecache', 0)) {
$presets = imagecache_presets();
$preset = $presets[variable_get('asset_imagecache', 0)]['presetname'];
$preview = theme('imagecache', $preset, str_replace("//", "/", $a->filepath));
}
else {
$asset = array(
'aid' => $macro['aid'],
'format' => 'image',
'formatter' => 'asset',
'width' => '120',
'height' => '80',
);
$preview = asset_render_macro($asset);
}
}
else {
// Try to auto-detect the format
$preview = asset_preview($macro['aid']);
}
$form['preview'] = array(
'#type' => 'hidden',
'#value' => $preview,
);
$form['author'] = array(
'#type' => 'hidden',
'#value' => $a->author,
);
$form[] = array(
'#value' => asset_wizard_finish(),
);
break;
}
// This is important. If we're on the final step, we tell drupal to use the
// normal redirect functionality. That means the browser goes to whatever page
// after the final submit. All previous steps don't redirect, so just post
// back to this form.
$form['#redirect'] = FALSE;
if ($form['#redirect'] == FALSE) {
if ($step == 1) {
$form['#redirect'] = NULL;
}
}
$form['#multistep'] = TRUE;
$form['#tree'] = TRUE;
$form['footer']['#tree'] = false;
// We only want to display the delete button on the "Choose" page
if ($step != 1 || !empty($_SESSION['asset_op']) || $_GET['op'] == 'Delete Folder') {
if ($_GET['op'] == t("Delete Folder")) {
$form['delete_cancel'] = array(
'#type' => 'hidden',
'#value' => 1,
);
$form['dir'] = array(
'#type' => 'hidden',
'#value' => filter_xss($_GET['dir']),
);
}
$form['footer']['previous'] = array(
'#type' => 'submit',
'#value' => t(ASSET_WIZARD_PREVIOUS),
'#attributes' => isset($form_values['op']) || $step > 1 || $_GET['op'] == t("Delete Folder") ? array() : array(
'disabled' => 'disabled',
),
);
}
if ($_GET['op'] == 'Delete Folder') {
$form['footer']['next'] = array(
'#type' => 'submit',
'#value' => t(ASSET_WIZARD_NEXT),
);
}
elseif ($_SESSION['asset_op'] == 'Upload' || $_SESSION['asset_op'] == 'New Folder' || $oper == t('Upload') || $oper == 'Embed' || $oper == 'YouTube Embed' || $oper == 'YouTube Sync') {
$form['footer']['previous'] = array(
'#type' => 'submit',
'#value' => t(ASSET_WIZARD_PREVIOUS),
);
$form['footer']['finish'] = array(
'#type' => 'submit',
'#value' => t('Next'),
);
}
elseif ($form_state['post']['op'] == 'Edit' && !empty($form_state['post']['aid'])) {
$form['footer']['previous'] = array(
'#type' => 'submit',
'#value' => t(ASSET_WIZARD_PREVIOUS),
);
$form['footer']['finish'] = array(
'#type' => 'submit',
'#value' => t('Finish'),
);
}
elseif ($step != 1 || $form_state['post']['op'] != 'Edit') {
if ($_SESSION['asset_op'] != "tinymce") {
$form['footer']['select'] = array(
'#type' => 'button',
'#value' => t('Select'),
);
}
elseif ($step != ASSET_WIZARD_FINAL_STEP - 1) {
$form['footer']['next'] = array(
'#type' => 'submit',
'#value' => t(ASSET_WIZARD_NEXT),
);
}
$form['footer']['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
);
$form['footer']['edit'] = array(
'#type' => 'submit',
'#value' => t('Edit'),
);
}
$form['footer']['cancel'] = array(
'#type' => 'submit',
'#value' => t(ASSET_WIZARD_CANCEL),
'#attributes' => array(
'alt' => t('Cancel and Return'),
),
);
if ($step == ASSET_WIZARD_FINAL_STEP - 1) {
$form['footer']['finish'] = array(
'#type' => 'submit',
'#value' => t('Finish'),
);
}
return $form;
}