Issue #790770 by swentel, jhodgdon, David_Rothstein, naxoc: Fixed 'Add to shortcuts...
authorwebchick
Fri, 30 Sep 2011 19:59:38 +0000 (12:59 -0700)
committerwebchick
Fri, 30 Sep 2011 19:59:38 +0000 (12:59 -0700)
modules/shortcut/shortcut.module
modules/shortcut/shortcut.test

index 8642d9d..f8ddcc2 100644 (file)
@@ -643,7 +643,11 @@ function shortcut_renderable_links($shortcut_set = NULL) {
  * Implements hook_preprocess_page().
  */
 function shortcut_preprocess_page(&$variables) {
-  if (shortcut_set_edit_access()) {
+  // Only display the shortcut link if the user has the ability to edit
+  // shortcuts and if the page's actual content is being shown (for example,
+  // we do not want to display it on "access denied" or "page not found"
+  // pages).
+  if (shortcut_set_edit_access() && ($item = menu_get_item()) && $item['access']) {
     $link = $_GET['q'];
     $query_parameters = drupal_get_query_parameters();
     if (!empty($query_parameters)) {
index 75a5a67..322c63f 100644 (file)
@@ -197,6 +197,29 @@ class ShortcutLinksTestCase extends ShortcutTestCase {
     $mlids = $this->getShortcutInformation($saved_set, 'mlid');
     $this->assertFalse(in_array($set->links[0]['mlid'], $mlids), 'Successfully deleted a shortcut.');
   }
+
+  /**
+   * Tests that the add shortcut link is not displayed for 404/403 errors.
+   *
+   * Tests that the "Add to shortcuts" link is not displayed on a page not
+   * found or a page the user does not have access to.
+   */
+  function testNoShortcutLink() {
+    // Change to a theme that displays shortcuts.
+    variable_set('theme_default', 'seven');
+
+    $this->drupalGet('page-that-does-not-exist');
+    $this->assertNoRaw('add-shortcut', t('Add to shortcuts link was not shown on a page not found.'));
+
+    // The user does not have access to this path.
+    $this->drupalGet('admin/modules');
+    $this->assertNoRaw('add-shortcut', t('Add to shortcuts link was not shown on a page the user does not have access to.'));
+
+    // Verify that the testing mechanism works by verifying the shortcut
+    // link appears on admin/content/node.
+    $this->drupalGet('admin/content/node');
+    $this->assertRaw('add-shortcut', t('Add to shortcuts link was shown on a page the user does have access to.'));
+  }
 }
 
 /**