diff --git a/plugins/content_types/service_links.inc b/plugins/content_types/service_links.inc new file mode 100644 index 0000000..ab1c8ff --- /dev/null +++ b/plugins/content_types/service_links.inc @@ -0,0 +1,195 @@ + TRUE, + 'icon' => 'icon_node_form.png', + 'title' => t('Service links Panel'), + 'description' => t('Provides services links'), + 'category' => t('Miscellaneous'), + 'edit form' => 'service_links_service_links_content_type_edit_form', + 'render callback' => 'service_links_service_links_content_type_render' +); + +/** + * Output function for the 'service_links' content type. + */ +function service_links_service_links_content_type_render($subtype, $conf, $panel_args, &$context) { + + $content = NULL; + + $node = menu_get_object('node'); + + $style = $conf['service_links_block_style']; + $panel_services = array(); + $settings = _service_links_load_settings(); + $services = service_links_get_links($settings['link_show']); + + foreach ($services as $service_id => $service) { + + if (isset($conf[$service_id]) && $conf[$service_id] ) + $panel_services[$service_id] = $service; + } + + if (isset($node)) { + switch ($conf['service_links_style']) { + case 'service_links': + $content = theme('service_links_block_format', array( + 'items' => panel_service_links_render($node, FALSE, $style, $panel_services), + 'style' => $style) + ); + break; + case 'service_links_fisheye': + $content = theme('service_links_fisheye_format', array( + 'items' => panel_service_links_render($node, FALSE, SERVICE_LINKS_STYLE_FISHEYE, $panel_services)) + ); + break; + } + } + elseif (!isset($node)) { + switch ($conf['service_links_style']) { + case 'service_links': + $options = array( + 'style' => $style, + 'link_to_front' => variable_get('service_links_block_not_node_front', FALSE), + ); + $content = theme('service_links_block_format', array( + 'items' => panel_service_links_render(NULL, FALSE, $options, $panel_services), + 'style' => $style, + )); + break; + case 'service_links_fisheye': + $content = theme('service_links_fisheye_format', array( + 'items' => panel_service_links_render(NULL, FALSE, SERVICE_LINKS_STYLE_FISHEYE, $panel_services)) + ); + break; + } + } + + + // Build the content type block. + $block = new stdClass(); + $block->content = $content; + + return $block; +} + +function panel_service_links_render($node, $nodelink = FALSE, $options = NULL, $services = array()) { + $links = array('weight' => array(), 'link' => array()); + $settings = _service_links_load_settings(); + + if (empty($settings['link_show'])) { + return array(); + } + + if (isset($options)) { + if (!is_array($options)) { + $options = array('style' => $options); + } + $settings = array_merge($settings, $options); + } + + _service_links_get_tags($node, $settings); + + + foreach ($services as $service_id => $service) { + // Load the position. + $links['weight'][] = isset($settings['link_weight'][$service_id]) ? $settings['link_weight'][$service_id] : 0; + + // Render the Service. + $links['link'] += _service_links_render($service_id, $service, $settings, $nodelink, $node); + } + + if (!empty($links['link'])) { + array_multisort($links['weight'], $links['link']); + } + + return !empty($links['link']) ? $links['link'] : array(); +} + +/** + * The form to add or edit a service_links as content. + */ +function service_links_service_links_content_type_edit_form($form, &$form_state) { + ctools_include('plugins'); + $conf = $form_state['conf']; + + $form['service_links_style'] = array( + '#type' => 'select', + '#title' => t('Service link icon style'), + '#options' => array( + 'service_links' => t('Normal service links display'), + 'service_links_fisheye' => t('Service links with FishEye effect'), + ), + '#default_value' => isset($conf['service_links_style']) ? $conf['service_links_style'] : TRUE, + ); + + $form['service_links_block_style'] = array( + '#type' => 'select', + '#title' => t('Service link display'), + '#options' => array( + 1 => t('Only text'), + 2 => t('Only icon'), + 3 => t('Icon and text'), + ), + '#default_value' => isset($conf['service_links_block_style']) ? $conf['service_links_block_style'] : TRUE, + '#states' => array( + 'invisible' => array( + ':input[name="service_links_style"]' => array( + 'value' => 'service_links_fisheye' + ) + ) + ), + ); + + + $settings = _service_links_load_settings(); + $services = service_links_get_links($settings['link_show']); + + $form['panel_service_links'] = array('#theme' => 'service_links_drag_table'); + $form['panel_service_links']['panel_service_links_show'] = array('#tree' => TRUE); + $form['panel_service_links']['panel_service_links_weight'] = array('#tree' => TRUE); + + foreach ($services as $service_id => $service) { + $icon = array( + 'path' => isset($service['icon']) ? service_links_expand_path($service['icon'], 'preset') : service_links_expand_path("$service_id.png", +'preset'), + ); + + $form[$service_id] = array( + '#service' => ucwords(str_replace('_', ' ', $service['module'])), + '#type' => 'checkbox', + '#title' => theme('image', $icon) . " " . t('Show %name link', array('%name' => $service['name'])), + '#return_value' => 1, + '#default_value' => isset($conf[$service_id]) ? $conf[$service_id] : 0, + ); + } + + if (empty($services)) { + drupal_set_message(t('You need to load at least one of XXX Services module, please enable them in admin > modules page', +array('@url' => url('admin/modules'))), 'warning'); + } + + return $form; +} + +/** + * Store the service_links selection. + */ +function service_links_service_links_content_type_edit_form_submit($form, &$form_state) { + $form_state['conf']['service_links_style'] = $form_state['values']['service_links_style']; + $form_state['conf']['service_links_block_style'] = $form_state['values']['service_links_block_style']; + $settings = _service_links_load_settings(); + $services = service_links_get_links($settings['link_show']); + + foreach ($services as $service_id => $service) { + if (isset($form_state['values'][$service_id])) + $form_state['conf'][$service_id] = $form_state['values'][$service_id]; + } +} diff --git a/service_links.module b/service_links.module index fd71d25..cb43c98 100644 --- a/service_links.module +++ b/service_links.module @@ -891,6 +891,18 @@ function service_links_show($node) { } /** + * Implementation of hook_ctools_plugin_directory() to let the system know + * we implement task and task_handler plugins. + */ +function service_links_ctools_plugin_directory($module, $plugin) { + // Safety: go away if CTools is not at an appropriate version. + if (!module_invoke('ctools', 'api_version', PANELS_REQUIRED_CTOOLS_API)) { + return; + } + return 'plugins/' . $plugin; +} + +/** * Match the current path with the list or the code * inserted in the configuration page. */