Issue #2415645 by geertvd, alexpott: Shortcuts not sorted on display
							parent
							
								
									4691ba9ea4
								
							
						
					
					
						commit
						151e3391c9
					
				| 
						 | 
				
			
			@ -251,10 +251,8 @@ function shortcut_renderable_links($shortcut_set = NULL) {
 | 
			
		|||
    $shortcut_set = shortcut_current_displayed_set();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** @var \Drupal\shortcut\ShortcutInterface[] $shortcuts  */
 | 
			
		||||
  $shortcuts = \Drupal::entityManager()->getStorage('shortcut')->loadByProperties(array('shortcut_set' => $shortcut_set->id()));
 | 
			
		||||
  $cache_tags = array();
 | 
			
		||||
  foreach ($shortcuts as $shortcut) {
 | 
			
		||||
  foreach ($shortcut_set->getShortcuts() as $shortcut) {
 | 
			
		||||
    $shortcut = \Drupal::entityManager()->getTranslationFromContext($shortcut);
 | 
			
		||||
    $links[$shortcut->id()] = array(
 | 
			
		||||
      'type' => 'link',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -181,4 +181,26 @@ class Shortcut extends ContentEntityBase implements ShortcutInterface {
 | 
			
		|||
    return $this->shortcut_set->entity->getCacheTags();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Sort shortcut objects.
 | 
			
		||||
   *
 | 
			
		||||
   * Callback for uasort().
 | 
			
		||||
   *
 | 
			
		||||
   * @param \Drupal\shortcut\ShortcutInterface $a
 | 
			
		||||
   *   First item for comparison.
 | 
			
		||||
   * @param \Drupal\shortcut\ShortcutInterface $b
 | 
			
		||||
   *   Second item for comparison.
 | 
			
		||||
   *
 | 
			
		||||
   * @return int
 | 
			
		||||
   *   The comparison result for uasort().
 | 
			
		||||
   */
 | 
			
		||||
  public static function sort(ShortcutInterface $a, ShortcutInterface $b) {
 | 
			
		||||
    $a_weight = $a->getWeight();
 | 
			
		||||
    $b_weight = $b->getWeight();
 | 
			
		||||
    if ($a_weight == $b_weight) {
 | 
			
		||||
      return strnatcasecmp($a->getTitle(), $b->getTitle());
 | 
			
		||||
    }
 | 
			
		||||
    return ($a_weight < $b_weight) ? -1 : 1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -117,7 +117,9 @@ class ShortcutSet extends ConfigEntityBase implements ShortcutSetInterface {
 | 
			
		|||
   * {@inheritdoc}
 | 
			
		||||
   */
 | 
			
		||||
  public function getShortcuts() {
 | 
			
		||||
    return \Drupal::entityManager()->getStorage('shortcut')->loadByProperties(array('shortcut_set' => $this->id()));
 | 
			
		||||
    $shortcuts = \Drupal::entityManager()->getStorage('shortcut')->loadByProperties(array('shortcut_set' => $this->id()));
 | 
			
		||||
    uasort($shortcuts, array('\Drupal\shortcut\Entity\Shortcut', 'sort'));
 | 
			
		||||
    return $shortcuts;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,8 +79,6 @@ class SetCustomize extends EntityForm {
 | 
			
		|||
        '#links' => $links,
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    // Sort the list so the output is ordered by weight.
 | 
			
		||||
    uasort($form['shortcuts']['links'], array('\Drupal\Component\Utility\SortArray', 'sortByWeightProperty'));
 | 
			
		||||
    return $form;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,7 @@ interface ShortcutSetInterface extends ConfigEntityInterface {
 | 
			
		|||
  public function resetLinkWeights();
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Returns all the shortcuts from a shortcut set.
 | 
			
		||||
   * Returns all the shortcuts from a shortcut set sorted correctly.
 | 
			
		||||
   *
 | 
			
		||||
   * @return \Drupal\shortcut\ShortcutInterface[]
 | 
			
		||||
   *   An array of shortcut entities.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -260,6 +260,24 @@ class ShortcutLinksTest extends ShortcutTestBase {
 | 
			
		|||
    $this->verifyAccessShortcutsPermissionForEditPages();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Tests the shortcuts are correctly ordered by weight in the toolbar.
 | 
			
		||||
   */
 | 
			
		||||
  public function testShortcutLinkOrder() {
 | 
			
		||||
    $this->drupalLogin($this->drupalCreateUser(array('access toolbar', 'access shortcuts')));
 | 
			
		||||
    $this->drupalGet(Url::fromRoute('<front>'));
 | 
			
		||||
    $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .menu a');
 | 
			
		||||
    $this->assertEqual((string) $shortcuts[0], 'Add content');
 | 
			
		||||
    $this->assertEqual((string) $shortcuts[1], 'All content');
 | 
			
		||||
    foreach($this->set->getShortcuts() as $shortcut) {
 | 
			
		||||
      $shortcut->setWeight($shortcut->getWeight() * -1)->save();
 | 
			
		||||
    }
 | 
			
		||||
    $this->drupalGet(Url::fromRoute('<front>'));
 | 
			
		||||
    $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .menu a');
 | 
			
		||||
    $this->assertEqual((string) $shortcuts[0], 'All content');
 | 
			
		||||
    $this->assertEqual((string) $shortcuts[1], 'Add content');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Tests that the 'access shortcuts' permission is required for shortcut set
 | 
			
		||||
   * administration page access.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,9 +79,10 @@ class ShortcutSetsTest extends ShortcutTestBase {
 | 
			
		|||
    $this->drupalPostForm(NULL, $edit, t('Save changes'));
 | 
			
		||||
    $this->assertRaw(t('The shortcut set has been updated.'));
 | 
			
		||||
 | 
			
		||||
    // Check to ensure that the shortcut weights have changed.
 | 
			
		||||
    $weights = $this->getShortcutInformation($set, 'weight');
 | 
			
		||||
    $this->assertEqual($weights, array(2, 1));
 | 
			
		||||
    \Drupal::entityManager()->getStorage('shortcut')->resetCache();
 | 
			
		||||
    // Check to ensure that the shortcut weights have changed and that
 | 
			
		||||
    // ShortcutSet::.getShortcuts() returns shortcuts in the new order.
 | 
			
		||||
    $this->assertIdentical(array_reverse(array_keys($shortcuts)), array_keys($set->getShortcuts()));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue