1<?php 2/** 3 * Elgg upgrade library. 4 * Contains code for handling versioning and upgrades. 5 */ 6 7use Elgg\Menu\MenuItems; 8 9/** 10 * Perform some clean up when upgrade completes 11 * @elgg_event complete upgrade 12 * @return void 13 */ 14function _elgg_upgrade_completed() { 15 $pending = _elgg_services()->upgrades->getPendingUpgrades(); 16 if (empty($pending)) { 17 elgg_delete_admin_notice('pending_upgrades'); 18 } 19} 20 21/** 22 * Add menu items to the entity menu of ElggUpgrade 23 * 24 * @param \Elgg\Hook $hook 'register', 'menu:entity' 25 * 26 * @return void|MenuItems 27 * @internal 28 */ 29function _elgg_upgrade_entity_menu(\Elgg\Hook $hook) { 30 31 $entity = $hook->getEntityParam(); 32 if (!$entity instanceof ElggUpgrade || !$entity->canEdit()) { 33 return; 34 } 35 36 $result = $hook->getValue(); 37 38 // deleting upgrades has no point, they'll be rediscovered again 39 // don't want to completely block the ability in ->canDelete(), just don't offer the link 40 $result->remove('delete'); 41 42 if (!$entity->isCompleted()) { 43 $result[] = ElggMenuItem::factory([ 44 'name' => 'run_upgrade', 45 'icon' => 'play', 46 'text' => elgg_echo('admin:upgrades:menu:run_single'), 47 'href' => false, 48 'deps' => [ 49 'core/js/upgrader', 50 ], 51 'data-guid' => $entity->guid, 52 ]); 53 } elseif ($batch = $entity->getBatch()) { 54 if (!$batch->shouldBeSkipped()) { 55 // only show reset if it will have an effect 56 $result[] = ElggMenuItem::factory([ 57 'name' => 'reset', 58 'icon' => 'sync', 59 'text' => elgg_echo('reset'), 60 'href' => elgg_generate_action_url('admin/upgrade/reset', [ 61 'guid' => $entity->guid, 62 ]), 63 ]); 64 } 65 } 66 67 return $result; 68} 69 70return function (\Elgg\EventsService $events, \Elgg\HooksRegistrationService $hooks) { 71 $events->registerHandler('complete', 'upgrade', '_elgg_upgrade_completed'); 72 73 $hooks->registerHandler('register', 'menu:entity', '_elgg_upgrade_entity_menu', 501); 74}; 75