array( 'title' => t('Administer accordion blocks'), 'description' => t('Administer accordion blocks configurations.'), ), ); } /* * Implements hook_init() */ function accordion_blocks_init() { // including accordion related javascript and css files drupal_add_library('system', 'ui.accordion'); drupal_add_js(drupal_get_path('module', 'accordion_blocks') .'/accordion_init.js'); drupal_add_css(drupal_get_path('module', 'accordion_blocks') .'/accordion_init.css'); } /** * Implements hook_menu() */ function accordion_blocks_menu() { //settings page $items['admin/structure/accordion_block'] = array( 'title' => 'Accordion Blocks', 'description' => 'Create blocks of accordion content.', 'page callback' => 'accordion_block_list', 'access arguments' => array('administer accordion blocks configuration'), 'type' => MENU_NORMAL_ITEM, 'file' => 'accordion_blocks.admin.inc', 'weight' => -10, ); $items['admin/structure/accordion_block/list'] = array( 'title' => 'List Accordion Blocks', 'type' => MENU_DEFAULT_LOCAL_TASK, ); $items['admin/structure/accordion_block/add'] = array( 'title' => 'Add Accordion Block', 'description' => 'Configuring the Accordion Block Settings.', 'page callback' => 'drupal_get_form', 'page arguments' => array('accordion_block_config_settings', 'add'), 'access arguments' => array('administer accordion block configuration'), 'type' => MENU_LOCAL_ACTION, 'weight' => 1, ); $items['admin/structure/accordion_block/manage/%accordion_block'] = array( 'title' => 'Edit Accordion Block', 'page callback' => 'drupal_get_form', 'page arguments' => array('accordion_block_config_settings', 'edit', 4), 'access arguments' => array('administer accordion block configuration'), ); $items['admin/structure/accordion_block/manage/%accordion_block/edit'] = array( 'title' => 'Edit Accordion Block', 'type' => MENU_DEFAULT_LOCAL_TASK, ); $items['admin/structure/accordion_block/manage/%accordion_block/delete'] = array( 'title' => 'Delete accordion block', 'page callback' => 'drupal_get_form', 'page arguments' => array('accordion_block_delete', 4), 'access arguments' => array('administer accordion block configuration'), 'type' => MENU_LOCAL_TASK, 'file' => 'accordion_blocks.admin.inc', ); return $items; } /** * Load the accordion block data. * * @param integer $id * Integer id of the accordion block. * * @returns * array of the block content, * skin and title of the accordion block. */ function accordion_block_load($id) { $content = array(); $query = db_select('accordion_blocks', 'sd') ->fields('sd', array('title', 'content')) ->condition('sd.id', $id, '='); $accordion_block = $query->execute()->fetchAssoc(); if (!$accordion_block) { return FALSE; } $accordion_block['id'] = $id; return $accordion_block; } /** * Implements hook_block_info(). */ function accordion_blocks_block_info() { $blocks = array(); $query = db_select("accordion_blocks", 'sd') ->fields('sd', array('id', 'title')) ->execute(); foreach ($query as $accordion_block) { $blocks[$accordion_block->title . "_" . $accordion_block->id] = array('info' => t($accordion_block->title)); } return $blocks; } /** * Implements hook_block_view(). */ function accordion_blocks_block_view($delta = '') { $block = array(); $block_title_info = explode('_', $delta); $id = array_pop($block_title_info); $title = implode("_", $block_title_info); $scripts = array(); $style = array(); $accordion_block_data = accordion_block_load($id); // Building the content for the accordion block. $content = accordion_block_content($delta, $id); $block['subject'] = t($title); $block['content']['#markup'] = theme("accordion_block", $content); return $block; } /** * accordion block data * * @returns * the block content for the accordion block. */ function accordion_block_content($delta, $id) { $accordion_data = accordion_block_load($id); if ($delta == $accordion_data['title'] . "_" . $accordion_data['id']) { $data = unserialize($accordion_data['content']); $blocks_content = array(); if (isset($data)) { foreach ($data as $key => $block) { if (!empty($block)) { $blocks_info = explode('_delta_', $block); $block_data = block_load($blocks_info[0], $blocks_info[1]); $blocks_content[$key] = new stdClass(); $block_content = module_invoke($blocks_info[0], "block_view", $blocks_info[1]); if (isset($block_content['content'])) { $blocks_content[$key]->content = $block_content['content']; } else { $blocks_content[$key]->content = NULL; } if ($block_data->title) { $blocks_content[$key]->title = $block_data->title; } elseif (isset($block_content['subject'])) { $blocks_content[$key]->title = $block_content['subject']; } else { $blocks_content[$key]->title = ''; } } } } $accordion_block_content = array('content' => $blocks_content); return $accordion_block_content; } } /** * Implements hook_theme(). */ function accordion_blocks_theme() { return array( 'accordion_block' => array( 'variables' => array('content' => NULL,), 'template' => 'accordion_block', ), ); } /** * Implements menu callback for the * admin settings form for accordion_block */ function accordion_block_config_settings($form, &$form_state, $formtype, $accordion_block = NULL) { $default_values = $accordion_block; $form = array(); if ($formtype == 'edit') { $form['id'] = array( '#type' => 'value', '#value' => isset($accordion_block['id']) ? $accordion_block['id'] : 0, ); } $form['accordion_block_title'] = array( '#type' => 'textfield', '#title' => t('Title'), '#default_value' => $default_values['title'], '#description' => t('Title of the accordion block.'), '#required' => TRUE, ); $data = unserialize($default_values['content']); $form['accordion_block_content'] = array( '#type' => 'fieldset', '#title' => t('Accordion Block Content'), '#prefix' => '