Вход Регистрация
Файл: contao-3.5.8/system/modules/repository/classes/RepositoryCatalog.php
Строк: 265
<?php

/**
 * Contao Open Source CMS
 *
 * Copyright (c) 2005-2016 Leo Feyer
 *
 * @package   Repository
 * @author    Peter Koch, IBK Software AG
 * @license   See accompaning file LICENSE.txt
 * @copyright Peter Koch 2008-2010
 */


/**
 * Implements the extension catalog
 * @copyright  Peter Koch 2008-2010
 * @author     Peter Koch, IBK Software AG
 * @author Leo Feyer <https://github.com/leofeyer>
 * @package    Repository
 */
class RepositoryCatalog extends RepositoryBackendModule
{
    
/**
     * Generate module:
     * - Display a wildcard in the back end
     * - Declare actionlist with templates and compilers in the front end
     * @return string
     */
    
public function generate()
    {
        if (!
extension_loaded('soap')) {
            
System::loadLanguageFile('tl_repository');
            return 
'<p class="tl_empty">'.$GLOBALS['TL_LANG']['tl_repository']['missingSoapModule'].'</p>';
        } 
// if

        
$this->actions = array(
            
//      act[0]            strTemplate                    compiler
            
array('',                'repository_catlist',        'listExtensions' ),
            array(
'view',            'repository_catview',        'viewExtension' )
        );

        return 
parent::generate();
    } 
// generate

    /**
     * List the extensions
     */
    
protected function listExtensions()
    {
        
$rep = &$this->Template->rep;
        
$rep->f_page 0;

        
// returning from submit?
        
if ($this->filterPost('repository_action') == $rep->f_action) {
            
// get url parameters
            
$rep->f_tag     trim(Input::post('repository_tag'));
            
$rep->f_type     trim(Input::post('repository_type'));
            
$rep->f_categorytrim(Input::post('repository_category'));
            
$rep->f_state    trim(Input::post('repository_state'));
            
$rep->f_author    trim(Input::post('repository_author'));
            
$rep->f_order    trim(Input::post('repository_order'));
            
$rep->f_page    trim(Input::post('repository_page'));
            
$rep->f_find    trim(Input::post('repository_find'));
            
$this->Session->set(
                
'repository_catalog_settings',
                array(
                    
'repository_tag'    => $rep->f_tag,
                    
'repository_type'    => $rep->f_type,
                    
'repository_category'=> $rep->f_category,
                    
'repository_state'    => $rep->f_state,
                    
'repository_author'    => $rep->f_author,
                    
'repository_order'    => $rep->f_order,
                    
'repository_page'    => $rep->f_page,
                    
'repository_find'    => $rep->f_find
                
)
            );
        } else {
            
$stg $this->Session->get('repository_catalog_settings');
            if (
is_array($stg)) {
                
$rep->f_tag     trim($stg['repository_tag']);
                
$rep->f_type     trim($stg['repository_type']);
                
$rep->f_categorytrim($stg['repository_category']);
                
$rep->f_state    trim($stg['repository_state']);
                
$rep->f_author    trim($stg['repository_author']);
                
$rep->f_order    trim($stg['repository_order']);
                
$rep->f_page    trim($stg['repository_page']);
                
$rep->f_find    trim($stg['repository_find']);
            } 
// if
        
// if

        
if ($rep->f_order==''$rep->f_order 'popular';

        
$perpage = (int)trim(Config::get('repository_listsize'));
        if (
$perpage 0$perpage 0;

        
// process parameters and build query options
        
$options = array(
            
'languages'        => $this->languages,
            
'sets'            => 'sums,reviews',
        );
        if (
$rep->f_page>=&& $perpage>0) {
            
$options['first'] = $rep->f_page $perpage;
            
$options['limit'] = $perpage;
        } 
// if
        
if ($rep->f_tag        != ''$options['tags']            = $rep->f_tag;
        if (
$rep->f_type     != ''$options['types']        = $rep->f_type;
        if (
$rep->f_category!= ''$options['categories']     = $rep->f_category;
        if (
$rep->f_state    != ''$options['states']        = $rep->f_state;
        if (
$rep->f_author    != ''$options['authors']        = $rep->f_author;
        if (
$rep->f_find    != ''$options['find']            = $rep->f_find;
        if (!
Config::get('repository_unsafe_catalog'))
            
$options['compatibility'] = Repository::encodeVersion(VERSION.'.'.BUILD);

        switch (
$rep->f_order) {
            case 
'name'        : break;
            case 
'title'    $options['order'] = 'title'; break;
            case 
'author'    $options['order'] = 'author'; break;
            case 
'rating'    $options['order'] = 'rating-'; break;
            case 
'reldate'    $options['order'] = 'releasedate-'; break;
            default            : 
$options['order'] = 'popularity-';
        } 
// switch

        // query extensions
        
$rep->extensions $this->getExtensionList($options);
        if (
$rep->f_page>=&& $perpage>&& count($rep->extensions)==0) {
            
$rep->f_page 0;
            
$options['first'] = 0;
            
$rep->extensions $this->getExtensionList($options);
        } 
// if

        // add view links
        
$totrecs 0;
        foreach (
$rep->extensions as &$ext) {
            
$ext->viewLink $this->createUrl(array('view' => $ext->name.'.'.$ext->version.'.'.$ext->language));
            
$ext->installLink $this->createPageUrl('repository_manager',array('install'=>$ext->name.'.'.$ext->version));
            
$totrecs $ext->totrecs;
        } 
// foreach

        // create pages list
        
$rep->pages = array();
        if (
$perpage 0) {
            
$first 1;
            while (
$totrecs 0) {
                
$cnt $totrecs $perpage $perpage $totrecs;
                
$rep->pages[] = $first ' - ' . ($first+$cnt-1);
                
$first += $cnt;
                
$totrecs -= $cnt;
            } 
// while
        
// if

        
$rep->tags $this->getTagList(array('languages'=>$this->languages'mode'=>'initcap'));
        
$rep->authors $this->getAuthorList(array('languages'=>$this->languages));
    } 
// listExtensions

    /**
     * Detailed view of one extension.
     * @param string $aParams
     */
    
protected function viewExtension($aParams)
    {
        
$rep = &$this->Template->rep;

        
// parse name[.version][.language]
        
$matches = array();
        if (!
preg_match('#^([a-zA-Z0-9_-]+)(.([0-9]+))?(.([a-z]{2,2}))?$#'$aParams$matches))
            
$this->redirect($rep->homeLink);
        
$name $matches[1];
        
$version = (count($matches)>=4) ? $matches[3] : '';
        
$language count($matches)>=$matches[5] : $this->languages;

        
// compose base options
        
$options = array(
            
'match'     => 'exact',
            
'names'     => $name,
            
'languages'    => $language,
            
'sets'      => 'details,pictures,languages,history,dependencies,dependents,sums'
        
);
        if (
$version!=''$options['versions'] = $version;

        
$rep->extensions $this->getExtensionList($options);
        if (
count($rep->extensions)<1$this->redirect($rep->homeLink);
        
$ext = &$rep->extensions[0];

        
// other versions links
        
if (property_exists($ext'allversions'))
            foreach (
$ext->allversions as &$ver)
                
$ver->viewLink $this->createUrl(array('view'=>$ext->name.'.'.$ver->version.'.'.$ext->language));

        
// other languages links
        
if (property_exists($ext'languages')) {
            
$langs explode(','$ext->languages);
            
$ext->languages = array();
            foreach (
$langs as $lang) {
                
$l = new stdClass();
                
$l->language $lang;
                
$l->link $this->createUrl(array('view' => $ext->name.'.'.$ext->version.'.'.$lang));
                
$ext->languages[] = $l;
            } 
// for
        
// if

        // dependencies links
        
if (property_exists($ext'dependencies'))
            foreach (
$ext->dependencies as &$dep)
                
$dep->viewLink $this->createUrl(array('view'=>$dep->extension));

        
// dependents links
        
if (property_exists($ext'dependents'))
            foreach (
$ext->dependents as &$dep)
                
$dep->viewLink $this->createUrl(array('view'=>$dep->extension));

        
// install link
        
$ext->installLink $this->createPageUrl('repository_manager',array('install'=>$ext->name.'.'.$ext->version));

        if (
$this->filterPost('repository_action') == $rep->f_action) {
            if (isset(
$_POST['repository_installbutton'])) $this->redirect($ext->installLink);
            if (isset(
$_POST['repository_manualbutton']) && property_exists($ext'manual')) $this->redirect($ext->manual);
            if (isset(
$_POST['repository_forumbutton']) && property_exists($ext'forum')) $this->redirect($ext->forum);
            if (isset(
$_POST['repository_shopbutton']) && property_exists($ext'shop')) $this->redirect($ext->shop);
        } 
// if
    
// viewExtension

    
private function getAuthorList($aOptions)
    {
        switch (
$this->mode) {
            case 
'local':
                return 
$this->RepositoryServer->getAuthorList((object)$aOptions);
            case 
'soap':
                return 
$this->client->getAuthorList($aOptions);
            default:
                return array();
        } 
// if
    
// getAuthorList

    
private function getTagList($aOptions)
    {
        switch (
$this->mode) {
            case 
'local':
                return 
$this->RepositoryServer->getTagList((object)$aOptions);
            case 
'soap':
                return 
$this->client->getTagList($aOptions);
            default:
                return array();
        } 
// if
    
// getTagList

// class RepositoryCatalog
Онлайн: 0
Реклама