annotate sites/all/modules/views/plugins/export_ui/views_ui.class.php @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Contains the CTools Export UI integration code.
danielebarchiesi@0 6 *
danielebarchiesi@0 7 * Note that this is only a partial integration.
danielebarchiesi@0 8 */
danielebarchiesi@0 9
danielebarchiesi@0 10 /**
danielebarchiesi@0 11 * CTools Export UI class handler for Views UI.
danielebarchiesi@0 12 */
danielebarchiesi@0 13 class views_ui extends ctools_export_ui {
danielebarchiesi@0 14
danielebarchiesi@0 15 function init($plugin) {
danielebarchiesi@0 16 // We modify the plugin info here so that we take the defaults and
danielebarchiesi@0 17 // twiddle, rather than completely override them.
danielebarchiesi@0 18
danielebarchiesi@0 19 // Reset the edit path to match what we're really using.
danielebarchiesi@0 20 $plugin['menu']['items']['edit']['path'] = 'view/%ctools_export_ui/edit';
danielebarchiesi@0 21 $plugin['menu']['items']['clone']['path'] = 'view/%ctools_export_ui/clone';
danielebarchiesi@0 22 $plugin['menu']['items']['clone']['type'] = MENU_VISIBLE_IN_BREADCRUMB;
danielebarchiesi@0 23 $plugin['menu']['items']['export']['path'] = 'view/%ctools_export_ui/export';
danielebarchiesi@0 24 $plugin['menu']['items']['export']['type'] = MENU_VISIBLE_IN_BREADCRUMB;
danielebarchiesi@0 25 $plugin['menu']['items']['enable']['path'] = 'view/%ctools_export_ui/enable';
danielebarchiesi@0 26 $plugin['menu']['items']['disable']['path'] = 'view/%ctools_export_ui/disable';
danielebarchiesi@0 27 $plugin['menu']['items']['delete']['path'] = 'view/%ctools_export_ui/delete';
danielebarchiesi@0 28 $plugin['menu']['items']['delete']['type'] = MENU_VISIBLE_IN_BREADCRUMB;
danielebarchiesi@0 29 $plugin['menu']['items']['revert']['path'] = 'view/%ctools_export_ui/revert';
danielebarchiesi@0 30 $plugin['menu']['items']['revert']['type'] = MENU_VISIBLE_IN_BREADCRUMB;
danielebarchiesi@0 31
danielebarchiesi@0 32 $prefix_count = count(explode('/', $plugin['menu']['menu prefix']));
danielebarchiesi@0 33 $plugin['menu']['items']['add-template'] = array(
danielebarchiesi@0 34 'path' => 'template/%/add',
danielebarchiesi@0 35 'title' => 'Add from template',
danielebarchiesi@0 36 'page callback' => 'ctools_export_ui_switcher_page',
danielebarchiesi@0 37 'page arguments' => array($plugin['name'], 'add_template', $prefix_count + 2),
danielebarchiesi@0 38 'load arguments' => array($plugin['name']),
danielebarchiesi@0 39 'access callback' => 'ctools_export_ui_task_access',
danielebarchiesi@0 40 'access arguments' => array($plugin['name'], 'add_template', $prefix_count + 2),
danielebarchiesi@0 41 'type' => MENU_CALLBACK,
danielebarchiesi@0 42 );
danielebarchiesi@0 43
danielebarchiesi@0 44 return parent::init($plugin);
danielebarchiesi@0 45 }
danielebarchiesi@0 46
danielebarchiesi@0 47 function hook_menu(&$items) {
danielebarchiesi@0 48 // We are using our own 'edit' still, rather than having edit on this
danielebarchiesi@0 49 // object (maybe in the future) so unset the edit callbacks:
danielebarchiesi@0 50
danielebarchiesi@0 51 // Store this so we can put them back as sometimes they're needed
danielebarchiesi@0 52 // again laster:
danielebarchiesi@0 53 $stored_items = $this->plugin['menu']['items'];
danielebarchiesi@0 54 // We leave these to make sure the operations still exist in the plugin so
danielebarchiesi@0 55 // that the path finder.
danielebarchiesi@0 56 unset($this->plugin['menu']['items']['edit']);
danielebarchiesi@0 57 unset($this->plugin['menu']['items']['add']);
danielebarchiesi@0 58 unset($this->plugin['menu']['items']['import']);
danielebarchiesi@0 59 unset($this->plugin['menu']['items']['edit callback']);
danielebarchiesi@0 60
danielebarchiesi@0 61 parent::hook_menu($items);
danielebarchiesi@0 62
danielebarchiesi@0 63 $this->plugin['menu']['items'] = $stored_items;
danielebarchiesi@0 64 }
danielebarchiesi@0 65
danielebarchiesi@0 66 function load_item($item_name) {
danielebarchiesi@0 67 return views_ui_cache_load($item_name);
danielebarchiesi@0 68 }
danielebarchiesi@0 69
danielebarchiesi@0 70 function list_form(&$form, &$form_state) {
danielebarchiesi@0 71 $row_class = 'container-inline';
danielebarchiesi@0 72 if (!variable_get('views_ui_show_listing_filters', FALSE)) {
danielebarchiesi@0 73 $row_class .= " element-invisible";
danielebarchiesi@0 74 }
danielebarchiesi@0 75
danielebarchiesi@0 76 views_include('admin');
danielebarchiesi@0 77
danielebarchiesi@0 78 parent::list_form($form, $form_state);
danielebarchiesi@0 79
danielebarchiesi@0 80 // ctools only has two rows. We want four.
danielebarchiesi@0 81 // That's why we create our own structure.
danielebarchiesi@0 82 $form['bottom row']['submit']['#attributes']['class'][] = 'js-hide';
danielebarchiesi@0 83 $form['first row'] = array(
danielebarchiesi@0 84 '#prefix' => '<div class="' . $row_class . ' ctools-export-ui-row ctools-export-ui-first-row clearfix">',
danielebarchiesi@0 85 '#suffix' => '</div>',
danielebarchiesi@0 86 'search' => $form['top row']['search'],
danielebarchiesi@0 87 'submit' => $form['bottom row']['submit'],
danielebarchiesi@0 88 'reset' => $form['bottom row']['reset'],
danielebarchiesi@0 89 );
danielebarchiesi@0 90 $form['second row'] = array(
danielebarchiesi@0 91 '#prefix' => '<div class="' . $row_class . ' ctools-export-ui-row ctools-export-ui-second-row clearfix">',
danielebarchiesi@0 92 '#suffix' => '</div>',
danielebarchiesi@0 93 'storage' => $form['top row']['storage'],
danielebarchiesi@0 94 'disabled' => $form['top row']['disabled'],
danielebarchiesi@0 95 );
danielebarchiesi@0 96 $form['third row'] = array(
danielebarchiesi@0 97 '#prefix' => '<div class="' . $row_class . ' ctools-export-ui-row ctools-export-ui-third-row clearfix element-hidden">',
danielebarchiesi@0 98 '#suffix' => '</div>',
danielebarchiesi@0 99 'order' => $form['bottom row']['order'],
danielebarchiesi@0 100 'sort' => $form['bottom row']['sort'],
danielebarchiesi@0 101 );
danielebarchiesi@0 102 unset($form['top row']);
danielebarchiesi@0 103 unset($form['bottom row']);
danielebarchiesi@0 104
danielebarchiesi@0 105 // Modify the look and contents of existing form elements.
danielebarchiesi@0 106 $form['second row']['storage']['#title'] = '';
danielebarchiesi@0 107 $form['second row']['storage']['#options'] = array(
danielebarchiesi@0 108 'all' => t('All storage'),
danielebarchiesi@0 109 t('Normal') => t('In database'),
danielebarchiesi@0 110 t('Default') => t('In code'),
danielebarchiesi@0 111 t('Overridden') => t('Database overriding code'),
danielebarchiesi@0 112 );
danielebarchiesi@0 113 $form['second row']['disabled']['#title'] = '';
danielebarchiesi@0 114 $form['second row']['disabled']['#options']['all'] = t('All status');
danielebarchiesi@0 115 $form['third row']['sort']['#title'] = '';
danielebarchiesi@0 116
danielebarchiesi@0 117 // And finally, add our own.
danielebarchiesi@0 118 $this->bases = array();
danielebarchiesi@0 119 foreach (views_fetch_base_tables() as $table => $info) {
danielebarchiesi@0 120 $this->bases[$table] = $info['title'];
danielebarchiesi@0 121 }
danielebarchiesi@0 122
danielebarchiesi@0 123 $form['second row']['base'] = array(
danielebarchiesi@0 124 '#type' => 'select',
danielebarchiesi@0 125 '#options' => array_merge(array('all' => t('All types')), $this->bases),
danielebarchiesi@0 126 '#default_value' => 'all',
danielebarchiesi@0 127 '#weight' => -1,
danielebarchiesi@0 128 );
danielebarchiesi@0 129
danielebarchiesi@0 130 $tags = array();
danielebarchiesi@0 131 if (isset($form_state['object']->items)) {
danielebarchiesi@0 132 foreach ($form_state['object']->items as $name => $view) {
danielebarchiesi@0 133 if (!empty($view->tag)) {
danielebarchiesi@0 134 $view_tags = drupal_explode_tags($view->tag);
danielebarchiesi@0 135 foreach ($view_tags as $tag) {
danielebarchiesi@0 136 $tags[$tag] = $tag;
danielebarchiesi@0 137 }
danielebarchiesi@0 138 }
danielebarchiesi@0 139 }
danielebarchiesi@0 140 }
danielebarchiesi@0 141 asort($tags);
danielebarchiesi@0 142
danielebarchiesi@0 143 $form['second row']['tag'] = array(
danielebarchiesi@0 144 '#type' => 'select',
danielebarchiesi@0 145 '#title' => t('Filter'),
danielebarchiesi@0 146 '#options' => array_merge(array('all' => t('All tags')), array('none' => t('No tags')), $tags),
danielebarchiesi@0 147 '#default_value' => 'all',
danielebarchiesi@0 148 '#weight' => -9,
danielebarchiesi@0 149 );
danielebarchiesi@0 150
danielebarchiesi@0 151 $displays = array();
danielebarchiesi@0 152 foreach (views_fetch_plugin_data('display') as $id => $info) {
danielebarchiesi@0 153 if (!empty($info['admin'])) {
danielebarchiesi@0 154 $displays[$id] = $info['admin'];
danielebarchiesi@0 155 }
danielebarchiesi@0 156 }
danielebarchiesi@0 157 asort($displays);
danielebarchiesi@0 158
danielebarchiesi@0 159 $form['second row']['display'] = array(
danielebarchiesi@0 160 '#type' => 'select',
danielebarchiesi@0 161 '#options' => array_merge(array('all' => t('All displays')), $displays),
danielebarchiesi@0 162 '#default_value' => 'all',
danielebarchiesi@0 163 '#weight' => -1,
danielebarchiesi@0 164 );
danielebarchiesi@0 165 }
danielebarchiesi@0 166
danielebarchiesi@0 167 function list_filter($form_state, $view) {
danielebarchiesi@0 168 // Don't filter by tags if all is set up.
danielebarchiesi@0 169 if ($form_state['values']['tag'] != 'all') {
danielebarchiesi@0 170 // If none is selected check whether the view has a tag.
danielebarchiesi@0 171 if ($form_state['values']['tag'] == 'none') {
danielebarchiesi@0 172 return !empty($view->tag);
danielebarchiesi@0 173 }
danielebarchiesi@0 174 else {
danielebarchiesi@0 175 // Check whether the tag can be found in the views tag.
danielebarchiesi@0 176 return strpos($view->tag, $form_state['values']['tag']) === FALSE;
danielebarchiesi@0 177 }
danielebarchiesi@0 178 }
danielebarchiesi@0 179 if ($form_state['values']['base'] != 'all' && $form_state['values']['base'] != $view->base_table) {
danielebarchiesi@0 180 return TRUE;
danielebarchiesi@0 181 }
danielebarchiesi@0 182
danielebarchiesi@0 183 return parent::list_filter($form_state, $view);
danielebarchiesi@0 184 }
danielebarchiesi@0 185
danielebarchiesi@0 186 function list_sort_options() {
danielebarchiesi@0 187 return array(
danielebarchiesi@0 188 'disabled' => t('Enabled, name'),
danielebarchiesi@0 189 'name' => t('Name'),
danielebarchiesi@0 190 'path' => t('Path'),
danielebarchiesi@0 191 'tag' => t('Tag'),
danielebarchiesi@0 192 'storage' => t('Storage'),
danielebarchiesi@0 193 );
danielebarchiesi@0 194 }
danielebarchiesi@0 195
danielebarchiesi@0 196
danielebarchiesi@0 197 function list_build_row($view, &$form_state, $operations) {
danielebarchiesi@0 198 if (!empty($view->human_name)) {
danielebarchiesi@0 199 $title = $view->human_name;
danielebarchiesi@0 200 }
danielebarchiesi@0 201 else {
danielebarchiesi@0 202 $title = $view->get_title();
danielebarchiesi@0 203 if (empty($title)) {
danielebarchiesi@0 204 $title = $view->name;
danielebarchiesi@0 205 }
danielebarchiesi@0 206 }
danielebarchiesi@0 207
danielebarchiesi@0 208 $paths = _views_ui_get_paths($view);
danielebarchiesi@0 209 $paths = implode(", ", $paths);
danielebarchiesi@0 210
danielebarchiesi@0 211 $base = !empty($this->bases[$view->base_table]) ? $this->bases[$view->base_table] : t('Broken');
danielebarchiesi@0 212
danielebarchiesi@0 213 $info = theme('views_ui_view_info', array('view' => $view, 'base' => $base));
danielebarchiesi@0 214
danielebarchiesi@0 215 // Reorder the operations so that enable is the default action for a templatic views
danielebarchiesi@0 216 if (!empty($operations['enable'])) {
danielebarchiesi@0 217 $operations = array('enable' => $operations['enable']) + $operations;
danielebarchiesi@0 218 }
danielebarchiesi@0 219
danielebarchiesi@0 220 // Set up sorting
danielebarchiesi@0 221 switch ($form_state['values']['order']) {
danielebarchiesi@0 222 case 'disabled':
danielebarchiesi@0 223 $this->sorts[$view->name] = strtolower(empty($view->disabled) . $title);
danielebarchiesi@0 224 break;
danielebarchiesi@0 225 case 'name':
danielebarchiesi@0 226 $this->sorts[$view->name] = strtolower($title);
danielebarchiesi@0 227 break;
danielebarchiesi@0 228 case 'path':
danielebarchiesi@0 229 $this->sorts[$view->name] = strtolower($paths);
danielebarchiesi@0 230 break;
danielebarchiesi@0 231 case 'tag':
danielebarchiesi@0 232 $this->sorts[$view->name] = strtolower($view->tag);
danielebarchiesi@0 233 break;
danielebarchiesi@0 234 case 'storage':
danielebarchiesi@0 235 $this->sorts[$view->name] = strtolower($view->type . $title);
danielebarchiesi@0 236 break;
danielebarchiesi@0 237 }
danielebarchiesi@0 238
danielebarchiesi@0 239 $ops = theme('links__ctools_dropbutton', array('links' => $operations, 'attributes' => array('class' => array('links', 'inline'))));
danielebarchiesi@0 240
danielebarchiesi@0 241 $this->rows[$view->name] = array(
danielebarchiesi@0 242 'data' => array(
danielebarchiesi@0 243 array('data' => $info, 'class' => array('views-ui-name')),
danielebarchiesi@0 244 array('data' => check_plain($view->description), 'class' => array('views-ui-description')),
danielebarchiesi@0 245 array('data' => check_plain($view->tag), 'class' => array('views-ui-tag')),
danielebarchiesi@0 246 array('data' => $paths, 'class' => array('views-ui-path')),
danielebarchiesi@0 247 array('data' => $ops, 'class' => array('views-ui-operations')),
danielebarchiesi@0 248 ),
danielebarchiesi@0 249 'title' => t('Machine name: ') . check_plain($view->name),
danielebarchiesi@0 250 'class' => array(!empty($view->disabled) ? 'ctools-export-ui-disabled' : 'ctools-export-ui-enabled'),
danielebarchiesi@0 251 );
danielebarchiesi@0 252 }
danielebarchiesi@0 253
danielebarchiesi@0 254 function list_render(&$form_state) {
danielebarchiesi@0 255 views_include('admin');
danielebarchiesi@0 256 views_ui_add_admin_css();
danielebarchiesi@0 257 if (empty($_REQUEST['js'])) {
danielebarchiesi@0 258 views_ui_check_advanced_help();
danielebarchiesi@0 259 }
danielebarchiesi@0 260 drupal_add_library('system', 'jquery.bbq');
danielebarchiesi@0 261 views_add_js('views-list');
danielebarchiesi@0 262
danielebarchiesi@0 263 $this->active = $form_state['values']['order'];
danielebarchiesi@0 264 $this->order = $form_state['values']['sort'];
danielebarchiesi@0 265
danielebarchiesi@0 266 $query = tablesort_get_query_parameters();
danielebarchiesi@0 267
danielebarchiesi@0 268 $header = array(
danielebarchiesi@0 269 $this->tablesort_link(t('View name'), 'name', 'views-ui-name'),
danielebarchiesi@0 270 array('data' => t('Description'), 'class' => array('views-ui-description')),
danielebarchiesi@0 271 $this->tablesort_link(t('Tag'), 'tag', 'views-ui-tag'),
danielebarchiesi@0 272 $this->tablesort_link(t('Path'), 'path', 'views-ui-path'),
danielebarchiesi@0 273 array('data' => t('Operations'), 'class' => array('views-ui-operations')),
danielebarchiesi@0 274 );
danielebarchiesi@0 275
danielebarchiesi@0 276 $table = array(
danielebarchiesi@0 277 'header' => $header,
danielebarchiesi@0 278 'rows' => $this->rows,
danielebarchiesi@0 279 'empty' => t('No views match the search criteria.'),
danielebarchiesi@0 280 'attributes' => array('id' => 'ctools-export-ui-list-items'),
danielebarchiesi@0 281 );
danielebarchiesi@0 282 return theme('table', $table);
danielebarchiesi@0 283 }
danielebarchiesi@0 284
danielebarchiesi@0 285 function tablesort_link($label, $field, $class) {
danielebarchiesi@0 286 $title = t('sort by @s', array('@s' => $label));
danielebarchiesi@0 287 $initial = 'asc';
danielebarchiesi@0 288
danielebarchiesi@0 289 if ($this->active == $field) {
danielebarchiesi@0 290 $initial = ($this->order == 'asc') ? 'desc' : 'asc';
danielebarchiesi@0 291 $label .= theme('tablesort_indicator', array('style' => $initial));
danielebarchiesi@0 292 }
danielebarchiesi@0 293
danielebarchiesi@0 294 $query['order'] = $field;
danielebarchiesi@0 295 $query['sort'] = $initial;
danielebarchiesi@0 296 $link_options = array(
danielebarchiesi@0 297 'html' => TRUE,
danielebarchiesi@0 298 'attributes' => array('title' => $title),
danielebarchiesi@0 299 'query' => $query,
danielebarchiesi@0 300 );
danielebarchiesi@0 301 $link = l($label, $_GET['q'], $link_options);
danielebarchiesi@0 302 if ($this->active == $field) {
danielebarchiesi@0 303 $class .= ' active';
danielebarchiesi@0 304 }
danielebarchiesi@0 305
danielebarchiesi@0 306 return array('data' => $link, 'class' => $class);
danielebarchiesi@0 307 }
danielebarchiesi@0 308
danielebarchiesi@0 309 function clone_page($js, $input, $item, $step = NULL) {
danielebarchiesi@0 310 drupal_set_title($this->get_page_title('clone', $item));
danielebarchiesi@0 311
danielebarchiesi@0 312 $name = $item->{$this->plugin['export']['key']};
danielebarchiesi@0 313
danielebarchiesi@0 314 $form_state = array(
danielebarchiesi@0 315 'plugin' => $this->plugin,
danielebarchiesi@0 316 'object' => &$this,
danielebarchiesi@0 317 'ajax' => $js,
danielebarchiesi@0 318 'item' => $item,
danielebarchiesi@0 319 'op' => 'add',
danielebarchiesi@0 320 'form type' => 'clone',
danielebarchiesi@0 321 'original name' => $name,
danielebarchiesi@0 322 'rerender' => TRUE,
danielebarchiesi@0 323 'no_redirect' => TRUE,
danielebarchiesi@0 324 'step' => $step,
danielebarchiesi@0 325 // Store these in case additional args are needed.
danielebarchiesi@0 326 'function args' => func_get_args(),
danielebarchiesi@0 327 );
danielebarchiesi@0 328
danielebarchiesi@0 329 $output = drupal_build_form('views_ui_clone_form', $form_state);
danielebarchiesi@0 330 if (!empty($form_state['executed'])) {
danielebarchiesi@0 331 $item->name = $form_state['values']['name'];
danielebarchiesi@0 332 $item->human_name = $form_state['values']['human_name'];
danielebarchiesi@0 333 $item->vid = NULL;
danielebarchiesi@0 334 views_ui_cache_set($item);
danielebarchiesi@0 335
danielebarchiesi@0 336 drupal_goto(ctools_export_ui_plugin_menu_path($this->plugin, 'edit', $item->name));
danielebarchiesi@0 337 }
danielebarchiesi@0 338
danielebarchiesi@0 339 return $output;
danielebarchiesi@0 340 }
danielebarchiesi@0 341
danielebarchiesi@0 342 function add_template_page($js, $input, $name, $step = NULL) {
danielebarchiesi@0 343 $templates = views_get_all_templates();
danielebarchiesi@0 344
danielebarchiesi@0 345 if (empty($templates[$name])) {
danielebarchiesi@0 346 return MENU_NOT_FOUND;
danielebarchiesi@0 347 }
danielebarchiesi@0 348
danielebarchiesi@0 349 $template = $templates[$name];
danielebarchiesi@0 350
danielebarchiesi@0 351 // The template description probably describes the template, not the
danielebarchiesi@0 352 // view that will be created from it, but users aren't that likely to
danielebarchiesi@0 353 // touch it.
danielebarchiesi@0 354 if (!empty($template->description)) {
danielebarchiesi@0 355 unset($template->description);
danielebarchiesi@0 356 }
danielebarchiesi@0 357
danielebarchiesi@0 358 $template->is_template = TRUE;
danielebarchiesi@0 359 $template->type = t('Default');
danielebarchiesi@0 360
danielebarchiesi@0 361 $output = $this->clone_page($js, $input, $template, $step);
danielebarchiesi@0 362 drupal_set_title(t('Create view from template @template', array('@template' => $template->get_human_name())));
danielebarchiesi@0 363 return $output;
danielebarchiesi@0 364 }
danielebarchiesi@0 365
danielebarchiesi@0 366 function set_item_state($state, $js, $input, $item) {
danielebarchiesi@0 367 ctools_export_set_object_status($item, $state);
danielebarchiesi@0 368 menu_rebuild();
danielebarchiesi@0 369
danielebarchiesi@0 370 if (!$js) {
danielebarchiesi@0 371 drupal_goto(ctools_export_ui_plugin_base_path($this->plugin));
danielebarchiesi@0 372 }
danielebarchiesi@0 373 else {
danielebarchiesi@0 374 return $this->list_page($js, $input);
danielebarchiesi@0 375 }
danielebarchiesi@0 376 }
danielebarchiesi@0 377
danielebarchiesi@0 378 function list_page($js, $input) {
danielebarchiesi@0 379 // Remove filters values from session if filters are hidden.
danielebarchiesi@0 380 if (!variable_get('views_ui_show_listing_filters', FALSE) && isset($_SESSION['ctools_export_ui'][$this->plugin['name']])) {
danielebarchiesi@0 381 unset($_SESSION['ctools_export_ui'][$this->plugin['name']]);
danielebarchiesi@0 382 }
danielebarchiesi@0 383
danielebarchiesi@0 384 // wrap output in a div for CSS
danielebarchiesi@0 385 $output = parent::list_page($js, $input);
danielebarchiesi@0 386 if (is_string($output)) {
danielebarchiesi@0 387 $output = '<div id="views-ui-list-page">' . $output . '</div>';
danielebarchiesi@0 388 return $output;
danielebarchiesi@0 389 }
danielebarchiesi@0 390 }
danielebarchiesi@0 391 }
danielebarchiesi@0 392
danielebarchiesi@0 393 /**
danielebarchiesi@0 394 * Form callback to edit an exportable item using the wizard
danielebarchiesi@0 395 *
danielebarchiesi@0 396 * This simply loads the object defined in the plugin and hands it off.
danielebarchiesi@0 397 */
danielebarchiesi@0 398 function views_ui_clone_form($form, &$form_state) {
danielebarchiesi@0 399 $counter = 1;
danielebarchiesi@0 400
danielebarchiesi@0 401 if (!isset($form_state['item'])) {
danielebarchiesi@0 402 $view = views_get_view($form_state['original name']);
danielebarchiesi@0 403 }
danielebarchiesi@0 404 else {
danielebarchiesi@0 405 $view = $form_state['item'];
danielebarchiesi@0 406 }
danielebarchiesi@0 407 do {
danielebarchiesi@0 408 if (empty($form_state['item']->is_template)) {
danielebarchiesi@0 409 $name = format_plural($counter, 'Clone of', 'Clone @count of') . ' ' . $view->get_human_name();
danielebarchiesi@0 410 }
danielebarchiesi@0 411 else {
danielebarchiesi@0 412 $name = $view->get_human_name();
danielebarchiesi@0 413 if ($counter > 1) {
danielebarchiesi@0 414 $name .= ' ' . $counter;
danielebarchiesi@0 415 }
danielebarchiesi@0 416 }
danielebarchiesi@0 417 $counter++;
danielebarchiesi@0 418 $machine_name = preg_replace('/[^a-z0-9_]+/', '_', drupal_strtolower($name));
danielebarchiesi@0 419 } while (ctools_export_crud_load($form_state['plugin']['schema'], $machine_name));
danielebarchiesi@0 420
danielebarchiesi@0 421 $form['human_name'] = array(
danielebarchiesi@0 422 '#type' => 'textfield',
danielebarchiesi@0 423 '#title' => t('View name'),
danielebarchiesi@0 424 '#default_value' => $name,
danielebarchiesi@0 425 '#size' => 32,
danielebarchiesi@0 426 '#maxlength' => 255,
danielebarchiesi@0 427 );
danielebarchiesi@0 428
danielebarchiesi@0 429 $form['name'] = array(
danielebarchiesi@0 430 '#title' => t('View name'),
danielebarchiesi@0 431 '#type' => 'machine_name',
danielebarchiesi@0 432 '#required' => TRUE,
danielebarchiesi@0 433 '#maxlength' => 128,
danielebarchiesi@0 434 '#size' => 128,
danielebarchiesi@0 435 '#machine_name' => array(
danielebarchiesi@0 436 'exists' => 'ctools_export_ui_edit_name_exists',
danielebarchiesi@0 437 'source' => array('human_name'),
danielebarchiesi@0 438 ),
danielebarchiesi@0 439 );
danielebarchiesi@0 440
danielebarchiesi@0 441 $form['submit'] = array(
danielebarchiesi@0 442 '#type' => 'submit',
danielebarchiesi@0 443 '#value' => t('Continue'),
danielebarchiesi@0 444 );
danielebarchiesi@0 445
danielebarchiesi@0 446 return $form;
danielebarchiesi@0 447 }