Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Page/Single.php
Строк: 199
<?php
namespace ConcreteCorePage;
use 
Page as CorePage;
use 
Loader;
use 
Environment;
use 
Config;
use 
User;
use 
Package;

use 
CacheLocal;
/**
*
* SinglePage extends the page class for those instances of pages that have no type, and are special "single pages"
* within the system.
* @package Pages
*
*/
class Single {

    
// These are pages that you're allowed to override with templates set in themes
    
public static function getThemeableCorePages() {
        
$themeableCorePages = array('download_file.php''login.php''maintenance.php''members.php''page_forbidden.php''page_not_found.php''register.php''upgrade.php''user_error.php');
        return 
$themeableCorePages;
    }

    public static function 
getListByPackage($pkg) {
        
$db Loader::db();
        
$r $db->Execute("select cID from Pages where cFilename is not null and pkgID = ?", array($pkg->getPackageID()));
        
$singlePages = array();
        while (
$row $r->FetchRow()) {
            
$singlePages[] = CorePage::getByID($row['cID']);
        }
        return 
$singlePages;
    }

     public static function 
sanitizePath($path) {
        
//takes a damn cpath and returns no first slash, and no more than 1 intermediate slash in
        // the middle at any point
        
$node preg_replace("/([/]+)/""/"$path);
        if (
substr($node01) == "/") {
            
$node substr($node1);
        }
        
// now do the same for the last node
        
if (substr($nodestrlen($node) - 11) == '/') {
            
$node substr($node0strlen($node) -1);
        }
        return 
$node;
    }

    public static function 
getPathToNode($node$pkg) {
        
$node = static::sanitizePath($node);
        
// checks to see whether a passed $node is a static content node
        // (static content nodes exist within the views directory)

        // first, we look to see if the exact path exists (plus .php)
        
$pathToFile null;
        if (
is_object($pkg)) {
            if (
is_dir(DIR_PACKAGES '/' $pkg->getPackageHandle())) {
                
$dirp DIR_PACKAGES '/' $pkg->getPackageHandle();
            } else {
                
$dirp DIR_PACKAGES_CORE '/' $pkg->getPackageHandle();
            }

            
$file1 $dirp '/' DIRNAME_PAGES '/' $node '/' FILENAME_COLLECTION_VIEW;
            
$file2 $dirp '/' DIRNAME_PAGES '/' $node '.php';
        } else {
            
$file1 DIR_FILES_CONTENT '/' $node '/' FILENAME_COLLECTION_VIEW;
            
$file2 DIR_FILES_CONTENT '/' $node '.php';
            
$file3 DIR_FILES_CONTENT_REQUIRED '/' $node '/' FILENAME_COLLECTION_VIEW;
            
$file4 DIR_FILES_CONTENT_REQUIRED '/' $node '.php';
        }

        if (
file_exists($file1)) {
            
$pathToFile "/{$node}/" FILENAME_COLLECTION_VIEW;
        } else if (
file_exists($file2)) {
            
$pathToFile "/{$node}.php";
        } else if (isset(
$file3) && file_exists($file3)) {
            
$pathToFile "/{$node}/" FILENAME_COLLECTION_VIEW;
        } else if (isset(
$file4) && file_exists($file4)) {
            
$pathToFile "/{$node}.php";
        }

        if (!
$pathToFile) {
            
$pathToFile false;
        }

        return 
$pathToFile;

    }

    public static function 
refresh(CorePage $c) {
        
// takes a generated collection and refreshes it - updates its path, it's cDateModified
        // it's name, it's permissions

        
if (!$c->isGeneratedCollection()) {
            return 
false;
        }

        
$pkg Package::getByID($c->getPackageID());
        
$currentPath $c->getCollectionPath();
        
$pathToFile = static::getPathToNode($currentPath$pkg);

        
$txt Loader::helper('text');

        
$data = array();
        
$data['cName'] = $txt->unhandle($c->getCollectionHandle());
        
$data['cFilename'] = $pathToFile;

        
$c->update($data);
        
$env Environment::get();
        
$env->clearOverrideCache();

    }

    public static function 
getByID($cID$version 'RECENT') {
        
$c Page::getByID($cID$version);
        return 
$c;
    }

    
/*
     * Adds a new single page at the given path, optionally specify a Package
     * @param string $cPath
     * @param Package $pkg
     * @return Page
     */
    
public static function add($cPath$pkg null) {
        
// if we get to this point, we create a special collection
        // without a specific type. This collection has a special cFilename that
        // points to the passed node
        
$db Loader::db();
        
$txt Loader::helper('text');
        
Loader::helper('concrete/ui')->clearInterfaceItemsCache();

        
// trim off a leading / if there is one
        
$cPath trim($cPath'/');

        
// now we grab the parent collection, if there is a static one.

        
$pages explode('/'$cPath);

        
// instantiate the home collection so we have someplace to add these to
        
$parent CorePage::getByID(1);

        
// now we iterate through the pages  to ensure that they exist in the system before adding the new guy

        
$pathPrefix '';

        for (
$i 0$i count($pages); $i++) {
            
$currentPath $pathPrefix $pages[$i];

            
$pathToFile = static::getPathToNode($currentPath$pkg);

            
// check to see if a page at this point in the tree exists
            
$c CorePage::getByPath("/" $currentPath);
            if (
$c->isError() && $c->getError() == COLLECTION_NOT_FOUND) {
                
// create the page at that point in the tree

                
$data = array();
                
$data['handle'] = $pages[$i];
                
$data['name'] = $txt->unhandle($data['handle']);
                
$data['filename'] = $pathToFile;
                
$data['uID'] = USER_SUPER_ID;
                if (
$pkg != null) {
                    
$data['pkgID'] = $pkg->getPackageID();
                }

                
$newC $parent->addStatic($data);
                
$parent $newC;


            } else {
                
$parent $c;
            }

            
$pathPrefix $currentPath '/';
        }
        
$env Environment::get();
        
$env->clearOverrideCache();
        return 
$parent;

    }

    
// returns all pages in the site that are "single"
    
public static function getList() {
        
$db Loader::db();
        
$r $db->query("select Pages.cID from Pages inner join Collections on Pages.cID = Collections.cID where cFilename is not null order by cDateModified desc");
        
$pages = array();
        while (
$row $r->fetchRow()) {
            
$c Page::getByID($row['cID']);
            
$pages[] = $c;
        }
        return 
$pages;
    }


}
Онлайн: 1
Реклама