diff --git a/sites/all/modules/gui/materiobasemod/materio_showroom.install b/sites/all/modules/gui/materiobasemod/materio_showroom.install new file mode 100644 index 00000000..e37c238e --- /dev/null +++ b/sites/all/modules/gui/materiobasemod/materio_showroom.install @@ -0,0 +1,36 @@ + array('type' => 'int', 'not null' => FALSE), + 'location' => array('type' => 'varchar', 'length' => 10, 'not null' => TRUE), + ); + $indexes = array( + 'location' => array('location'), + ); + return array( + 'columns' => $columns, + 'indexes' => $indexes, + ); +} diff --git a/sites/all/modules/gui/materiobasemod/materio_showroom.module b/sites/all/modules/gui/materiobasemod/materio_showroom.module index e70de84e..ef51324a 100644 --- a/sites/all/modules/gui/materiobasemod/materio_showroom.module +++ b/sites/all/modules/gui/materiobasemod/materio_showroom.module @@ -1,28 +1,5 @@ array( -// 'title' => t('add showroom localisation'), -// 'description' => t('add showroom localisation'), -// ), -// ); -// -// return $perms; -// } - /** * Acts on a field collection item being inserted or updated. * @@ -46,13 +23,14 @@ function materio_showroom_entity_presave($entity, $type) { $user_showroom = $user->field_showroom[LANGUAGE_NONE][0]['tid']; // dsm($user_showroom); + if(empty($entity->field_showroom_localisation_show)){ + $entity->field_showroom_localisation_show[LANGUAGE_NONE] = []; + } + foreach ($entity->field_showroom_localisation_loca[LANGUAGE_NONE] as $i => $loca) { - if(empty($entity->field_showroom_localisation_show)){ - $entity->field_showroom_localisation_show[LANGUAGE_NONE] = []; - } - if(empty($entity->field_showroom_localisation_show[LANGUAGE_NONE])){ - $entity->field_showroom_localisation_show[LANGUAGE_NONE][] = []; - } + // if(empty($entity->field_showroom_localisation_show[LANGUAGE_NONE])){ + $entity->field_showroom_localisation_show[LANGUAGE_NONE][] = array('tid'=>''); + // } dsm($entity->field_showroom_localisation_show); if(!isset($entity->original->field_showroom_localisation_show[LANGUAGE_NONE][$i]['tid'])){ @@ -68,19 +46,318 @@ function materio_showroom_entity_presave($entity, $type) { } } +// function materio_showroom_entity_load($entities, $type) { + // dsm($type); + // if($type == 'node'){ + // dsm($entities); + // } + // foreach ($entities as $entity) { + // $entity->foo = mymodule_add_something($entity, $type); + // } +// } + +// TODO: alter entity translation field permission with field_permission + +// __ __ _ _______ __ __ +// / / ____ _________ _/ /_(_)___ ____ / ____(_)__ / /___/ / +// / / / __ \/ ___/ __ `/ __/ / __ \/ __ \ / /_ / / _ \/ / __ / +// / /___/ /_/ / /__/ /_/ / /_/ / /_/ / / / / / __/ / / __/ / /_/ / +// /_____/\____/\___/\__,_/\__/_/\____/_/ /_/ /_/ /_/\___/_/\__,_/ + +// TODO: create own location field +/** + * Implements hook_field_info(). + * + * Provides the description of the field. + */ +function materio_showroom_field_info() { + return array( + // We name our field as the associative name of the array. + 'field_materio_showroom_location' => array( + 'label' => t('Showroom Location'), + 'description' => t('Define material location by showroom'), + 'default_widget' => 'materio_showroom_location_text', + 'default_formatter' => 'materio_showroom_location_simple_text', + ), + ); + + // TODO: define in settings wich vocabulary is for showrooms + +} /** - * Implements hook_form_alter(). + * Implements hook_field_validate(). + * + * This hook gives us a chance to validate content that's in our + * field. We're really only interested in the $items parameter, since + * it holds arrays representing content in the field we've defined. + * We want to verify that the items only contain RGB hex values like + * this: #RRGGBB. If the item validates, we do nothing. If it doesn't + * validate, we add our own error notification to the $errors parameter. + * + * @see field_example_field_widget_error() */ -// function materio_showroom_form_alter(&$form, &$form_state, $form_id) { -// // dsm($form_id); -// if( $form_id == "materiau_node_form" ){ -// dsm($form); -// // $form['account']['pass']['#type'] = 'password'; -// // $form['account']['pass']['#title'] = t('Password'); -// // -// // $form['actions']['#type'] = "container"; -// // $form['actions']['submit']['#value'] = t('Join'); -// } -// -// } +function materio_showroom_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) { + foreach ($items as $delta => $item) { + // if (!empty($item['rgb'])) { + // if (!preg_match('@^#[0-9a-f]{6}$@', $item['rgb'])) { + // $errors[$field['field_name']][$langcode][$delta][] = array( + // 'error' => 'field_example_invalid', + // 'message' => t('Color must be in the HTML format #abcdef.'), + // ); + // } + // } + } +} + +/** + * Implements hook_field_is_empty(). + * + * hook_field_is_empty() is where Drupal asks us if this field is empty. + * Return TRUE if it does not contain data, FALSE if it does. This lets + * the form API flag an error when required fields are empty. + */ +function materio_showroom_field_is_empty($item, $field) { + return empty($item['location']); +} + +// ______ __ +// / ____/___ _________ ___ ____ _/ /____ __________ +// / /_ / __ \/ ___/ __ `__ \/ __ `/ __/ _ \/ ___/ ___/ +// / __/ / /_/ / / / / / / / / /_/ / /_/ __/ / (__ ) +// /_/ \____/_/ /_/ /_/ /_/\__,_/\__/\___/_/ /____/ + +/** + * Implements hook_field_formatter_info(). + * + * We need to tell Drupal that we have two different types of formatters + * for this field. One will change the text color, and the other will + * change the background color. + * + * @see field_example_field_formatter_view() + */ +function materio_showroom_field_formatter_info() { + return array( + // This formatter just displays the hex value in the color indicated. + 'materio_showroom_location_simple_text' => array( + 'label' => t('Simple text-based formatter'), + 'field types' => array('field_example_rgb'), + ), + // This formatter changes the background color of the content region. + // 'field_example_color_background' => array( + // 'label' => t('Change the background of the output text'), + // 'field types' => array('field_example_rgb'), + // ), + ); +} + + +/** + * Implements hook_field_formatter_view(). + * + * Two formatters are implemented. + * - field_example_simple_text just outputs markup indicating the color that + * was entered and uses an inline style to set the text color to that value. + * - field_example_color_background does the same but also changes the + * background color of div.region-content. + * + * @see field_example_field_formatter_info() + */ +function materio_showroom_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { + $element = array(); + + switch ($display['type']) { + // This formatter simply outputs the field as text and with a color. + case 'materio_showroom_location_simple_text': + foreach ($items as $delta => $item) { + $element[$delta] = array( + // We create a render array to produce the desired markup, + // "

The color code ... #hexcolor

". + // See theme_html_tag(). + '#type' => 'html_tag', + '#tag' => 'p', + // '#attributes' => array( + // 'style' => 'color: ' . $item['rgb'], + // ), + '#value' => t('@loc', array('@loc' => $item['location'])), + ); + } + break; + + // This formatter adds css to the page changing the '.region-content' area's + // background color. If there are many fields, the last one will win. + // case 'field_example_color_background': + // foreach ($items as $delta => $item) { + // $element[$delta] = array( + // '#type' => 'html_tag', + // '#tag' => 'p', + // '#value' => t('The content area color has been changed to @code', array('@code' => $item['rgb'])), + // '#attached' => array( + // 'css' => array( + // array( + // 'data' => 'div.region-content { background-color:' . $item['rgb'] . ';}', + // 'type' => 'inline', + // ), + // ), + // ), + // ); + // } + // break; + } + + return $element; +} + +// _ ___ __ __ +// | | / (_)___/ /___ ____ / /______ +// | | /| / / / __ / __ `/ _ \/ __/ ___/ +// | |/ |/ / / /_/ / /_/ / __/ /_(__ ) +// |__/|__/_/\__,_/\__, /\___/\__/____/ +// /____/ + + +/** + * Implements hook_field_widget_info(). + * + * Three widgets are provided. + * - A simple text-only widget where the user enters the '#ffffff'. + * - A 3-textfield widget that gathers the red, green, and blue values + * separately. + * - A farbtastic colorpicker widget that chooses the value graphically. + * + * These widget types will eventually show up in hook_field_widget_form, + * where we will have to flesh them out. + * + * @see field_example_field_widget_form() + */ +function materio_showroom_field_widget_info() { + return array( + 'materio_showroom_location_text' => array( + 'label' => t('Location as text'), + 'field types' => array('field_materio_showroom_location'), + ), + // 'field_example_3text' => array( + // 'label' => t('RGB text field'), + // 'field types' => array('field_example_rgb'), + // ), + // 'field_example_colorpicker' => array( + // 'label' => t('Color Picker'), + // 'field types' => array('field_example_rgb'), + // ), + ); +} + + +/** + * Implements hook_field_widget_form(). + * + * hook_widget_form() is where Drupal tells us to create form elements for + * our field's widget. + * + * We provide one of three different forms, depending on the widget type of + * the Form API item provided. + * + * The 'field_example_colorpicker' and 'field_example_text' are essentially + * the same, but field_example_colorpicker adds a javascript colorpicker + * helper. + * + * field_example_3text displays three text fields, one each for red, green, + * and blue. However, the field type defines a single text column, + * rgb, which needs an HTML color spec. Define an element validate + * handler that converts our r, g, and b fields into a simulated single + * 'rgb' form element. + */ +function materio_showroom_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { + $locval = isset($items[$delta]['location']) ? $items[$delta]['location'] : ''; + + global $user; + $user = user_load($user->uid); // Make sure the user object is fully loaded + // dsm($user, 'user'); + + $showroom_tid = $user->field_showroom[LANGUAGE_NONE][0]['tid']; + // dsm($user_showroom); + $showroom_term = taxonomy_term_load($showroom_tid); + // dsm($showroom_term); + + $widget = $element; + $widget['#delta'] = $delta; + + + switch ($instance['widget']['type']) { + // TODO: loop through showrooms and don't allow more than one field by show room + + case 'materio_showroom_location_text': + + $widget['showroom_tid'] = array( + '#type' => 'hidden', + '#default_value' => $showroom_tid, + // Allow a slightly larger size that the field length to allow for some + // configurations where all characters won't fit in input field. + '#size' => 10, + '#maxlength' => 10, + ); + + $widget['location'] = array( + '#type' => 'textfield', + '#title' => $showroom_term->name, + '#default_value' => $locval, + // Allow a slightly larger size that the field length to allow for some + // configurations where all characters won't fit in input field. + '#size' => 10, + '#maxlength' => 10, + ); + + break; + + } + + $element['location'] = $widget; + return $element; +} + + +/** + * Validate the individual fields and then convert to RGB string. + */ +function materio_showroom_location_text_validate($element, &$form_state) { + // @todo: Isn't there a better way to find out which element? + // $delta = $element['#delta']; + // $field = $form_state['field'][$element['#field_name']][$element['#language']]['field']; + // $field_name = $field['field_name']; + // if (isset($form_state['values'][$field_name][$element['#language']][$delta]['rgb'])) { + // $values = $form_state['values'][$field_name][$element['#language']][$delta]['rgb']; + // foreach (array('r', 'g', 'b') as $colorfield) { + // $colorfield_value = hexdec($values[$colorfield]); + // // If they left any empty, we'll set the value empty and quit. + // if (strlen($values[$colorfield]) == 0) { + // form_set_value($element, '', $form_state); + // return; + // } + // // If they gave us anything that's not hex, reject it. + // if ((strlen($values[$colorfield]) != 2) || $colorfield_value < 0 || $colorfield_value > 255) { + // form_error($element[$colorfield], t("Saturation value must be a 2-digit hexadecimal value between 00 and ff.")); + // } + // } + // + // $value = sprintf('#%02s%02s%02s', $values['r'], $values['g'], $values['b']); + // form_set_value($element, $value, $form_state); + // } +} + +/** + * Implements hook_field_widget_error(). + * + * hook_field_widget_error() lets us figure out what to do with errors + * we might have generated in hook_field_validate(). Generally, we'll just + * call form_error(). + * + * @see field_example_field_validate() + * @see form_error() + */ +function materio_showroom_field_widget_error($element, $error, $form, &$form_state) { + switch ($error['error']) { + case 'materio_showroom_invalid': + form_error($element, $error['message']); + break; + } +}