Ansel::getUrlFor PHP Method

getUrlFor() public static method

Return a properly formatted link depending on the global pretty url configuration
public static getUrlFor ( string $controller, array $data, boolean $full = false, integer $append_session ) : Horde_Url
$controller string The controller to generate a URL for.
$data array The data needed to generate the URL.
$full boolean Generate a full URL.
$append_session integer 0 = only if needed, 1 = always, -1 = never.
return Horde_Url The generated URL
    public static function getUrlFor($controller, $data, $full = false, $append_session = 0)
    {
        global $prefs;
        $rewrite = isset($GLOBALS['conf']['urls']['pretty']) && $GLOBALS['conf']['urls']['pretty'] == 'rewrite';
        switch ($controller) {
            case 'view':
                if ($rewrite && empty($data['special'])) {
                    $url = '';
                    // Viewing a List
                    if ($data['view'] == 'List') {
                        $groupby = isset($data['groupby']) ? $data['groupby'] : $prefs->getValue('groupby');
                        if ($groupby == 'owner' && !empty($data['owner'])) {
                            $url = 'user/' . urlencode($data['owner']) . '/';
                        } elseif ($groupby == 'owner') {
                            $url = 'user/';
                        } elseif ($groupby == 'none') {
                            $url = 'all/';
                        }
                        $url = Horde::url($url, $full, $append_session);
                        //  don't append the page number if it's zero
                        if (!empty($data['page'])) {
                            $url->add('page', $data['page']);
                        }
                        return $url;
                    }
                    // Viewing a Gallery or Image
                    if ($data['view'] == 'Gallery' || $data['view'] == 'Image') {
                        // @TODO: This is needed to correctly generate URLs in
                        // places that are not specifically requested by the user,
                        // for instance, in a gallery block. Otherwise, the proper
                        // date variables would not be attached to the url, since we
                        // don't know them ahead of time.  This is a slight hack and
                        // needs to be corrected, probably by delegating at least
                        // some of the URL generation to the gallery/image/view
                        // object...most likely when we move to PHP5.
                        if (empty($data['year']) && $data['view'] == 'Image') {
                            // Getting these objects is not ideal, but at this point
                            // they should already be locally cached so the cost
                            // is minimized.
                            $i = $GLOBALS['injector']->getInstance('Ansel_Storage')->getImage($data['image']);
                            $g = $GLOBALS['injector']->getInstance('Ansel_Storage')->getGallery($data['gallery']);
                            if ($g->get('view_mode') == 'Date') {
                                $imgDate = new Horde_Date($i->originalDate);
                                $data['year'] = $imgDate->year;
                                $data['month'] = $imgDate->month;
                                $data['day'] = $imgDate->mday;
                            }
                        }
                        $url = 'gallery/' . (!empty($data['slug']) ? $data['slug'] : 'id/' . (int) $data['gallery']) . '/';
                        // See comments below about lightbox
                        if ($data['view'] == 'Image' && (empty($data['gallery_view']) || !empty($data['gallery_view']) && $data['gallery_view'] != 'GalleryLightbox')) {
                            $url .= (int) $data['image'] . '/';
                        }
                        $extras = array();
                        // We may have a value of zero here, but it's the default,
                        // so ignore it if it's empty.
                        if (!empty($data['havesearch'])) {
                            $extras['havesearch'] = $data['havesearch'];
                        }
                        // Block any auto navigation (for date views)
                        if (!empty($data['force_grouping'])) {
                            $extras['force_grouping'] = $data['force_grouping'];
                        }
                        $url = new Horde_Url($url);
                        if (count($extras)) {
                            $url->add($extras);
                        }
                        //Slight hack until we delegate at least some of the url
                        // generation to the gallery/image/view object.
                        if ($data['view'] == 'Image' && !empty($data['gallery_view']) && $data['gallery_view'] == 'GalleryLightbox') {
                            $url->setAnchor($data['image']);
                        }
                    } elseif ($data['view'] == 'Results') {
                        $url = new Horde_Url('tag/' . (!empty($data['tag']) ? urlencode($data['tag']) . '/' : ''));
                        if (!empty($data['actionID'])) {
                            $url->add(array('actionID' => $data['actionID']));
                        }
                        if (!empty($data['owner'])) {
                            $url->add('owner', $data['owner']);
                        }
                    }
                    // Keep the URL as clean as possible - don't append the page
                    // number if it's zero, which would be the default.
                    if (!empty($data['page'])) {
                        $url->add('page', $data['page']);
                    }
                    if (!empty($data['year'])) {
                        $url->add(array('year' => $data['year'], 'month' => empty($data['month']) ? 0 : $data['month'], 'day' => empty($data['day']) ? 0 : $data['day']));
                    }
                    return Horde::url($url, $full, $append_session);
                } else {
                    $url = Horde::url('view.php', $full, $append_session);
                    // See note above about delegating url generation to gallery/view
                    if ($data['view'] == 'Image' && !empty($data['gallery_view']) && $data['gallery_view'] == 'GalleryLightbox') {
                        $data['view'] = 'Gallery';
                        $url->setAnchor($data['image']);
                    }
                    return $url->add($data)->setRaw(true);
                }
            case 'group':
                if ($rewrite) {
                    if (empty($data['groupby'])) {
                        $data['groupby'] = $prefs->getValue('groupby');
                    }
                    if ($data['groupby'] == 'owner') {
                        $url = 'user/';
                    } elseif ($data['groupby'] == 'none') {
                        $url = 'all/';
                    }
                    unset($data['groupby']);
                    $url = Horde::url($url, $full, $append_session);
                    if (count($data)) {
                        $url->add($data);
                    }
                    return $url;
                } else {
                    return Horde::url('group.php', $full, $append_session)->add($data);
                }
            case 'rss_user':
                if ($rewrite) {
                    return Horde::url('user/' . urlencode($data['owner']) . '/rss', $full, $append_session);
                } else {
                    $url = Horde::url(new Horde_Url('rss.php'), $full, $append_session);
                    return $url->add(array('stream_type' => 'user', 'id' => $data['owner']));
                }
            case 'rss_gallery':
                if ($rewrite) {
                    $id = !empty($data['slug']) ? $data['slug'] : 'id/' . (int) $data['gallery'];
                    return Horde::url('gallery/' . $id . '/rss', $full, $append_session);
                } else {
                    return Horde::url('rss.php', $full, $append_session)->add(array('stream_type' => 'gallery', 'id' => (int) $data['gallery']));
                }
            case 'default_view':
                switch ($prefs->getValue('defaultview')) {
                    case 'browse':
                        return Horde::url(new Horde_Url('browse.php'), $full, $append_session);
                    case 'galleries':
                        $url = Ansel::getUrlFor('view', array('view' => 'List'), true);
                        break;
                    case 'mygalleries':
                    default:
                        $url = Ansel::getUrlFor('view', array('view' => 'List', 'owner' => $GLOBALS['registry']->getAuth(), 'groupby' => 'owner'), true);
                        break;
                }
                return $url;
        }
    }

Usage Example

Example #1
0
 /**
  * Build the HTML for the other galleries widget content.
  *
  * @param Horde_View $view  The view object.
  */
 protected function _getOtherGalleries(&$view)
 {
     $owner = $this->_view->gallery->get('owner');
     // Set up the tree
     $tree = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Tree')->create('otherAnselGalleries_' . md5($owner), 'Javascript', array('class' => 'anselWidgets'));
     try {
         $galleries = $GLOBALS['injector']->getInstance('Ansel_Storage')->listGalleries(array('attributes' => $owner));
     } catch (Ansel_Exception $e) {
         Horde::log($e, 'ERR');
         return;
     }
     foreach ($galleries as $gallery) {
         $parents = $gallery->get('parents');
         if (empty($parents)) {
             $parent = null;
         } else {
             $parents = explode(':', $parents);
             $parent = array_pop($parents);
         }
         $img = (string) Ansel::getImageUrl($gallery->getKeyImage(Ansel::getStyleDefinition('ansel_default')), 'mini', true);
         $link = Ansel::getUrlFor('view', array('gallery' => $gallery->id, 'slug' => $gallery->get('slug'), 'view' => 'Gallery'), true);
         $tree->addNode(array('id' => $gallery->id, 'parent' => $parent, 'label' => $gallery->get('name'), 'expanded' => $gallery->id == $this->_view->gallery->id, 'params' => array('icon' => $img, 'url' => $link)));
     }
     Horde::startBuffer();
     $tree->sort('label');
     $tree->renderTree();
     $view->tree = Horde::endBuffer();
     $GLOBALS['injector']->getInstance('Horde_Core_Factory_Imple')->create('Ansel_Ajax_Imple_ToggleOtherGalleries', array('id' => 'othergalleries-toggle'));
 }
All Usage Examples Of Ansel::getUrlFor