public static function on_post_delete(Context $ctx) { $map = BaseRoute::load($ctx); foreach ((array) $ctx->post('delete') as $path) { if (array_key_exists($key = $path, $map)) { unset($map[$key]); } else { throw new PageNotFoundException(t('Путь <tt>%path</tt> не найден.', array('%path' => $path))); } } BaseRoute::save($map); return $ctx->getRedirect(self::listurl); }
private static function update(Context $ctx, $name, array $info) { $widgets = Widget::loadWidgets($ctx); if (isset($info['pages'])) { $pages = $info['pages']; unset($info['pages']); } else { $pages = null; } // Список виджетов без текущего. $reduced = array_diff(array_keys($widgets), array($name)); // Удаляем лишнее из списка маршрутов. $routes = self::remove_dead_widgets(BaseRoute::load($ctx), $reduced); // Цепляем текущий виджет к выбранным страницам. if (null !== $pages) { foreach ($pages as $page) { if (!array_key_exists($route = $page, $routes)) { throw new PageNotFoundException(t('Страница %page перестала существовать.', array('%page' => $page))); } $pwlist = isset($routes[$route]['widgets']) ? (array) $routes[$route]['widgets'] : array(); $pwlist[] = $name; sort($pwlist); $routes[$route]['widgets'] = array_unique($pwlist); } } $widgets[$name] = $info; Widget::save($widgets); BaseRoute::save($routes); }