View source
<?php
function _designkit_form_alter(&$form, &$form_state) {
$info = designkit_get_info();
$form['#attributes'] = array(
'enctype' => 'multipart/form-data',
);
if (!empty($info['designkit']['image'])) {
$image = variable_get('designkit_image', array());
$form['designkit_image'] = array(
'#title' => t('Images'),
'#description' => t('Upload an image. It will be resized to better fit the design of this site.'),
'#type' => 'fieldset',
'#tree' => TRUE,
'#collapsible' => TRUE,
'#collapsed' => empty($image),
);
foreach ($info['designkit']['image'] as $name => $image_info) {
$form['designkit_image'][$name] = array(
'#tree' => TRUE,
);
if (!empty($image[$name])) {
$file = db_select('file_managed', 'f')
->fields('f')
->condition('fid', $image[$name])
->execute()
->fetchObject();
if ($file) {
$form['designkit_image'][$name][$name] = array(
'#type' => 'value',
'#value' => $file,
'#element_validate' => array(
'designkit_upload_delete',
),
);
if (!empty($image_info['effect'])) {
$thumbnail = theme('image_style', array(
'style_name' => "designkit-image-{$name}",
'path' => $file->uri,
));
}
else {
$thumbnail = theme('image', array(
'path' => $file->uri,
));
}
$form['designkit_image'][$name]['display'] = array(
'#title' => isset($image_info['title']) ? t($image_info['title']) : check_plain($name),
'#description' => isset($image_info['description']) ? t($image_info['description']) : '',
'#type' => 'item',
'#markup' => $thumbnail,
);
$form['designkit_image'][$name]['delete'] = array(
'#type' => 'checkbox',
'#title' => t('Delete current image'),
);
}
}
else {
$form['designkit_image'][$name][$name] = array(
'#title' => isset($image_info['title']) ? t($image_info['title']) : check_plain($name),
'#description' => isset($image_info['description']) ? t($image_info['description']) : t('Upload a new image.'),
'#type' => 'file',
'#tree' => FALSE,
'#size' => 30,
'#element_validate' => array(
'designkit_upload_validate',
),
);
$form['designkit_image'][$name]['fid'] = array(
'#type' => 'value',
'#value' => !empty($image[$name]) ? $image[$name] : 0,
);
}
}
}
if (!empty($info['designkit']['color'])) {
$color = variable_get('designkit_color', array());
$form['designkit_color'] = array(
'#title' => t('Colors'),
'#description' => t('Enter an RGB hexidecimal value like <strong>#ffffff</strong>. Leave blank to use default colors.'),
'#collapsible' => TRUE,
'#collapsed' => empty($color) || $color == $info['designkit']['color'],
'#type' => 'fieldset',
'#tree' => TRUE,
);
foreach ($info['designkit']['color'] as $name => $color_info) {
if (isset($color[$name]) && designkit_valid_color($color[$name])) {
$default = $color[$name];
}
else {
$default = isset($color_info['default']) ? $color_info['default'] : '#888888';
}
$form['designkit_color'][$name] = array(
'#title' => isset($color_info['title']) ? t($color_info['title']) : check_plain($name),
'#description' => isset($color_info['description']) ? t($color_info['description']) : '',
'#attributes' => array(
'class' => array(
'designkit-colorpicker',
),
),
'#element_validate' => array(
'designkit_validate_color',
),
'#theme' => 'designkit_colorpicker',
'#type' => 'textfield',
'#size' => '7',
'#maxlength' => '7',
'#default_value' => $default,
);
}
}
}
function _designkit_system_theme_settings_validate_pre(&$form, &$form_state) {
form_set_value($form['logo']['settings']['logo_path'], '', $form_state);
}
function _designkit_system_theme_settings_validate_post(&$form, &$form_state) {
if (!empty($form_state['values']['designkit_image']['logo'])) {
$fid = $form_state['values']['designkit_image']['logo'];
$file = file_load($fid);
form_set_value($form['logo']['settings']['logo_path'], $file->uri, $form_state);
form_set_value($form['logo']['default_logo'], FALSE, $form_state);
}
else {
form_set_value($form['logo']['settings']['logo_path'], '', $form_state);
form_set_value($form['logo']['default_logo'], TRUE, $form_state);
}
}
function _designkit_system_theme_settings_submit(&$form, &$form_state) {
if (isset($form_state['values']['designkit_image'])) {
variable_set('designkit_image', $form_state['values']['designkit_image']);
}
if (isset($form_state['values']['designkit_color'])) {
variable_set('designkit_color', $form_state['values']['designkit_color']);
}
}
function designkit_validate_color($element, &$form_state) {
$color = trim($element['#value']);
if (empty($color) || $color === '#' || designkit_valid_color($color)) {
return TRUE;
}
form_set_error($element['#name'], t('Please enter a valid color or leave blank.'));
}
function designkit_upload_delete($element, &$form_state) {
$name = end($element['#parents']);
if (isset($form_state['values']['designkit_image'][$name][$name])) {
if (!empty($form_state['values']['designkit_image'][$name]['delete'])) {
$old_file = $form_state['values']['designkit_image'][$name][$name];
if (file_exists($old_file->uri)) {
file_delete($old_file);
image_path_flush($old_file->uri);
}
unset($form_state['values']['designkit_image'][$name]);
}
else {
$form_state['values']['designkit_image'][$name] = $form_state['values']['designkit_image'][$name][$name]->fid;
}
}
}
function designkit_upload_validate($element, &$form_state) {
$name = end($element['#parents']);
unset($form_state['values'][$name]);
$validators = array(
'file_validate_is_image' => array(),
'file_validate_image_resolution' => array(
'3000x3000',
),
'file_validate_size' => array(
1000 * 1024,
),
);
$file = file_save_upload($name, $validators, 'public://');
$error = $file ? file_validate_is_image($file) : FALSE;
if ($file && !$error) {
$file->status |= FILE_STATUS_PERMANENT;
$file = file_save($file);
image_path_flush($file->uri);
$form_state['values']['designkit_image'][$name] = $file->fid;
}
else {
if ($error) {
form_set_error($name, $error);
}
if ($file) {
file_delete($file->uri);
db_delete('file_managed')
->condition('fid', $file->fid)
->execute();
}
$form_state['values']['designkit_image'][$name] = 0;
}
}
function theme_designkit_colorpicker($variables) {
drupal_add_library('system', 'farbtastic');
drupal_add_js(drupal_get_path('module', 'designkit') . '/designkit.js');
$output = theme('textfield', $variables['element']);
$output .= "<div id='{$variables['element']['#id']}-colorpicker' style='display:none;'></div>";
return $output;
}