|
@@ -115,10 +115,11 @@ function materio_showroom_field_formatter_view($entity_type, $entity, $field, $i
|
|
|
// This formatter simply outputs the field as text and with a color.
|
|
|
case 'materio_showroom_location_simple_text':
|
|
|
foreach ($items as $delta => $item) {
|
|
|
+ $term = taxonomy_term_load($item['showroom_tid']);
|
|
|
$element[$delta] = array(
|
|
|
'#type' => 'html_tag',
|
|
|
'#tag' => 'p',
|
|
|
- '#value' => t('@loc', array('@loc' => $item['location'])),
|
|
|
+ '#value' => t('%showroom : @loc', array('%showroom' => $term->name, '@loc' => $item['location'])),
|
|
|
);
|
|
|
}
|
|
|
break;
|
|
@@ -196,7 +197,7 @@ function materio_showroom_field_widget_form(&$form, &$form_state, $field, $insta
|
|
|
// 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,
|
|
|
+ '#maxlength' => 255,
|
|
|
);
|
|
|
|
|
|
$widget['location'] = array(
|
|
@@ -206,7 +207,7 @@ function materio_showroom_field_widget_form(&$form, &$form_state, $field, $insta
|
|
|
// 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,
|
|
|
+ '#maxlength' => 255,
|
|
|
);
|
|
|
|
|
|
break;
|
|
@@ -371,3 +372,327 @@ function _materio_showroom_alter_location_field_form(&$form, &$form_state, $form
|
|
|
}
|
|
|
|
|
|
// TODO: migrate old location field to new one
|
|
|
+
|
|
|
+/**
|
|
|
+ * Implements hook_permission().
|
|
|
+ */
|
|
|
+function materio_showroom_permission() {
|
|
|
+ return array(
|
|
|
+ 'materio showroom migrate fields' => array(
|
|
|
+ 'title' => t('Migrate materio showroom location fields'),
|
|
|
+ 'description' => t('Migrate materio showroom location fields'),
|
|
|
+ ),
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
+// __ ____ __ _
|
|
|
+// / |/ (_)___ __________ _/ /_(_)___ ____
|
|
|
+// / /|_/ / / __ `/ ___/ __ `/ __/ / __ \/ __ \
|
|
|
+// / / / / / /_/ / / / /_/ / /_/ / /_/ / / / /
|
|
|
+// /_/ /_/_/\__, /_/ \__,_/\__/_/\____/_/ /_/
|
|
|
+// /____/
|
|
|
+/**
|
|
|
+ * Implements hook_menu().
|
|
|
+ */
|
|
|
+function materio_showroom_menu() {
|
|
|
+
|
|
|
+ $items['admin/config/content/materio_showroom'] = array(
|
|
|
+ 'title' => 'Showrooms location fields migration settings',
|
|
|
+ 'page callback' => 'drupal_get_form',
|
|
|
+ 'page arguments' => array('materio_showroom_migrate_location_fields_settings_form'),
|
|
|
+ 'access arguments' => array('materio showroom migrate fields'),
|
|
|
+ 'type' => MENU_LOCAL_ACTION,
|
|
|
+ // 'file' => ,
|
|
|
+ );
|
|
|
+ // $items['admin/config/content/materio_showroom/migrate'] = array(
|
|
|
+ // 'title' => 'Migrate showrooms location fields',
|
|
|
+ // 'page callback' => 'materio_showroom_migrate_location_fields',
|
|
|
+ // // 'page arguments' => array('materio_showroom_migrate_location_fields'),
|
|
|
+ // 'access arguments' => array('materio showroom migrate fields'),
|
|
|
+ // 'type' => MENU_LOCAL_TASK,
|
|
|
+ // // 'file' => ,
|
|
|
+ // );
|
|
|
+
|
|
|
+ return $items;
|
|
|
+}
|
|
|
+
|
|
|
+function materio_showroom_migrate_location_fields_settings_form(){
|
|
|
+ drupal_set_title('Showroom Migration settings', PASS_THROUGH);
|
|
|
+
|
|
|
+ $field_type = 'field_materio_showroom_location';
|
|
|
+
|
|
|
+ $types = node_type_get_types();
|
|
|
+ // dsm($types, 'types');
|
|
|
+ $nt_options = array();
|
|
|
+ foreach ($types as $mn => $type) {
|
|
|
+ $nt_options[$mn] = $type->name;
|
|
|
+ }
|
|
|
+
|
|
|
+ $node_type = variable_get('materio_showroom_migrate_node_type', null);
|
|
|
+ // source field (must be a text field)
|
|
|
+ $form['node_type'] = array(
|
|
|
+ '#type'=>'select',
|
|
|
+ '#options'=>$nt_options,
|
|
|
+ '#default_value' => $node_type,
|
|
|
+ '#title' => t('source field (must be a text field)'),
|
|
|
+ '#multiple' => false,
|
|
|
+ );
|
|
|
+
|
|
|
+ if($node_type){
|
|
|
+
|
|
|
+ $fieldsmap = field_info_field_map();
|
|
|
+ $src_options = array();
|
|
|
+ $target_options = array();
|
|
|
+ foreach ($fieldsmap as $field_name => $field) {
|
|
|
+ // dsm($field, $field_name);
|
|
|
+ if ($field['type'] == 'text'
|
|
|
+ && isset($field['bundles']['node'])
|
|
|
+ && in_array($node_type, $field['bundles']['node'])) {
|
|
|
+ $src_options[$field_name] = $field_name;
|
|
|
+ }
|
|
|
+ if ($field['type'] == $field_type
|
|
|
+ && isset($field['bundles']['node'])
|
|
|
+ && in_array($node_type, $field['bundles']['node'])) {
|
|
|
+ $target_options[$field_name] = $field_name;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // source field (must be a text field)
|
|
|
+ $form['source_field'] = array(
|
|
|
+ '#type'=>'select',
|
|
|
+ '#options'=>$src_options,
|
|
|
+ '#default_value' => variable_get('materio_showroom_migrate_source_field', null),
|
|
|
+ '#title' => t('source field (must be a text field)'),
|
|
|
+ '#multiple' => false,
|
|
|
+ );
|
|
|
+
|
|
|
+ // target field (must be a showroom location field)
|
|
|
+ $form['target_field'] = array(
|
|
|
+ '#type'=>'select',
|
|
|
+ '#options'=>$target_options,
|
|
|
+ '#default_value' => variable_get('materio_showroom_migrate_target_field', null),
|
|
|
+ '#title' => t('target field (must be a showroom location field)'),
|
|
|
+ '#multiple' => false,
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ $vocs = taxonomy_get_vocabularies();
|
|
|
+ $voc_options = array();
|
|
|
+ foreach ($vocs as $vid => $voc) {
|
|
|
+ $voc_options[$vid] = $voc->name;
|
|
|
+ }
|
|
|
+
|
|
|
+ // vocabulary for showrooms
|
|
|
+ $vid = variable_get('materio_showroom_migrate_vocabulary', null);
|
|
|
+ $form['vocabulary'] = array(
|
|
|
+ '#type'=>'select',
|
|
|
+ '#options'=>$voc_options,
|
|
|
+ '#default_value' => $vid,
|
|
|
+ '#title' => t('vocabulary for showrooms'),
|
|
|
+ '#multiple' => false,
|
|
|
+ );
|
|
|
+
|
|
|
+ // default taxonomy term
|
|
|
+ if($vid){
|
|
|
+ $tree = taxonomy_get_tree($vid);
|
|
|
+ foreach ($tree as $key => $term) {
|
|
|
+ $terms_options[$term->tid] = $term->name;
|
|
|
+ }
|
|
|
+
|
|
|
+ $term = variable_get('materio_showroom_migrate_default_term', null);
|
|
|
+ $form['default_term'] = array(
|
|
|
+ '#type'=>'select',
|
|
|
+ '#options'=>$terms_options,
|
|
|
+ '#default_value' => $term,
|
|
|
+ '#title' => t('default taxonomy term'),
|
|
|
+ '#multiple' => false,
|
|
|
+ );
|
|
|
+
|
|
|
+ if($term){
|
|
|
+ $form['migrate'] = array(
|
|
|
+ '#type' => 'submit',
|
|
|
+ '#value' => 'Migrate',
|
|
|
+ // '#submit' => array('materio_showroom_migrate_location_fields_migrate'),
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ $form['submit'] = array(
|
|
|
+ '#type' => 'submit',
|
|
|
+ '#value' => 'Save',
|
|
|
+ // '#submit' => array('materio_showroom_migrate_location_fields_migrate'),
|
|
|
+ );
|
|
|
+
|
|
|
+ return $form;
|
|
|
+}
|
|
|
+
|
|
|
+function materio_showroom_migrate_location_fields_settings_form_submit($form, &$form_state){
|
|
|
+ // dsm($form_state, 'form_state');
|
|
|
+
|
|
|
+ $node_type = $form_state['values']['node_type'];
|
|
|
+ $src_field = $form_state['values']['source_field'];
|
|
|
+ $target_field = $form_state['values']['target_field'];
|
|
|
+ $vid = $form_state['values']['vocabulary'];
|
|
|
+ $default_term = $form_state['values']['default_term'];
|
|
|
+
|
|
|
+ variable_set('materio_showroom_migrate_node_type', $node_type);
|
|
|
+ variable_set('materio_showroom_migrate_source_field', $src_field);
|
|
|
+ variable_set('materio_showroom_migrate_target_field', $target_field);
|
|
|
+ variable_set('materio_showroom_migrate_vocabulary', $vid);
|
|
|
+ variable_set('materio_showroom_migrate_default_term', $default_term);
|
|
|
+
|
|
|
+ // dsm($node_type, 'node_type');
|
|
|
+ // dsm($src_field,"src_field");
|
|
|
+ // dsm($target_field,"target_field");
|
|
|
+ // dsm($vid,"vid");
|
|
|
+ // dsm($default_term,"default_term");
|
|
|
+
|
|
|
+ if ($form_state['values']['op'] == 'Migrate'){
|
|
|
+ _materio_showroom_batch_migration($node_type, $src_field, $target_field, $vid, $default_term);
|
|
|
+ }
|
|
|
+
|
|
|
+ // $query = "INSERT INTO field_data_field_screenshot SELECT a.* FROM field_data_field_image a LEFT JOIN field_data_field_screenshot b ON a.entity_id = b.entity_id AND a.entity_type = b.entity_type WHERE b.entity_id IS NULL";
|
|
|
+ //
|
|
|
+ // $query2 = "INSERT INTO field_revision_field_screenshot SELECT a.* FROM field_revision_field_image a LEFT JOIN field_revision_field_screenshot b ON a.entity_id = b.entity_id AND a.entity_type = b.entity_type WHERE b.entity_id IS NULL";
|
|
|
+}
|
|
|
+
|
|
|
+function _materio_showroom_batch_migration($node_type, $src_field, $target_field, $vid, $tid){
|
|
|
+ // Reset counter for debug information.
|
|
|
+ $_SESSION['http_request_count'] = 0;
|
|
|
+
|
|
|
+ $batch = array(
|
|
|
+ 'title' => t('Migrating Showroom fields ...'),
|
|
|
+ 'operations' => array(),
|
|
|
+ 'init_message' => t('Commencing'),
|
|
|
+ 'progress_message' => t('Processed @current out of @total.'),
|
|
|
+ 'error_message' => t('An error occurred during processing'),
|
|
|
+ 'finished' => '_materio_showroom_batch_migration_finished',
|
|
|
+ );
|
|
|
+
|
|
|
+ $query = new EntityFieldQuery();
|
|
|
+ $query->entityCondition('entity_type', 'node')
|
|
|
+ ->entityCondition('bundle', $node_type)
|
|
|
+ ->fieldCondition($src_field, 'value', '', '!=');
|
|
|
+
|
|
|
+ $result = $query->execute();
|
|
|
+ // dsm($result, 'result');
|
|
|
+
|
|
|
+ if (isset($result['node'])) {
|
|
|
+
|
|
|
+ $voc = taxonomy_vocabulary_load($vid);
|
|
|
+ $tree = taxonomy_get_tree($vid);
|
|
|
+ foreach ($tree as $key => $term) {
|
|
|
+ $terms[$term->tid] = $term->name;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!empty($terms)){
|
|
|
+ foreach ($result['node'] as $nid => $value) {
|
|
|
+ $batch['operations'][] = array(
|
|
|
+ '_materio_showroom_batch_migration_op',
|
|
|
+ array(
|
|
|
+ $nid,
|
|
|
+ $src_field, $target_field,
|
|
|
+ $terms, $tid,
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ batch_set($batch);
|
|
|
+}
|
|
|
+
|
|
|
+function _materio_showroom_batch_migration_op($nid, $src_field, $target_field, $terms, $default_tid, &$context){
|
|
|
+ $context['results']['field_migrated']++;
|
|
|
+
|
|
|
+ $node = node_load($nid);
|
|
|
+
|
|
|
+ $src_items = field_get_items('node', $node, $src_field);
|
|
|
+ $src_value = $src_items ? $src_items[0]['value'] : '';
|
|
|
+
|
|
|
+ // $src_value = str_replace('/', '-', $src_value);
|
|
|
+ //
|
|
|
+ // build new item list
|
|
|
+ $items = array(LANGUAGE_NONE => array());
|
|
|
+ foreach ($terms as $tid => $name) {
|
|
|
+ $items[LANGUAGE_NONE][] = array(
|
|
|
+ 'showroom_tid' => $tid,
|
|
|
+ 'location' => $default_tid == $tid ? $src_value : '',
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ $node->$target_field = $items;
|
|
|
+
|
|
|
+ node_save($node);
|
|
|
+
|
|
|
+
|
|
|
+ //Simply show the import row count.
|
|
|
+ $context['message'] = t('Migrating node !c : %title (%nid)', array(
|
|
|
+ '!c' => $context['results']['field_migrated'],
|
|
|
+ '%title'=>$node->title,
|
|
|
+ '%nid'=>$nid ));
|
|
|
+
|
|
|
+ // In order to slow importing and debug better,
|
|
|
+ // we can uncomment this line to make each import slightly slower.
|
|
|
+ // usleep(2500);
|
|
|
+
|
|
|
+ if ( false ) {
|
|
|
+ $context['results']['failed_nodes'][] = $nid ;
|
|
|
+ }
|
|
|
+
|
|
|
+ _materio_showroom_update_http_requests();
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+function _materio_showroom_batch_migration_finished($success, $results, $operations){
|
|
|
+ // dsm($success, 'success');
|
|
|
+ // dsm($results, 'results');
|
|
|
+ // dsm($operations, 'operations');
|
|
|
+ if ($success) {
|
|
|
+ // Here we could do something meaningful with the results.
|
|
|
+ // We just display the number of nodes we processed...
|
|
|
+ drupal_set_message(t('@count results processed in @requests HTTP requests.', array('@count' => count($results), '@requests' => _materio_showroom_get_http_requests())));
|
|
|
+ drupal_set_message(t('The final result was "%final"', array('%final' => end($results))));
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // An error occurred.
|
|
|
+ // $operations contains the operations that remained unprocessed.
|
|
|
+ drupal_set_message(
|
|
|
+ t('operations : @args',
|
|
|
+ array(
|
|
|
+ '@args' => print_r(current($operations), TRUE),
|
|
|
+ )
|
|
|
+ ),
|
|
|
+ 'error'
|
|
|
+ );
|
|
|
+ $error_operation = reset($operations);
|
|
|
+ drupal_set_message(
|
|
|
+ t('An error occurred while processing @operation with arguments : @args',
|
|
|
+ array(
|
|
|
+ '@operation' => $error_operation[0],
|
|
|
+ '@args' => print_r($error_operation[0], TRUE),
|
|
|
+ )
|
|
|
+ ),
|
|
|
+ 'error'
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * Utility function to increment HTTP requests in a session variable.
|
|
|
+ */
|
|
|
+function _materio_showroom_update_http_requests() {
|
|
|
+ $_SESSION['http_request_count']++;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Utility function to count the HTTP requests in a session variable.
|
|
|
+ *
|
|
|
+ * @return int
|
|
|
+ * Number of requests.
|
|
|
+ */
|
|
|
+function _materio_showroom_get_http_requests() {
|
|
|
+ return !empty($_SESSION['http_request_count']) ? $_SESSION['http_request_count'] : 0;
|
|
|
+}
|