| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: skinr_ui.admin.inc,v 1.1.2.18 2010/10/08 00:41:55 jgirlygirl Exp $ 3 4 /** 5 * @file 6 * Admin page callbacks for the skinr module. 7 */ 8 9 /** 10 * Menu callback; displays the skinr listing page. 11 */ 12 function skinr_ui_list($form_state) { 13 if (isset($form_state['values']['operation']) && $form_state['values']['operation'] == 'delete') { 14 return skinr_ui_settings_multiple_delete_confirm($form_state, array_filter($form_state['values']['skinr_settings'])); 15 } 16 $form = skinr_ui_filter_form(); 17 18 $form['#theme'] = 'skinr_ui_filter_form'; 19 $form['admin'] = skinr_ui_admin_skins(); 20 21 return $form; 22 } 23 24 /** 25 * Form builder: Builds the skinr administration overview. 26 */ 27 function skinr_ui_admin_skins() { 28 $session = !empty($_SESSION['skinr_ui_overview_filter']) && is_array($_SESSION['skinr_ui_overview_filter']) ? $_SESSION['skinr_ui_overview_filter'] : array(); 29 $filters = array(); 30 foreach ($session as $filter) { 31 list($key, $value) = $filter; 32 $filters[$key] = $value; 33 } 34 35 $sorts = array(); 36 37 $form['options'] = array( 38 '#type' => 'fieldset', 39 '#title' => t('Update options'), 40 '#prefix' => '<div class="container-inline">', 41 '#suffix' => '</div>', 42 ); 43 $options = array(); 44 foreach (module_invoke_all('skinr_operations') as $operation => $array) { 45 $options[$operation] = $array['label']; 46 } 47 $form['options']['operation'] = array( 48 '#type' => 'select', 49 '#options' => $options, 50 '#default_value' => 'approve', 51 ); 52 $form['options']['submit'] = array( 53 '#type' => 'submit', 54 '#value' => t('Update'), 55 '#submit' => array('skinr_ui_admin_skins_submit'), 56 ); 57 58 $themes = list_themes(); 59 ksort($themes); 60 61 $skinr_settings = array(); 62 $options = array(); 63 $destination = drupal_get_destination(); 64 $type = !empty($filters['type']) ? $filters['type'] : NULL; 65 66 foreach ($themes as $theme) { 67 if (!$theme->status || (!empty($filters['theme']) && $filters['theme'] != $theme->name)) { 68 continue; 69 } 70 if (empty($type)) { 71 $skinrs = skinr_get($theme->name); 72 } 73 else { 74 $skinrs = array($type => skinr_get($theme->name, $type)); 75 } 76 77 foreach ($skinrs as $module => $elements) { 78 foreach ($elements as $sid => $skin) { 79 $key = $theme->name .'__'. $module .'__'. $sid; 80 $skinr_settings[$key] = ''; 81 82 if ($module == 'page') { 83 $url_edit = 'admin/build/skinr/rules/edit/'. $sid; 84 } 85 else { 86 $url_edit = 'admin/build/skinr/edit/nojs/'. $module .'/'. $sid; 87 } 88 $url_delete = 'admin/build/skinr/delete/'. $theme->name .'/'. $module .'/'. $sid; 89 $operations = array( 90 'edit' => array( 91 'title' => t('edit'), 92 'href' => $url_edit, 93 'query' => $destination, 94 ), 95 'delete' => array( 96 'title' => t('delete'), 97 'href' => $url_delete, 98 'query' => $destination, 99 ), 100 ); 101 $options[$key] = array( 102 'theme' => $theme->info['name'], 103 'type' => $module, 104 'sid' => $sid, 105 'operations' => theme('links', $operations, array('class' => 'links inline')), 106 ); 107 } 108 } 109 } 110 111 $form['rows'] = array('#type' => 'value', '#value' => $options); 112 $form['skinr_settings'] = array('#type' => 'checkboxes', '#options' => $skinr_settings); 113 $form['#theme'] = 'skinr_ui_admin_skins'; 114 115 return $form; 116 } 117 118 /** 119 * Validate skinr_ui_admin_skins form submissions. 120 * 121 * Check if any skinr settings have been selected to perform the chosen 122 * 'Update option' on. 123 */ 124 function skinr_ui_admin_skins_validate($form, &$form_state) { 125 $skinr_settings = array_filter($form_state['values']['skinr_settings']); 126 if (count($skinr_settings) == 0) { 127 form_set_error('', t('No items selected.')); 128 } 129 } 130 131 /** 132 * Process skinr_ui_admin_skins form submissions. 133 * 134 * Execute the chosen 'Update option' on the selected nodes. 135 */ 136 function skinr_ui_admin_skins_submit($form, &$form_state) { 137 $operations = module_invoke_all('skinr_operations'); 138 $operation = $operations[$form_state['values']['operation']]; 139 // Filter out unchecked nodes 140 $skinr_settings = array_filter($form_state['values']['skinr_settings']); 141 if ($function = $operation['callback']) { 142 // Add in callback arguments if present. 143 if (isset($operation['callback arguments'])) { 144 $args = array_merge(array($nodes), $operation['callback arguments']); 145 } 146 else { 147 $args = array($skinr_settings); 148 } 149 call_user_func_array($function, $args); 150 151 cache_clear_all(); 152 } 153 else { 154 // We need to rebuild the form to go to a second step. For example, to 155 // show the confirmation form for the deletion of nodes. 156 $form_state['rebuild'] = TRUE; 157 } 158 } 159 160 /** 161 * Implementation of hook_skinr_operations(). 162 */ 163 function skinr_ui_skinr_operations() { 164 $operations = array( 165 'delete' => array( 166 'label' => t('Delete'), 167 'callback' => NULL, 168 ), 169 ); 170 return $operations; 171 } 172 173 /** 174 * List skinr administration filters that can be applied. 175 */ 176 function skinr_ui_filters() { 177 // Theme filter. 178 $themes = list_themes(); 179 ksort($themes); 180 181 $options = array(); 182 foreach ($themes as $theme) { 183 if (!$theme->status) { 184 continue; 185 } 186 $options[$theme->name] = $theme->info['name']; 187 } 188 189 $filters['theme'] = array( 190 'title' => t('theme'), 191 'options' => $options, 192 ); 193 194 // Type filter. 195 $config = skinr_fetch_config(); 196 197 $options = array(); 198 foreach ($config as $type => $data) { 199 $options[$type] = $type; 200 } 201 202 $filters['type'] = array( 203 'title' => t('type'), 204 'options' => $options, 205 ); 206 207 return $filters; 208 } 209 210 /** 211 * Return form for skinr administration filters. 212 */ 213 function skinr_ui_filter_form() { 214 $session = &$_SESSION['skinr_ui_overview_filter']; 215 $session = is_array($session) ? $session : array(); 216 $filters = skinr_ui_filters(); 217 218 $i = 0; 219 $form['filters'] = array( 220 '#type' => 'fieldset', 221 '#title' => t('Show only items where'), 222 '#theme' => 'skinr_ui_filters', 223 ); 224 $form['#submit'][] = 'skinr_ui_filter_form_submit'; 225 foreach ($session as $filter) { 226 list($type, $value) = $filter; 227 $value = $filters[$type]['options'][$value]; 228 229 if ($i++) { 230 $form['filters']['current'][] = array('#value' => t('<em>and</em> where <strong>%a</strong> is <strong>%b</strong>', array('%a' => $filters[$type]['title'], '%b' => $value))); 231 } 232 else { 233 $form['filters']['current'][] = array('#value' => t('<strong>%a</strong> is <strong>%b</strong>', array('%a' => $filters[$type]['title'], '%b' => $value))); 234 } 235 if (in_array($type, array('theme', 'type'))) { 236 // Remove the option if it is already being filtered on. 237 unset($filters[$type]); 238 } 239 } 240 241 foreach ($filters as $key => $filter) { 242 $names[$key] = $filter['title']; 243 $form['filters']['status'][$key] = array('#type' => 'select', '#options' => $filter['options']); 244 } 245 246 $form['filters']['filter'] = array('#type' => 'radios', '#options' => $names, '#default_value' => 'status'); 247 if (count($filters)) { 248 $form['filters']['buttons']['submit'] = array('#type' => 'submit', '#value' => (count($session) ? t('Refine') : t('Filter'))); 249 } 250 if (count($session)) { 251 $form['filters']['buttons']['undo'] = array('#type' => 'submit', '#value' => t('Undo')); 252 $form['filters']['buttons']['reset'] = array('#type' => 'submit', '#value' => t('Reset')); 253 } 254 255 drupal_add_js('misc/form.js', 'core'); 256 257 return $form; 258 } 259 260 /** 261 * Theme skinr administration filter form. 262 * 263 * @ingroup themeable 264 */ 265 function theme_skinr_ui_filter_form($form) { 266 $output = ''; 267 $output .= '<div id="skinr-ui-admin-filter">'; 268 $output .= drupal_render($form['filters']); 269 $output .= '</div>'; 270 $output .= drupal_render($form); 271 return $output; 272 } 273 274 /** 275 * Theme skinr administration filter selector. 276 * 277 * @ingroup themeable 278 */ 279 function theme_skinr_ui_filters($form) { 280 $output = ''; 281 $output .= '<ul class="clear-block">'; 282 if (!empty($form['current'])) { 283 foreach (element_children($form['current']) as $key) { 284 $output .= '<li>'. drupal_render($form['current'][$key]) .'</li>'; 285 } 286 } 287 288 $output .= '<li><dl class="multiselect">'; 289 290 $element_children = element_children($form['filter']); 291 if (!empty($element_children)) { 292 $output .= (!empty($form['current']) ? '<dt><em>'. t('and') .'</em> '. t('where') .'</dt>' : '') .'<dd class="a">'; 293 foreach ($element_children as $key) { 294 $output .= drupal_render($form['filter'][$key]); 295 } 296 $output .= '</dd>'; 297 298 $output .= '<dt>'. t('is') .'</dt>'; 299 } 300 301 $output .= '<dd class="b">'; 302 303 foreach (element_children($form['status']) as $key) { 304 $output .= drupal_render($form['status'][$key]); 305 } 306 $output .= '</dd>'; 307 308 $output .= '</dl>'; 309 $output .= '<div class="container-inline" id="node-admin-buttons">'. drupal_render($form['buttons']) .'</div>'; 310 $output .= '</li></ul>'; 311 312 return $output; 313 } 314 315 /** 316 * Process result from node administration filter form. 317 */ 318 function skinr_ui_filter_form_submit($form, &$form_state) { 319 $filters = skinr_ui_filters(); 320 switch ($form_state['values']['op']) { 321 case t('Filter'): 322 case t('Refine'): 323 if (isset($form_state['values']['filter'])) { 324 $filter = $form_state['values']['filter']; 325 326 // Flatten the options array to accommodate hierarchical/nested options. 327 $flat_options = form_options_flatten($filters[$filter]['options']); 328 329 if (isset($flat_options[$form_state['values'][$filter]])) { 330 $_SESSION['skinr_ui_overview_filter'][] = array($filter, $form_state['values'][$filter]); 331 } 332 } 333 break; 334 case t('Undo'): 335 array_pop($_SESSION['skinr_ui_overview_filter']); 336 break; 337 case t('Reset'): 338 $_SESSION['skinr_ui_overview_filter'] = array(); 339 break; 340 } 341 } 342 343 /** 344 * Menu callback; displays the skinr settings administration form. 345 */ 346 function skinr_ui_admin_form(&$form_state) { 347 $form = array(); 348 349 $form['overlay'] = array( 350 '#type' => 'fieldset', 351 '#title' => t('Overlay'), 352 '#collapsible' => TRUE, 353 ); 354 $form['overlay']['skinr_overlay_width'] = array( 355 '#type' => 'textfield', 356 '#title' => t('Window width'), 357 '#default_value' => variable_get('skinr_overlay_width', 600), 358 '#description' => t('The width of the overlay window. Leave this field blank to allow the window to automatically resize itself to a minimal width.'), 359 ); 360 $form['overlay']['skinr_overlay_height'] = array( 361 '#type' => 'textfield', 362 '#title' => t('Window height'), 363 '#default_value' => variable_get('skinr_overlay_height', NULL), 364 '#description' => t('The height of the overlay window. Leave this field blank to allow the window to automatically resize itself to the height of your browser.'), 365 ); 366 367 return system_settings_form($form); 368 } 369 370 /** 371 * Validation handler for skinr settings administration form. 372 */ 373 function skinr_ui_admin_form_validate(&$form, &$form_state) { 374 if (empty($form_state['values']['skinr_overlay_width'])) { 375 $form_state['values']['skinr_overlay_width'] = NULL; 376 } 377 if (empty($form_state['values']['skinr_overlay_height'])) { 378 $form_state['values']['skinr_overlay_height'] = NULL; 379 } 380 } 381 382 /** 383 * Helper function to sort skinsets by the name in their .info file. 384 */ 385 function skinr_ui_sort_by_info_name($a, $b) { 386 return strcasecmp($a->info['name'], $b->info['name']); 387 } 388 389 /** 390 * Menu callback; displays a listing of all non-theme skinsets. 391 * 392 * @ingroup forms 393 * @see skinr_ui_skinsets_form_submit() 394 */ 395 function skinr_ui_skinsets_form() { 396 $skinsets = skinr_rebuild_skinset_data(); 397 398 uasort($skinsets, 'skinr_ui_sort_by_info_name'); 399 400 // Store module list for use in the theme function. 401 $form['skinsets'] = array('#type' => 'value', '#value' => $skinsets); 402 403 $options = array(); 404 $status = array(); 405 $incompatible_core = array(); 406 $incompatible_php = array(); 407 408 foreach ($skinsets as $skinset) { 409 $screenshot = NULL; 410 $skinset_keys = array($skinset->name); 411 // Look for a screenshot in the current skinset. 412 if (isset($skinsets[$skinset->name]) && file_exists($skinsets[$skinset->name]->info['screenshot'])) { 413 $screenshot = $skinsets[$skinset->name]->info['screenshot']; 414 } 415 $screenshot = $screenshot ? theme('image', $screenshot, t('Screenshot for %theme theme', array('%theme' => $skinset->info['name'])), '', array('class' => 'screenshot'), FALSE) : t('no screenshot'); 416 417 $form[$skinset->name]['screenshot'] = array('#value' => $screenshot); 418 $form[$skinset->name]['info'] = array( 419 '#type' => 'value', 420 '#value' => $skinset->info, 421 ); 422 $options[$skinset->name] = ''; 423 424 if (!empty($skinset->status)) { 425 $status[] = $skinset->name; 426 } 427 else { 428 // Ensure this theme is compatible with this version of core. 429 if (!isset($skinset->info['core']) || $skinset->info['core'] != DRUPAL_CORE_COMPATIBILITY) { 430 $incompatible_core[] = $skinset->name; 431 } 432 if (version_compare(phpversion(), $skinset->info['php']) < 0) { 433 $incompatible_php[$skinset->name] = $skinset->info['php']; 434 } 435 } 436 437 $form[$skinset->name]['operations'] = array( 438 '#value' => l('configure', 'admin/build/skinr/skins/settings/'. $skinset->name), 439 ); 440 } 441 442 $form['status'] = array( 443 '#type' => 'checkboxes', 444 '#options' => $options, 445 '#default_value' => $status, 446 '#incompatible_skinsets_core' => drupal_map_assoc($incompatible_core), 447 '#incompatible_skinsets_php' => $incompatible_php, 448 ); 449 $form['buttons']['submit'] = array( 450 '#type' => 'submit', 451 '#value' => t('Save configuration'), 452 ); 453 $form['buttons']['reset'] = array( 454 '#type' => 'submit', 455 '#value' => t('Reset to defaults'), 456 ); 457 return $form; 458 } 459 460 /** 461 * Menu callback; displays a listing of all skins in a skinsets, allowing you 462 * to enable or disable them individually for each theme. 463 * 464 * @ingroup forms 465 * @see skinr_ui_skinsets_settings_form_submit() 466 */ 467 function skinr_ui_skinsets_settings_form($form_state, $skinset_name) { 468 $form = array( 469 '#tree' => TRUE, 470 ); 471 472 $skinsets = skinr_skinsets('skinset'); 473 if (!empty($skinsets[$skinset_name])) { 474 $skinset = $skinsets[$skinset_name]; 475 } 476 477 $themes = list_themes(); 478 ksort($themes); 479 480 foreach ($skinset->skins as $skin_name => $skin) { 481 $form[$skin_name]['info'] = array( 482 '#type' => 'value', 483 '#value' => $skin, 484 ); 485 486 $status = array(); 487 $options = array(); 488 foreach ($themes as $theme) { 489 if (!$theme->status) { 490 continue; 491 } 492 493 $options[$theme->name] = ''; 494 495 if (!empty($skin['status'][$theme->name])) { 496 $status[] = $theme->name; 497 } 498 } 499 500 $form[$skin_name]['status'] = array( 501 '#type' => 'checkboxes', 502 '#options' => $options, 503 '#default_value' => $status, 504 ); 505 } 506 507 $form['skinset'] = array( 508 '#type' => 'value', 509 '#value' => $skinset_name, 510 ); 511 $form['buttons']['submit'] = array( 512 '#type' => 'submit', 513 '#value' => t('Save configuration'), 514 ); 515 $form['buttons']['reset'] = array( 516 '#type' => 'submit', 517 '#value' => t('Reset to defaults'), 518 ); 519 520 return $form; 521 } 522 523 /** 524 * Process skinr_ui_skinsets_form form submissions. 525 */ 526 function skinr_ui_skinsets_form_submit($form, &$form_state) { 527 // Store list of previously enabled themes and disable all themes 528 $old_skinset_list = $new_skinset_list = array(); 529 foreach (skinr_skinsets('skinset') as $skinset) { 530 if ($skinset->status) { 531 $old_skinset_list[] = $skinset->name; 532 } 533 } 534 db_query("UPDATE {skinr_skinsets} SET status = 0"); 535 536 if ($form_state['values']['op'] == t('Save configuration')) { 537 if (is_array($form_state['values']['status'])) { 538 foreach ($form_state['values']['status'] as $key => $choice) { 539 if ($choice) { 540 $new_theme_list[] = $key; 541 db_query("UPDATE {skinr_skinsets} SET status = 1 WHERE name = '%s'", $key); 542 } 543 } 544 } 545 } 546 else { 547 // Revert to defaults: disable all skinsets. 548 } 549 550 // Refresh skinsets from DB. 551 skinr_skinsets('skinset', TRUE); 552 553 // @todo Disable any skins from skinsets that are now disabled. 554 555 drupal_set_message(t('The configuration options have been saved.')); 556 $form_state['redirect'] = 'admin/build/skinr/skins'; 557 558 return; 559 } 560 561 /** 562 * Process skinr_ui_skinsets_settings_form form submissions. 563 */ 564 function skinr_ui_skinsets_settings_form_submit($form, &$form_state) { 565 if ($form_state['values']['op'] == t('Save configuration')) { 566 foreach ($form_state['values'] as $skin_name => $skin) { 567 if (is_array($form_state['values'][$skin_name]['status'])) { 568 $skinr_skin = new StdClass(); 569 $skinr_skin->name = $form_state['values']['skinset']; 570 $skinr_skin->type = 'skinset'; 571 $skinr_skin->skin = $skin_name; 572 $skinr_skin->status = _skinr_array_strip_empty($form_state['values'][$skin_name]['status']); 573 574 if (db_result(db_query("SELECT 1 FROM {skinr_skins} WHERE name = '%s' AND skin = '%s'", $skinr_skin->name, $skinr_skin->skin))) { 575 // Record exists, so let's update. 576 drupal_write_record('skinr_skins', $skinr_skin, array('name', 'skin')); 577 } 578 else { 579 // Insert a new record. 580 drupal_write_record('skinr_skins', $skinr_skin); 581 } 582 } 583 } 584 } 585 else { 586 // Revert to defaults: disable all skinsets. 587 } 588 589 drupal_set_message(t('The configuration options have been saved.')); 590 $form_state['redirect'] = 'admin/build/skinr/skins'; 591 592 return; 593 } 594 595 /** 596 * Skinr settings export form. 597 */ 598 function skinr_ui_export_form(&$form_state, $theme = NULL) { 599 $form = array(); 600 $themes = list_themes(); 601 602 if ($theme) { 603 // Export an individual theme. 604 $theme = str_replace('-', '_', $theme); 605 $skinrs = skinr_get($theme); 606 607 // Convert classes to arrays. 608 foreach ($skinrs as $module => $data) { 609 foreach ($data as $sid => $skinr) { 610 $skinrs[$module][$sid] = (array) $skinrs[$module][$sid]; 611 } 612 } 613 614 $code = '$skinrs = '. var_export($skinrs, TRUE) .';'; 615 $lines = substr_count($code, "\n") + 1; 616 617 $form['theme'] = array( 618 '#type' => 'textfield', 619 '#title' => t('Theme'), 620 '#value' => $themes[$theme]->info['name'], 621 '#disabled' => TRUE, 622 ); 623 624 $form['skinr_settings'] = array( 625 '#type' => 'textarea', 626 '#title' => t('Skinr settings'), 627 '#default_value' => $code, 628 '#rows' => min($lines, 150), 629 ); 630 } 631 else { 632 // Give the option for which theme to export. 633 634 $options = array(); 635 ksort($themes); 636 $current_theme = skinr_current_theme(TRUE); 637 638 // Put default theme at the top. 639 $options[$current_theme] = $themes[$current_theme]->info['name'].' ['. t('default') .']'; 640 641 foreach ($themes as $theme) { 642 if ($theme->name == $current_theme) { 643 // Do nothing. 644 } 645 elseif ($theme->status) { 646 $options[$theme->name] = $theme->info['name'] .' ['. t('enabled') .']'; 647 } 648 else { 649 $options[$theme->name] = $theme->info['name']; 650 } 651 } 652 653 $form['theme'] = array( 654 '#type' => 'select', 655 '#title' => t('Theme'), 656 '#description' => t('Theme to export the skinr settings for.'), 657 '#options' => $options, 658 '#required' => TRUE, 659 ); 660 $form['submit'] = array( 661 '#type' => 'submit', 662 '#value' => t('Export'), 663 ); 664 } 665 666 return $form; 667 } 668 669 /** 670 * Validation handler for skinr settings export form. 671 */ 672 function skinr_ui_export_form_validate(&$form, &$form_state) { 673 if (!empty($form_state['values']['theme']) && preg_match('/[^a-zA-Z0-9_]/', $form_state['values']['theme'])) { 674 form_error($form['theme'], t('The theme name must be alphanumeric and can contain underscores only.')); 675 } 676 } 677 678 /** 679 * Submit handler for skinr settings export form. 680 */ 681 function skinr_ui_export_form_submit(&$form, &$form_state) { 682 drupal_goto('admin/build/skinr/export/'. str_replace('_', '-', $form_state['values']['theme'])); 683 } 684 685 /** 686 * Skinr settings import form. 687 */ 688 function skinr_ui_import_form(&$form_state) { 689 $form = array(); 690 691 $options = array(); 692 $themes = list_themes(); 693 ksort($themes); 694 $current_theme = skinr_current_theme(TRUE); 695 696 // Put default theme at the top. 697 $options[$current_theme] = $themes[$current_theme]->info['name'].' ['. t('default') .']'; 698 699 foreach ($themes as $theme) { 700 if ($theme->name == $current_theme) { 701 // Do nothing. 702 } 703 elseif ($theme->status) { 704 $options[$theme->name] = $theme->info['name'] .' ['. t('enabled') .']'; 705 } 706 else { 707 $options[$theme->name] = $theme->info['name']; 708 } 709 } 710 711 $form['theme'] = array( 712 '#type' => 'select', 713 '#title' => t('Theme'), 714 '#options' => $options, 715 '#required' => TRUE, 716 ); 717 $form['skinr_settings'] = array( 718 '#type' => 'textarea', 719 '#title' => t('Skinr settings'), 720 '#description' => t('Paste skinr settings here.'), 721 '#rows' => 16, 722 ); 723 $form['submit'] = array( 724 '#type' => 'submit', 725 '#value' => t('Import'), 726 ); 727 728 return $form; 729 } 730 731 /** 732 * Validation handler for Skinr settings import form. 733 */ 734 function skinr_ui_import_form_validate(&$form, &$form_state) { 735 if (empty($form_state['values']['skinr_settings'])) { 736 // Error. 737 form_error($form['skinr_settings'], t('These are not valid Skinr settings.')); 738 return; 739 } 740 741 $skinrs = ''; 742 ob_start(); 743 eval($form_state['values']['skinr_settings']); 744 ob_end_clean(); 745 746 foreach ($skinrs as $module => $ignored) { 747 if (!is_array($skinrs[$module])) { 748 // Error. 749 form_error($form['skinr_settings'], t('These are not valid Skinr settings.')); 750 } 751 foreach ($skinrs[$module] as $sid => $ignored) { 752 if (!is_array($skinrs[$module][$sid])) { 753 // Error. 754 form_error($form['skinr_settings'], t('These are not valid Skinr settings.')); 755 } 756 757 // Cast skinr array to object so we can actually use it. 758 $skinrs[$module][$sid] = (object) $skinrs[$module][$sid]; 759 if (!skinr_validate($skinrs[$module][$sid])) { 760 // Error. 761 form_error($form['skinr_settings'], t('These are not valid Skinr settings.')); 762 } 763 } 764 } 765 766 if (!empty($form_state['values']['theme']) && preg_match('/[^a-zA-Z0-9_]/', $form_state['values']['theme'])) { 767 form_error($form['theme'], t('The theme name must be alphanumeric and can contain underscores only.')); 768 } 769 770 $form_state['skinrs'] = &$skinrs; 771 } 772 773 /** 774 * Submit handler for skinr settings import form. 775 */ 776 function skinr_ui_import_form_submit(&$form, &$form_state) { 777 foreach ($form_state['skinrs'] as $module => $skinrs) { 778 foreach ($skinrs as $sid => $skinr) { 779 if (!skinr_set($skinr)) { 780 drupal_set_message(t('Skinr settings for the theme %theme could not be saved!', array('%theme' => $form_state['values']['theme'])), 'error'); 781 } 782 } 783 } 784 785 drupal_set_message(t('Skinr settings for the theme %theme have been saved.', array('%theme' => $form_state['values']['theme']))); 786 drupal_goto('admin/build/skinr'); 787 } 788 789 /** 790 * Menu callback; displays the delete confirmation for a skinr page rule. 791 */ 792 function skinr_ui_delete_confirm(&$form_state, $theme, $module, $sid) { 793 $form['theme'] = array( 794 '#type' => 'value', 795 '#value' => isset($form_state['theme']) ? $form_state['theme'] : $theme, 796 ); 797 $form['module'] = array( 798 '#type' => 'value', 799 '#value' => isset($form_state['module']) ? $form_state['module'] : $module, 800 ); 801 $form['sid'] = array( 802 '#type' => 'value', 803 '#value' => isset($form_state['sid']) ? $form_state['sid'] : $sid, 804 ); 805 806 $themes = list_themes(); 807 808 return confirm_form($form, 809 t('Are you sure you want to delete these Skinr settings?'), 810 isset($_GET['destination']) ? $_GET['destination'] : 'admin/build/skinr', 811 t('This action cannot be undone.<br /> Theme: !theme<br />Module: !module<br />Skinr ID: !sid', array('!theme' => $themes[$theme]->info['name'], '!module' => $module, '!sid' => $sid)), 812 t('Delete'), 813 t('Cancel') 814 ); 815 } 816 817 function skinr_ui_delete_confirm_submit($form, &$form_state) { 818 if ($form_state['values']['confirm']) { 819 $skinr = new stdClass(); 820 $skinr->theme = $form_state['values']['theme']; 821 $skinr->module = $form_state['values']['module']; 822 $skinr->sid = $form_state['values']['sid']; 823 $skinr->skins = array(); 824 $skinr->settings = array(); 825 826 skinr_set($skinr); 827 } 828 829 $form_state['redirect'] = 'admin/build/skinr'; 830 } 831 832 /** 833 * Theme function for Skinr UI's list form. 834 * 835 * @param $form 836 * An associative array containing the structure of the form. 837 * @ingroup themeable 838 */ 839 function theme_skinr_ui_admin_skins($form) { 840 $output = ''; 841 $has_skins = isset($form['rows']['#value']) && is_array($form['rows']['#value']); 842 $select_header = $has_skins ? theme('table_select_header_cell') : ''; 843 $headers = array( 844 $select_header, 845 array('data' => t('Theme'), 'field' => 'theme'), 846 array('data' => t('Type'), 'field' => 'type'), 847 array('data' => t('Skinr ID'), 'field' => 'sid'), 848 t('Operations'), 849 ); 850 851 $output .= drupal_render($form['options']); 852 if ($has_skins) { 853 $ts = tablesort_init($headers); 854 $sort = SORT_DESC; 855 if ($ts['sort'] == 'asc') { 856 $sort = SORT_ASC; 857 } 858 859 switch ($ts['sql']) { 860 case 'type': 861 $sortby = 2; 862 break; 863 864 case 'sid': 865 $sortby = 3; 866 break; 867 868 case 'theme': 869 default: 870 $sortby = 1; 871 break; 872 } 873 874 $rows = array(); 875 $sorts = array(); 876 foreach ($form['rows']['#value'] as $key => $value) { 877 $row = array(); 878 $row[] = drupal_render($form['skinr_settings'][$key]); 879 $row[] = $value['theme']; 880 $row[] = $value['type']; 881 $row[] = $value['sid']; 882 $row[] = $value['operations']; 883 $rows[$key] = $row; 884 $sorts[] = strip_tags($rows[$key][$sortby]); 885 } 886 887 // Sort table. 888 array_multisort($sorts, $sort, $rows); 889 } 890 else { 891 $rows[] = array(array('data' => t('No skinr settings available.'), 'colspan' => '5')); 892 } 893 894 // Output table. 895 $output .= theme('table', $headers, $rows); 896 897 $output .= drupal_render($form); 898 899 return $output; 900 } 901 902 /** 903 * Theme function for Skinr UI's skinsets form. 904 * 905 * @param $form 906 * An associative array containing the structure of the form. 907 * @ingroup themeable 908 */ 909 function theme_skinr_ui_skinsets_form($form) { 910 // Individual table headers. 911 $header = array(t('Screenshot'), t('Name'), t('Version'), t('Enabled'), t('Operations')); 912 913 // Pull package information from skinsets list and start grouping skinsets. 914 $skinsets = $form['skinsets']['#value']; 915 $packages = array(); 916 foreach ($skinsets as $skinset) { 917 if (!isset($skinset->info['package']) || !$skinset->info['package']) { 918 $skinset->info['package'] = t('Other'); 919 } 920 $packages[$skinset->info['package']][$skinset->name] = $skinset->info; 921 } 922 ksort($packages); 923 924 // Display packages. 925 $output = ''; 926 foreach ($packages as $package => $skinsets) { 927 $rows = array(); 928 foreach ($skinsets as $key => $skinset) { 929 // Only look for skinsets. 930 if (!isset($form[$key]['info'])) { 931 continue; 932 } 933 934 // Fetch info. 935 $info = $form[$key]['info']['#value']; 936 // Localize skinset description. 937 $description = t($info['description']); 938 939 // Make sure it is compatible and render the checkbox if so. 940 if (isset($form['status']['#incompatible_skinsets_core'][$key])) { 941 unset($form['status'][$key]); 942 $status = theme('image', 'misc/watchdog-error.png', t('incompatible'), t('Incompatible with this version of Drupal core')); 943 $description .= '<div class="incompatible">'. t('This version is incompatible with the !core_version version of Drupal core.', array('!core_version' => VERSION)) .'</div>'; 944 } 945 elseif (isset($form['status']['#incompatible_skinsets_php'][$key])) { 946 unset($form['status'][$key]); 947 $status = theme('image', 'misc/watchdog-error.png', t('incompatible'), t('Incompatible with this version of PHP')); 948 $php_required = $form['status']['#incompatible_themes_php'][$key]; 949 if (substr_count($php_required, '.') < 2) { 950 $php_required .= '.*'; 951 } 952 $description .= '<div class="incompatible">'. t('This skinset requires PHP version @php_required and is incompatible with PHP version !php_version.', array('@php_required' => $php_required, '!php_version' => phpversion())) .'</div>'; 953 } 954 else { 955 $status = drupal_render($form['status'][$key]); 956 } 957 958 // Style theme info 959 $content = '<div class="skinset-info"><h2>'. $info['name'] .'</h2><div class="description">'. $description .'</div></div>'; 960 961 // Build rows 962 $row = array(); 963 $row[] = drupal_render($form[$key]['screenshot']); 964 $row[] = $content; 965 $row[] = isset($info['version']) ? $info['version'] : ''; 966 $row[] = array('data' => $status, 'align' => 'center'); 967 $row[] = array('data' => drupal_render($form[$key]['operations']), 'align' => 'center'); 968 $rows[] = $row; 969 } 970 971 $fieldset = array( 972 '#title' => t($package), 973 '#collapsible' => TRUE, 974 '#collapsed' => FALSE, 975 '#value' => theme('table', $header, $rows, array('class' => 'package')), 976 ); 977 $output .= theme('fieldset', $fieldset); 978 } 979 980 $output .= drupal_render($form); 981 return $output; 982 } 983 984 /** 985 * Theme function for Skinr UI's skinsets form. 986 * 987 * @param $form 988 * An associative array containing the structure of the form. 989 * @ingroup themeable 990 */ 991 function theme_skinr_ui_skinsets_settings_form($form) { 992 // Individual table headers. 993 $header = array(t('Enabled'), t('Name'), t('Operations')); 994 995 // Display skins. 996 $output = ''; 997 998 // Get current theme, but make sure it's not the admin theme when we're editing with AJAX. 999 $current_theme = skinr_current_theme(TRUE); 1000 1001 $themes = list_themes(); 1002 ksort($themes); 1003 1004 foreach ($themes as $theme) { 1005 if (!$theme->status) { 1006 continue; 1007 } 1008 1009 $rows = array(); 1010 foreach ($form as $key => $skin) { 1011 // Only look for skins. 1012 if (!is_array($form[$key]) || !isset($form[$key]['info'])) { 1013 continue; 1014 } 1015 1016 // Fetch info. 1017 $info = $form[$key]['info']['#value']; 1018 // Localize skinset title and description. 1019 $title = t($info['title']); 1020 $description = t($info['description']); 1021 1022 // The hooks this skin is working with. 1023 $features = array(); 1024 foreach ($info['features'] as $feature) { 1025 $features[] = $feature == '*' ? t('all hooks') : $feature; 1026 } 1027 $features = t('Used by: !features', array('!features' => implode(', ', $features))); 1028 1029 $status = drupal_render($form[$key]['status'][$theme->name]); 1030 1031 // Style theme info 1032 $content = '<div class="skin-info"><h2>'. $title .'</h2><div class="description">'. $description .'</div><div class="features">'. $features .'</div></div>'; 1033 1034 // Build rows 1035 $row = array(); 1036 $row[] = array('data' => $status, 'align' => 'center'); 1037 $row[] = $content; 1038 $row[] = array('data' => drupal_render($form[$key]['operations']), 'align' => 'center'); 1039 $rows[] = $row; 1040 } 1041 1042 $fieldset = array( 1043 '#title' => t($theme->info['name']), 1044 '#collapsible' => TRUE, 1045 '#collapsed' => $theme->name == $current_theme ? FALSE : TRUE, 1046 '#value' => theme('table', $header, $rows, array('class' => 'theme')), 1047 ); 1048 $output .= theme('fieldset', $fieldset); 1049 } 1050 1051 $output .= drupal_render($form); 1052 return $output; 1053 } 1054 1055 function skinr_ui_settings_multiple_delete_confirm(&$form_state, $skinr_settings) { 1056 $themes = list_themes(); 1057 1058 $form['skinr_settings'] = array( 1059 '#prefix' => '<ul>', 1060 '#suffix' => '</ul>', 1061 '#tree' => TRUE, 1062 ); 1063 // array_filter returns only elements with TRUE values 1064 foreach ($skinr_settings as $skinr_setting => $value) { 1065 $parts = explode('__', $skinr_setting, 3); 1066 $form['skinr_settings'][$skinr_setting] = array( 1067 '#type' => 'hidden', 1068 '#value' => $skinr_setting, 1069 '#prefix' => '<li>', 1070 '#suffix' => t('Skinr ID %sid of type %type for theme %theme', array('%sid' => $parts[2], '%type' => $parts[1], '%theme' => $themes[$parts[0]]->info['name'])) ."</li>\n", 1071 ); 1072 } 1073 $form['operation'] = array('#type' => 'hidden', '#value' => 'delete'); 1074 $form['#submit'][] = 'skinr_ui_settings_multiple_delete_confirm_submit'; 1075 return confirm_form($form, 1076 t('Are you sure you want to delete these items?'), 1077 'admin/build/skinr', t('This action cannot be undone.'), 1078 t('Delete all'), t('Cancel')); 1079 } 1080 1081 function skinr_ui_settings_multiple_delete_confirm_submit($form, &$form_state) { 1082 if ($form_state['values']['confirm']) { 1083 foreach ($form_state['values']['skinr_settings'] as $skinr_setting => $value) { 1084 $parts = explode('__', $skinr_setting, 3); 1085 1086 $skinr = new StdClass(); 1087 $skinr->theme = $parts[0]; 1088 $skinr->module = $parts[1]; 1089 $skinr->sid = $parts[2]; 1090 $skinr->skins = array(); 1091 1092 skinr_set($skinr); 1093 } 1094 drupal_set_message(t('The items have been deleted.')); 1095 } 1096 $form_state['redirect'] = 'admin/build/skinr'; 1097 return; 1098 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |