From bc7f2c4686c0466763ca359700752c66a374d600 Mon Sep 17 00:00:00 2001
From: Florent Torregrosa <florent.torregrosa@gmail.com>
Date: Sat, 5 Sep 2015 13:35:45 +0200
Subject: [PATCH] Issue #2563677: variable API integration.

---
 .../fields/atom_reference/atom_reference.module    | 50 ++++++++++++++++++++++
 .../atom_reference/atom_reference.variable.inc     | 33 ++++++++++++++
 scald.module                                       |  8 ++++
 3 files changed, 91 insertions(+)
 create mode 100644 modules/fields/atom_reference/atom_reference.variable.inc

diff --git a/modules/fields/atom_reference/atom_reference.module b/modules/fields/atom_reference/atom_reference.module
index 5c3af6a..e4a5ac3 100644
--- a/modules/fields/atom_reference/atom_reference.module
+++ b/modules/fields/atom_reference/atom_reference.module
@@ -505,3 +505,53 @@ function atom_reference_field_diff_view($items, $context) {

   return $diff_items;
 }
+
+/**
+ * Build form element for atom_reference variable.
+ */
+function atom_reference_variable_form_element_atom_reference($variable, $options = array()) {
+  // Complete variable structure.
+  $variable += array(
+    'title' => '',
+    'description' => '',
+    'element' => array(),
+  );
+  $variable['element'] += array(
+    'atom_types' => array(),
+    'preview_context' => 'sdl_editor_representation',
+  );
+
+  $preview_context = $variable['element']['preview_context'];
+  $atom_types = $variable['element']['atom_types'];
+
+  // Prepare help.
+  $help = format_plural(
+    count($atom_types),
+    'Allowed resource format: %types',
+    'Allowed resource formats: %types',
+    array('%types' => implode(', ', $atom_types))
+  );
+
+  $element = array(
+    '#title' => $variable['title'],
+    '#description' => $variable['description'] . ' ' . $help,
+    '#type' => 'textfield',
+    '#default_value' => variable_get_value($variable, $options),
+    '#attributes' => array(
+      'data-types' => implode(',', array_keys($atom_types)),
+      'data-dnd-context' => $preview_context,
+    ),
+    '#preview_context' => $preview_context,
+    '#process' => array('atom_reference_field_widget_form_process'),
+    '#attached' => array(
+      'library' => array(
+        array(
+          'atom_reference',
+          'library',
+        ),
+      ),
+    ),
+  );
+
+  return $element;
+}
diff --git a/modules/fields/atom_reference/atom_reference.variable.inc b/modules/fields/atom_reference/atom_reference.variable.inc
new file mode 100644
index 0000000..23f56e8
--- /dev/null
+++ b/modules/fields/atom_reference/atom_reference.variable.inc
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Implements hook_variable_info().
+ */
+function atom_reference_variable_info($options) {
+  $variables['test_variable_integration'] = array(
+    'type' => 'atom_reference',
+    'title' => t('Test variable integration', array(), $options),
+    'default' => '',
+    'element' => array(
+      'atom_types' => array(
+        'image' => 'image',
+        'audio' => 'audio',
+      ),
+      'preview_context' => 'my_scald_context',
+    ),
+    'localize' => TRUE,
+  );
+  return $variables;
+}
+
+/**
+ * Implements hook_variable_type_info().
+ */
+function atom_reference_variable_type_info() {
+  $type['atom_reference'] = array(
+    'title' => t('Atom reference'),
+    'element callback' => 'atom_reference_variable_form_element_atom_reference',
+  );
+
+  return $type;
+}
diff --git a/scald.module b/scald.module
index 582d48d..527400b 100644
--- a/scald.module
+++ b/scald.module
@@ -2021,6 +2021,14 @@ function scald_menu() {
     'access arguments'  => array('administer scald'),
     'file'              => 'includes/scald.admin.inc',
   );
+  $items['admin/config/content/scald/test'] = array(
+    'title'             => 'Scald',
+    'weight'            => 20,
+    'page callback'     => 'drupal_get_form',
+    'page arguments'    => array('variable_module_form', 'atom_reference'),
+    'access callback'   => 'user_access',
+    'access arguments'  => array('administer scald'),
+  );
   $items['atom/add'] = array(
     'title' => 'Create Atom',
     'page callback' => 'scald_atom_add',
--
2.1.4

