danielebarchiesi@0: t('String: URL path'), danielebarchiesi@0: 'description' => t('Control access by the current path.'), danielebarchiesi@0: 'callback' => 'ctools_path_visibility_ctools_access_check', danielebarchiesi@0: 'settings form' => 'ctools_path_visibility_ctools_access_settings', danielebarchiesi@0: 'summary' => 'ctools_path_visibility_ctools_access_summary', danielebarchiesi@0: 'required context' => new ctools_context_optional(t('Path'), 'string'), danielebarchiesi@0: 'default' => array('visibility_setting' => 1, 'paths' => ''), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Settings form danielebarchiesi@0: */ danielebarchiesi@0: function ctools_path_visibility_ctools_access_settings($form, &$form_state, $conf) { danielebarchiesi@0: $form['settings']['note'] = array( danielebarchiesi@0: '#value' => '
' . t('Note: if no context is chosen, the current page path will be used.') . '
', danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $form['settings']['visibility_setting'] = array( danielebarchiesi@0: '#type' => 'radios', danielebarchiesi@0: '#options' => array( danielebarchiesi@0: 1 => t('Allow access on the following pages'), danielebarchiesi@0: 0 => t('Allow access on all pages except the following pages'), danielebarchiesi@0: ), danielebarchiesi@0: '#default_value' => $conf['visibility_setting'], danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $form['settings']['paths'] = array( danielebarchiesi@0: '#type' => 'textarea', danielebarchiesi@0: '#title' => t('Paths'), danielebarchiesi@0: '#default_value' => $conf['paths'], danielebarchiesi@0: '#description' => t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => 'blog', '%blog-wildcard' => 'blog/*', '%front' => '')), danielebarchiesi@0: ); danielebarchiesi@0: return $form; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Check for access. danielebarchiesi@0: */ danielebarchiesi@0: function ctools_path_visibility_ctools_access_check($conf, $context) { danielebarchiesi@0: if (isset($context->data)) { danielebarchiesi@0: $base_path = $context->data; danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: $base_path = $_GET['q']; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $path = drupal_get_path_alias($base_path); danielebarchiesi@0: $page_match = drupal_match_path($path, $conf['paths']); danielebarchiesi@0: danielebarchiesi@0: // If there's a path alias, we may still be at the un-aliased path danielebarchiesi@0: // so check that as well. danielebarchiesi@0: if (!isset($context->data) && $path != $base_path) { danielebarchiesi@0: $page_match = $page_match || drupal_match_path($base_path, $conf['paths']); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: // When $conf['visibility_setting'] has a value of 0, the block is displayed danielebarchiesi@0: // on all pages except those listed in $block->pages. When set to 1, it danielebarchiesi@0: // is displayed only on those pages listed in $block->pages. danielebarchiesi@0: $page_match = !($conf['visibility_setting'] xor $page_match); danielebarchiesi@0: danielebarchiesi@0: return $page_match; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Provide a summary description. danielebarchiesi@0: */ danielebarchiesi@0: function ctools_path_visibility_ctools_access_summary($conf, $context) { danielebarchiesi@0: $paths = array(); danielebarchiesi@0: foreach (explode("\n", $conf['paths']) as $path) { danielebarchiesi@0: $paths[] = check_plain($path); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $identifier = $context->type == 'any' ? t('Current path') : $context->identifier; danielebarchiesi@0: if ($conf['visibility_setting']) { danielebarchiesi@0: return format_plural(count($paths), '@identifier is "@paths"', '@identifier type is one of "@paths"', array('@paths' => implode(', ', $paths), '@identifier' => $identifier)); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: return format_plural(count($paths), '@identifier is not "@paths"', '@identifier type is not one of "@paths"', array('@paths' => implode(', ', $paths), '@identifier' => $identifier)); danielebarchiesi@0: } danielebarchiesi@0: }