# HG changeset patch
# User Pablo Gosse
# Date 1400095962 25200
# Node ID a336c6797afcc494e520f6ee52f645bf28081668
# Parent  d6efa70b50bcf5700d8e1641a3ca6c264dc5aa72
Updated to allow importing of Quicktabs (https://drupal.org/node/1263706)

diff -r d6efa70b50bc -r a336c6797afc quicktabs.admin.inc
--- a/quicktabs.admin.inc	Wed May 14 12:21:41 2014 -0700
+++ b/quicktabs.admin.inc	Wed May 14 12:32:42 2014 -0700
@@ -486,18 +486,15 @@
   if ($form_state['clicked_button']['#id'] == 'edit-submit-form') {
     $qt = _quicktabs_convert_form_to_quicktabs($form_state);
 
-    $exists = quicktabs_load($qt->machine_name);
-    if ($exists && empty($exists->in_code_only)) {
-      if (quicktabs_update($qt)) {
-        drupal_set_message(t('The Quicktabs instance has been updated.'));
-      }
+    quicktabs_save($qt);
+    if ($qt->is_new) {
+      drupal_set_message(t('The Quicktabs instance has been created.'));
     }
     else {
-      if (quicktabs_save($qt)) {
-        drupal_set_message(t('The Quicktabs instance has been created.'));
-      }
+      drupal_set_message(t('The Quicktabs instance has been updated.'));
     }
-    $form_state['redirect'] = 'admin/structure/quicktabs';
+    
+    drupal_goto('admin/structure/quicktabs');
   }
 }
 
@@ -653,3 +650,55 @@
 
   return $qt;
 }
+
+/**
+ * Page callback to import a quicktabs instance.
+ */
+function quicktabs_import_form($form, &$form_state) {
+	$form['name'] = array(
+			'#type' => 'textfield',
+			'#title' => t('Quicktabs machine name'),
+			'#description' => t('Enter the machine name to use for this quicktabs instance if it is different from the source quicktabs instance. Leave blank to use the machine name of the quicktabs instance below.'),
+	);
+	$form['quicktabs'] = array(
+			'#type' => 'textarea',
+			'#title' => t('Paste quicktabs code here'),
+			'#required' => TRUE,
+	);
+	$form['submit'] = array(
+			'#type' => 'submit',
+			'#value' => t('Import'),
+	);
+	return $form;
+}
+
+function quicktabs_import_form_validate($form, &$form_state) {
+	if (substr($form_state['values']['quicktabs'], 0, 5) == '<?php') {
+		$form_state['values']['quicktabs'] = substr($form_state['values']['quicktabs'], 5);
+	}
+	ob_start();
+	eval($form_state['values']['quicktabs']);
+	ob_end_clean();
+	if (!is_object($quicktabs)) {
+		return form_error($form['quicktabs'], t('Unable to interpret quicktabs code.'));
+	}
+	if (!empty($form_state['values']['name']) && preg_match('/[^a-zA-Z0-9_]/', $form_state['values']['name'])) {
+		form_error($form['name'], t('Quicktabs instance name must be alphanumeric or underscores only.'));
+	}
+
+	if ($form_state['values']['name']) {
+		$quicktabs->machine_name = $form_state['values']['name'];
+	}
+
+	if (quicktabs_load($quicktabs->machine_name)) {
+		form_set_error('name', t('Quicktabs instance by that name already exists; please choose a different name.'));
+	}
+	$form_state['quicktabs'] = $quicktabs;
+}
+
+function quicktabs_import_form_submit($form, &$form_state) {
+	$qt = $form_state['quicktabs'];
+	quicktabs_save($qt);
+	drupal_set_message(t('Quicktabs %name has been imported.', array('%name' => $qt->title)));
+	$form_state['redirect'] = 'admin/structure/quicktabs/manage/' . $qt->machine_name;
+}
diff -r d6efa70b50bc -r a336c6797afc quicktabs.module
--- a/quicktabs.module	Wed May 14 12:21:41 2014 -0700
+++ b/quicktabs.module	Wed May 14 12:32:42 2014 -0700
@@ -41,6 +41,14 @@
     'type' => MENU_LOCAL_ACTION,
     'file' => 'quicktabs.admin.inc',
   );
+  $items['admin/structure/quicktabs/import'] = array(
+    'title' => 'Import',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('quicktabs_import_form'),
+    'access callback' => 'quicktabs_import_access',
+    'type' => MENU_LOCAL_ACTION,
+    'file' => 'quicktabs.admin.inc',
+  );
   $items['admin/structure/quicktabs/manage/%quicktabs'] = array(
     'title' => 'Edit quicktab',
     'page callback' => 'drupal_get_form',
@@ -86,6 +94,16 @@
   return $items;
 }
 
+/**
+ * Access callback to determine if the user can import Quicktabs.
+ *
+ * Quicktabs imports require an additional access check because they are PHP
+ * code and PHP is more locked down than administer quicktabs.
+ */
+function quicktabs_import_access() {
+  // @todo: watch for http://drupal.org/node/870938, there might be a better solution.
+  return user_access('administer quicktabs') && user_access('use PHP for settings');
+}
 
 /**
  * Implements hook_permission().
