Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Backup/ContentImporter.php
Строк: 890
<?php

namespace ConcreteCoreBackup;

use 
ConcreteCoreFileImporter;
use 
ConcreteCorePageFeed;
use 
ConcreteCoreSharingSocialNetworkLink;
use 
ConcreteCoreTreeTree;
use 
Page;
use 
Package;
use 
Stack;
use 
SinglePage;
use 
UserInfo;
use 
PageType;
use 
BlockType;
use 
Block;
use 
Group;
use 
PageTheme;
use 
Core;
use 
Database;
use 
Job;
use 
JobSet;
use 
PageTemplate;
use 
CollectionAttributeKey;
use 
ConcreteCoreStyleCustomizerInlineStyleSet;
use 
ConcreteCoreBlockBlockTypeSet as BlockTypeSet;
use 
ConcreteCoreAttributeType as AttributeType;
use 
ConcreteCoreAttributeKeyCategory as AttributeKeyCategory;
use 
PermissionKeyCategory;
use 
PermissionKey;
use 
ConcreteCorePermissionAccessEntityType as PermissionAccessEntityType;
use 
ConcreteCoreWorkflowProgressCategory as WorkflowProgressCategory;
use 
ConcreteCorePermissionAccessEntityGroupEntity as GroupPermissionAccessEntity;
use 
PermissionAccess;
use 
ConcreteCoreCaptchaLibrary as SystemCaptchaLibrary;
use 
ConcreteCoreEditorSnippet as SystemContentEditorSnippet;
use 
ConcreteCoreFeatureFeature;
use 
ConcreteCoreFeatureCategoryCategory as FeatureCategory;
use 
ConcreteCoreGatheringDataSourceDataSource as GatheringDataSource;
use 
ConcreteCoreGatheringItemTemplateTemplate as GatheringItemTemplate;
use 
ConcreteCoreGatheringItemTemplateType as GatheringItemTemplateType;
use 
ConcreteCorePageTypeComposerControlTypeType as PageTypeComposerControlType;
use 
ConcreteCorePageTypePublishTargetTypeType as PageTypePublishTargetType;
use 
ConcreteCoreConversationEditorEditor as ConversationEditor;
use 
ConcreteCoreConversationRatingType as ConversationRatingType;
use 
ConcreteCoreConversationFlagTypeFlagType as ConversationFlagType;
use 
ConcreteCoreValidationBannedWordBannedWord as BannedWord;
use 
ConcreteCorePageTypeComposerFormLayoutSetControl as PageTypeComposerFormLayoutSetControl;

class 
ContentImporter
{
    protected static 
$mcBlockIDs = array();
    protected static 
$ptComposerOutputControlIDs = array();

    public function 
importContentFile($file)
    {
        
$sx simplexml_load_file($file);
        
$this->doImport($sx);
    }

    public function 
importContentString($string)
    {
        
$sx simplexml_load_string($string);
        
$this->doImport($sx);
    }

    protected function 
doImport($sx)
    {
        
$this->importSinglePageStructure($sx);
        
$this->importStacksStructure($sx);
        
$this->importBlockTypes($sx);
        
$this->importBlockTypeSets($sx);
        
$this->importConversationEditors($sx);
        
$this->importConversationRatingTypes($sx);
        
$this->importConversationFlagTypes($sx);
        
$this->importPageTypePublishTargetTypes($sx);
        
$this->importPageTypeComposerControlTypes($sx);
        
$this->importBannedWords($sx);
        
$this->importSocialLinks($sx);
        
$this->importTrees($sx);
        
$this->importFileImportantThumbnailTypes($sx);
        
$this->importFeatures($sx);
        
$this->importFeatureCategories($sx);
        
$this->importGatheringDataSources($sx);
        
$this->importGatheringItemTemplateTypes($sx);
        
$this->importGatheringItemTemplates($sx);
        
$this->importAttributeCategories($sx);
        
$this->importAttributeTypes($sx);
        
$this->importWorkflowTypes($sx);
        
$this->importWorkflowProgressCategories($sx);
        
$this->importAttributes($sx);
        
$this->importAttributeSets($sx);
        
$this->importThemes($sx);
        
$this->importPermissionCategories($sx);
        
$this->importPermissionAccessEntityTypes($sx);
        
$this->importTaskPermissions($sx);
        
$this->importPermissions($sx);
        
$this->importJobs($sx);
        
$this->importJobSets($sx);
        
// import bare page types first, then import structure, then page types blocks, attributes and composer settings, then page content, because we need the structure for certain attributes and stuff set in master collections (like composer)
        
$this->importPageTemplates($sx);
        
$this->importPageTypesBase($sx);
        
$this->importPageStructure($sx);
        
$this->importPageFeeds($sx);
        
$this->importPageTypeTargets($sx);
        
$this->importPageTypeDefaults($sx);
        
$this->importSinglePageContent($sx);
        
$this->importStacksContent($sx);
        
$this->importPageContent($sx);
        
$this->importPackages($sx);
        
$this->importConfigValues($sx);
        
$this->importSystemCaptchaLibraries($sx);
        
$this->importSystemContentEditorSnippets($sx);
    }

    protected static function 
getPackageObject($pkgHandle)
    {
        
$pkg false;
        if (
$pkgHandle) {
            
$pkg Package::getByHandle($pkgHandle);
        }

        return 
$pkg;
    }

    protected function 
importStacksStructure(SimpleXMLElement $sx)
    {
        if (isset(
$sx->stacks)) {
            foreach (
$sx->stacks->stack as $p) {
                if (isset(
$p['type'])) {
                    
$type Stack::mapImportTextToType($p['type']);
                    
Stack::addStack($p['name'], $type);
                } else {
                    
Stack::addStack($p['name']);
                }
            }
        }
    }

    protected function 
importStacksContent(SimpleXMLElement $sx)
    {
        if (isset(
$sx->stacks)) {
            foreach (
$sx->stacks->stack as $p) {
                
$stack Stack::getByName($p['name']);
                if (isset(
$p->area)) {
                    
$this->importPageAreas($stack$p);
                }
            }
        }
    }

    protected function 
importSinglePageStructure(SimpleXMLElement $sx)
    {
        if (isset(
$sx->singlepages)) {
            foreach (
$sx->singlepages->page as $p) {
                
$pkg = static::getPackageObject($p['package']);
                
$spl SinglePage::add($p['path'], $pkg);
                if (
is_object($spl)) {
                    if (isset(
$p['root']) && $p['root'] == true) {
                        
$spl->moveToRoot();
                    }
                    if (
$p['name']) {
                        
$spl->update(array('cName' => $p['name'], 'cDescription' => $p['description']));
                    }
                }
            }
        }
    }

    protected function 
importSinglePageContent(SimpleXMLElement $sx)
    {
        if (isset(
$sx->singlepages)) {
            foreach (
$sx->singlepages->page as $px) {
                
$page Page::getByPath($px['path'], 'RECENT');
                if (isset(
$px->area)) {
                    
$this->importPageAreas($page$px);
                }
                if (isset(
$px->attributes)) {
                    foreach (
$px->attributes->children() as $attr) {
                        
$ak CollectionAttributeKey::getByHandle($attr['handle']);
                        if (
is_object($ak)) {
                            
$page->setAttribute((string) $attr['handle'], $ak->getController()->importValue($attr));
                        }
                    }
                }
            }
        }
    }

    public function 
setupPageNodeOrder($pageNodeA$pageNodeB)
    {
        
$pathA = (string) $pageNodeA['path'];
        
$pathB = (string) $pageNodeB['path'];
        
$numA count(explode('/'$pathA));
        
$numB count(explode('/'$pathB));
        if (
$numA == $numB) {
            if (
intval($pageNodeA->originalPos) < intval($pageNodeB->originalPos)) {
                return -
1;
            } else {
                if (
intval($pageNodeA->originalPos) > intval($pageNodeB->originalPos)) {
                    return 
1;
                } else {
                    return 
0;
                }
            }
        } else {
            return (
$numA $numB) ? -1;
        }
    }

    protected function 
importPageContent(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pages)) {
            foreach (
$sx->pages->page as $px) {
                if (
$px['path'] != '') {
                    
$page Page::getByPath($px['path'], 'RECENT');
                } else {
                    
$page Page::getByID(HOME_CID'RECENT');
                }
                if (isset(
$px->area)) {
                    
$this->importPageAreas($page$px);
                }
                if (isset(
$px->attributes)) {
                    foreach (
$px->attributes->children() as $attr) {
                        
$ak CollectionAttributeKey::getByHandle($attr['handle']);
                        if (
is_object($ak)) {
                            
$page->setAttribute((string) $attr['handle'], $ak->getController()->importValue($attr));
                        }
                    }
                }
                
$page->reindex();
            }
        }
    }

    protected function 
importPageStructure(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pages)) {
            
$nodes = array();
            
$i 0;
            foreach (
$sx->pages->page as $p) {
                
$p->originalPos $i;
                
$nodes[] = $p;
                
$i++;
            }
            
usort($nodes, array('static''setupPageNodeOrder'));
            
$home Page::getByID(HOME_CID'RECENT');

            foreach (
$nodes as $px) {
                
$pkg = static::getPackageObject($px['package']);
                
$data = array();
                
$user = (string) $px['user'];
                if (
$user != '') {
                    
$ui UserInfo::getByUserName($user);
                    if (
is_object($ui)) {
                        
$data['uID'] = $ui->getUserID();
                    } else {
                        
$data['uID'] = USER_SUPER_ID;
                    }
                }
                
$cDatePublic = (string) $px['public-date'];
                if (
$cDatePublic) {
                    
$data['cDatePublic'] = $cDatePublic;
                }

                
$data['pkgID'] = 0;
                if (
is_object($pkg)) {
                    
$data['pkgID'] = $pkg->getPackageID();
                }
                
$args = array();
                
$ct PageType::getByHandle($px['pagetype']);
                
$template PageTemplate::getByHandle($px['template']);
                if (
$px['path'] != '') {
                    
// not home page
                    
$page Page::getByPath($px['path']);
                    if (!
is_object($page) || ($page->isError())) {
                        
$lastSlash strrpos((string) $px['path'], '/');
                        
$parentPath substr((string) $px['path'], 0$lastSlash);
                        
$data['cHandle'] = substr((string) $px['path'], $lastSlash 1);
                        if (!
$parentPath) {
                            
$parent $home;
                        } else {
                            
$parent Page::getByPath($parentPath);
                        }
                        
$page $parent->add($ct$data);
                    }
                } else {
                    
$page $home;
                }

                
$args['cName'] = $px['name'];
                
$args['cDescription'] = $px['description'];
                if (
is_object($ct)) {
                    
$args['ptID'] = $ct->getPageTypeID();
                }
                
$args['pTemplateID'] = $template->getPageTemplateID();
                
$page->update($args);
            }
        }
    }

    public function 
importPageAreas(Page $pageSimpleXMLElement $px)
    {
        foreach (
$px->area as $ax) {
            if (isset(
$ax->blocks)) {
                foreach (
$ax->blocks->block as $bx) {
                    if (
$bx['type'] != '') {
                        
// we check this because you might just get a block node with only an mc-block-id, if it's an alias
                        
$bt BlockType::getByHandle((string) $bx['type']);
                        if (!
is_object($bt)) {
                            throw new 
Exception(t('Invalid block type handle: %s'strval($bx['type'])));
                        }
                        
$btc $bt->getController();
                        
$btc->import($page, (string) $ax['name'], $bx);
                    } else {
                        if (
$bx['mc-block-id'] != '') {
                            
// we find that block in the master collection block pool and alias it out
                            
$bID array_search((string) $bx['mc-block-id'], self::$mcBlockIDs);
                            if (
$bID) {
                                
$mc Page::getByID($page->getMasterCollectionID(), 'RECENT');
                                
$block Block::getByID($bID$mc, (string) $ax['name']);
                                
$block->alias($page);

                                if (
$block->getBlockTypeHandle() == BLOCK_HANDLE_LAYOUT_PROXY) {
                                    
// we have to go get the blocks on that page in this layout.
                                    
$btc $block->getController();
                                    
$arLayout $btc->getAreaLayoutObject();
                                    
$columns $arLayout->getAreaLayoutColumns();
                                    foreach (
$columns as $column) {
                                        
$area $column->getAreaObject();
                                        
$blocks $area->getAreaBlocksArray($mc);
                                        foreach (
$blocks as $_b) {
                                            
$_b->alias($page);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            if (isset(
$ax->style)) {
                
$area Area::get($page, (string) $ax['name']);
                
$set StyleSet::import($ax->style);
                
$page->setCustomStyleSet($area$set);
            }
        }
    }

    public static function 
addMasterCollectionBlockID($b$id)
    {
        
self::$mcBlockIDs[$b->getBlockID()] = $id;
    }

    public static function 
getMasterCollectionTemporaryBlockID($b)
    {
        if (isset(
self::$mcBlockIDs[$b->getBlockID()])) {
            return 
self::$mcBlockIDs[$b->getBlockID()];
        }
    }

    public static function 
addPageTypeComposerOutputControlID(PageTypeComposerFormLayoutSetControl $control$id)
    {
        
self::$ptComposerOutputControlIDs[$id] = $control->getPageTypeComposerFormLayoutSetControlID();
    }

    public static function 
getPageTypeComposerFormLayoutSetControlFromTemporaryID($id)
    {
        if (isset(
self::$ptComposerOutputControlIDs[$id])) {
            return 
self::$ptComposerOutputControlIDs[$id];
        }
    }

    protected function 
importPageTemplates(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pagetemplates)) {
            foreach (
$sx->pagetemplates->pagetemplate as $pt) {
                
$pkg = static::getPackageObject($pt['package']);
                
$ptt PageTemplate::getByHandle($pt['handle']);
                if (!
is_object($ptt)) {
                    
$ptt PageTemplate::add(
                        (string) 
$pt['handle'],
                        (string) 
$pt['name'],
                        (string) 
$pt['icon'],
                        
$pkg,
                        (string) 
$pt['internal']
                    );
                }
            }
        }
    }

    protected function 
importBlockTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->blocktypes)) {
            foreach (
$sx->blocktypes->blocktype as $bt) {
                if (!
is_object(BlockType::getByHandle((string) $bt['handle']))) {
                    
$pkg = static::getPackageObject($bt['package']);
                    if (
is_object($pkg)) {
                        
BlockType::installBlockTypeFromPackage((string) $bt['handle'], $pkg);
                    } else {
                        
BlockType::installBlockType((string) $bt['handle']);
                    }
                }
            }
        }
    }

    protected function 
importWorkflowTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->workflowtypes)) {
            foreach (
$sx->workflowtypes->workflowtype as $wt) {
                
$pkg = static::getPackageObject($wt['package']);
                
$name $wt['name'];
                if (!
$name) {
                    
$name Core::make('helper/text')->unhandle($wt['handle']);
                }
                
$type ConcreteCoreWorkflowType::add($wt['handle'], $name$pkg);
            }
        }
    }

    protected function 
importAttributeTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->attributetypes)) {
            foreach (
$sx->attributetypes->attributetype as $at) {
                
$pkg = static::getPackageObject($at['package']);
                
$name $at['name'];
                if (!
$name) {
                    
$name Core::make('helper/text')->unhandle($at['handle']);
                }
                
$type AttributeType::getByHandle($at['handle']);
                if (!
is_object($type)) {
                    
$type AttributeType::add($at['handle'], $name$pkg);
                }
                if (isset(
$at->categories)) {
                    foreach (
$at->categories->children() as $cat) {
                        
$catobj AttributeKeyCategory::getByHandle((string) $cat['handle']);
                        
$catobj->associateAttributeKeyType($type);
                    }
                }
            }
        }
    }

    protected function 
importPermissionAccessEntityTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->permissionaccessentitytypes)) {
            foreach (
$sx->permissionaccessentitytypes->permissionaccessentitytype as $pt) {
                
$type PermissionAccessEntityType::getByHandle((string) $pt['handle']);
                if (!
is_object($type)) {
                    
$pkg = static::getPackageObject($pt['package']);
                    
$name $pt['name'];
                    if (!
$name) {
                        
$name Core::make('helper/text')->unhandle($pt['handle']);
                    }
                    
$type PermissionAccessEntityType::add($pt['handle'], $name$pkg);
                }

                if (isset(
$pt->categories)) {
                    foreach (
$pt->categories->children() as $cat) {
                        
$catobj PermissionKeyCategory::getByHandle((string) $cat['handle']);
                        
$catobj->associateAccessEntityType($type);
                    }
                }
            }
        }
    }

    protected function 
importPackages(SimpleXMLElement $sx)
    {
        if (isset(
$sx->packages)) {
            foreach (
$sx->packages->package as $p) {
                
$pkg Package::getClass((string) $p['handle']);
                if (!
$pkg->isPackageInstalled()) {
                    
$pkg->install();
                }
            }
        }
    }

    protected function 
importThemes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->themes)) {
            foreach (
$sx->themes->theme as $th) {
                
$pkg = static::getPackageObject($th['package']);
                
$pThemeHandle = (string) $th['handle'];
                
$pt PageTheme::getByHandle($pThemeHandle);
                if (!
is_object($pt)) {
                    
$pt PageTheme::add($pThemeHandle$pkg);
                }
                if (
$th['activated'] == '1') {
                    
$pt->applyToSite();
                }
            }
        }
    }

    protected function 
importPageTypePublishTargetTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pagetypepublishtargettypes)) {
            foreach (
$sx->pagetypepublishtargettypes->type as $th) {
                
$pkg = static::getPackageObject($th['package']);
                
$ce PageTypePublishTargetType::add((string) $th['handle'], (string) $th['name'], $pkg);
            }
        }
    }

    protected function 
importPageTypeComposerControlTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pagetypecomposercontroltypes)) {
            foreach (
$sx->pagetypecomposercontroltypes->type as $th) {
                
$pkg = static::getPackageObject($th['package']);
                
$ce PageTypeComposerControlType::add((string) $th['handle'], (string) $th['name'], $pkg);
            }
        }
    }

    protected function 
importPageTypesBase(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pagetypes)) {
            foreach (
$sx->pagetypes->pagetype as $p) {
                
PageType::import($p);
            }
        }
    }

    protected function 
importPageTypeTargets(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pagetypes)) {
            foreach (
$sx->pagetypes->pagetype as $p) {
                
PageType::importTargets($p);
            }
        }
    }

    protected function 
importPageTypeDefaults(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pagetypes)) {
            foreach (
$sx->pagetypes->pagetype as $p) {
                
PageType::importContent($p);
            }
        }
    }

    protected function 
importConversationEditors(SimpleXMLElement $sx)
    {
        if (isset(
$sx->conversationeditors)) {
            foreach (
$sx->conversationeditors->editor as $th) {
                
$pkg = static::getPackageObject($th['package']);
                
$ce ConversationEditor::add((string) $th['handle'], (string) $th['name'], $pkg);
                if (
$th['activated'] == '1') {
                    
$ce->activate();
                }
            }
        }
    }

    protected function 
importConversationRatingTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->conversationratingtypes)) {
            foreach (
$sx->conversationratingtypes->conversationratingtype as $th) {
                
$pkg = static::getPackageObject($th['package']);
                
$ce ConversationRatingType::add((string) $th['handle'], (string) $th['name'], $th['points'], $pkg);
            }
        }
    }

    protected function 
importBannedWords(SimpleXMLElement $sx)
    {
        if (isset(
$sx->banned_words)) {
            foreach (
$sx->banned_words->banned_word as $p) {
                
$bw BannedWord::add(str_rot13($p));
            }
        }
    }

    protected function 
importSocialLinks(SimpleXMLElement $sx)
    {
        if (isset(
$sx->sociallinks)) {
            foreach (
$sx->sociallinks->link as $l) {
                
$sociallink Link::getByServiceHandle((string) $l['service']);
                if (!
is_object($sociallink)) {
                    
$sociallink = new Link();
                    
$sociallink->setURL((string) $l['url']);
                    
$sociallink->setServiceHandle((string) $l['service']);
                    
$sociallink->save();
                }
            }
        }
    }

    protected function 
importPageFeeds(SimpleXMLElement $sx)
    {
        if (isset(
$sx->pagefeeds)) {
            foreach (
$sx->pagefeeds->feed as $f) {
                
$feed Feed::getByHandle((string) $f->handle);
                
$inspector Core::make('import/value_inspector');
                if (!
is_object($feed)) {
                    
$feed = new Feed();
                }
                if (
$f->parent) {
                    
$result $inspector->inspect((string) $f->parent);
                    
$parent $result->getReplacedValue();
                    
$feed->setParentID($parent);
                }
                
$feed->setTitle((string) $f->title);
                
$feed->setDescription((string) $f->description);
                
$feed->setHandle((string) $f->handle);
                if (
$f->descendents) {
                    
$feed->setIncludeAllDescendents(true);
                }
                if (
$f->aliases) {
                    
$feed->setDisplayAliases(true);
                }
                if (
$f->featured) {
                    
$feed->setDisplayFeaturedOnly(true);
                }
                if (
$f->pagetype) {
                    
$result $inspector->inspect((string) $f->pagetype);
                    
$pagetype $result->getReplacedValue();
                    
$feed->setPageTypeID($pagetype);
                }
                
$contentType $f->contenttype;
                
$type = (string) $contentType['type'];
                if (
$type == 'description') {
                    
$feed->displayShortDescriptionContent();
                } elseif (
$type == 'area') {
                    
$feed->displayAreaContent((string) $contentType['handle']);
                }
                
$feed->save();
            }
        }
    }
    protected function 
importTrees(SimpleXMLElement $sx)
    {
        if (isset(
$sx->trees)) {
            foreach (
$sx->trees->tree as $t) {
                
Tree::import($t);
            }
        }
    }

    protected function 
importFileImportantThumbnailTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->thumbnailtypes)) {
            foreach (
$sx->thumbnailtypes->thumbnailtype as $l) {
                
$type = new ConcreteCoreFileImageThumbnailTypeType();
                
$type->setName((string) $l['name']);
                
$type->setHandle((string) $l['handle']);
                
$type->setWidth((string) $l['width']);
                
$type->setHeight((string) $l['height']);
                
$required = (string) $l['required'];
                if (
$required) {
                    
$type->requireType();
                }
                
$type->save();
            }
        }
    }

    protected function 
importConversationFlagTypes(SimpleXMLElement $sx)
    {
        if (isset(
$sx->flag_types)) {
            foreach (
$sx->flag_types->flag_type as $p) {
                
$bw ConversationFlagType::add((string) $p);
            }
        }
    }

    protected function 
importSystemCaptchaLibraries(SimpleXMLElement $sx)
    {
        if (isset(
$sx->systemcaptcha)) {
            foreach (
$sx->systemcaptcha->library as $th) {
                
$pkg = static::getPackageObject($th['package']);
                
$scl SystemCaptchaLibrary::add($th['handle'], $th['name'], $pkg);
                if (
$th['activated'] == '1') {
                    
$scl->activate();
                }
            }
        }
    }

    protected function 
importSystemContentEditorSnippets(SimpleXMLElement $sx)
    {
        if (isset(
$sx->systemcontenteditorsnippets)) {
            foreach (
$sx->systemcontenteditorsnippets->snippet as $th) {
                
$pkg = static::getPackageObject($th['package']);
                
$scs SystemContentEditorSnippet::add($th['handle'], $th['name'], $pkg);
                if (
$th['activated'] == '1') {
                    
$scs->activate();
                }
            }
        }
    }

    protected function 
importJobs(SimpleXMLElement $sx)
    {
        if (isset(
$sx->jobs)) {
            foreach (
$sx->jobs->job as $jx) {
                
$pkg = static::getPackageObject($jx['package']);
                
$job Job::getByHandle($jx['handle']);
                if (!
is_object($job)) {
                    if (
is_object($pkg)) {
                        
Job::installByPackage($jx['handle'], $pkg);
                    } else {
                        
Job::installByHandle($jx['handle']);
                    }
                }
            }
        }
    }

    protected function 
importJobSets(SimpleXMLElement $sx)
    {
        if (isset(
$sx->jobsets)) {
            foreach (
$sx->jobsets->jobset as $js) {
                
$jso JobSet::getByName((string) $js['name']);
                if (!
is_object($jso)) {
                    
$pkg = static::getPackageObject($js['package']);
                    if (
is_object($pkg)) {
                        
$jso JobSet::add((string) $js['name'], $pkg);
                    } else {
                        
$jso JobSet::add((string) $js['name']);
                    }
                }
                foreach (
$js->children() as $jsk) {
                    
$j Job::getByHandle((string) $jsk['handle']);
                    if (
is_object($j)) {
                        
$jso->addJob($j);
                    }
                }
            }
        }
    }

    protected function 
importConfigValues(SimpleXMLElement $sx)
    {
        if (isset(
$sx->config)) {
            foreach (
$sx->config->children() as $key) {
                
$pkg = static::getPackageObject($key['package']);
                if (
is_object($pkg)) {
                    
Config::save($pkg->getPackageHandle() . '::' $key->getName(), (string) $key);
                } else {
                    
Config::save($key->getName(), (string) $key);
                }
            }
        }
    }

    protected function 
importDatabaseConfigValues(SimpleXMLElement $sx)
    {
        if (isset(
$sx->databaseconfig)) {
            
$config Core::make('config/database');
            foreach (
$sx->databaseconfig->children() as $key) {
                
$pkg = static::getPackageObject($key['package']);
                if (
is_object($pkg)) {
                    
$config->save($pkg->getPackageHandle() . '::' $key->getName(), (string) $key);
                } else {
                    
$config->save($key->getName(), (string) $key);
                }
            }
        }
    }

    protected function 
importTaskPermissions(SimpleXMLElement $sx)
    {
        if (isset(
$sx->taskpermissions)) {
            foreach (
$sx->taskpermissions->taskpermission as $tp) {
                
$pkg = static::getPackageObject($tp['package']);
                
$tpa TaskPermission::addTask($tp['handle'], $tp['name'], $tp['description'], $pkg);
                if (isset(
$tp->access)) {
                    foreach (
$tp->access->children() as $ch) {
                        if (
$ch->getName() == 'group') {
                            
$g Group::getByName($ch['name']);
                            if (!
is_object($g)) {
                                
$g Group::add($ch['name'], $ch['description']);
                            }
                            
$tpa->addAccess($g);
                        }
                    }
                }
            }
        }
    }

    protected function 
importPermissionCategories(SimpleXMLElement $sx)
    {
        if (isset(
$sx->permissioncategories)) {
            foreach (
$sx->permissioncategories->category as $pkc) {
                
$pkg = static::getPackageObject($pkc['package']);
                
$category PermissionKeyCategory::getByHandle((string) $pkc['handle']);
                if (!
is_object($category)) {
                    
PermissionKeyCategory::add((string) $pkc['handle'], $pkg);
                }
            }
        }
    }

    protected function 
importWorkflowProgressCategories(SimpleXMLElement $sx)
    {
        if (isset(
$sx->workflowprogresscategories)) {
            foreach (
$sx->workflowprogresscategories->category as $wpc) {
                
$pkg = static::getPackageObject($wpc['package']);
                
WorkflowProgressCategory::add((string) $wpc['handle'], $pkg);
            }
        }
    }

    protected function 
importPermissions(SimpleXMLElement $sx)
    {
        if (isset(
$sx->permissionkeys)) {
            foreach (
$sx->permissionkeys->permissionkey as $pk) {
                if (
is_object(PermissionKey::getByHandle((string) $pk['handle']))) {
                    continue;
                }
                
$pkc PermissionKeyCategory::getByHandle((string) $pk['category']);
                
$c1 $pkc->getPermissionKeyClass();
                
$pkx call_user_func(array($c1'import'), $pk);
                
$assignments = array();

                if (isset(
$pk->access)) {
                    foreach (
$pk->access->children() as $ch) {
                        if (
$ch->getName() == 'group') {
                            
/*
                             * Legacy
                             */
                            
$g Group::getByName($ch['name']);
                            if (!
is_object($g)) {
                                
$g Group::add($g['name'], $g['description']);
                            }
                            
$pae GroupPermissionAccessEntity::getOrCreate($g);
                            
$assignments[] = $pae;
                        }

                        if (
$ch->getName() == 'entity') {
                            
$type PermissionAccessEntityType::getByHandle((string) $ch['type']);
                            
$class $type->getAccessEntityTypeClass();
                            if (
method_exists($class'configureFromImport')) {
                                
$pae $class::configureFromImport($ch);
                                
$assignments[] = $pae;
                            }
                        }
                    }
                }

                if (
count($assignments)) {
                    
$pa PermissionAccess::create($pkx);
                    foreach(
$assignments as $pae) {
                        
$pa->addListItem($pae);
                    }
                    
$pt $pkx->getPermissionAssignmentObject();
                    
$pt->assignPermissionAccess($pa);
                }
            }
        }
    }

    protected function 
importFeatures(SimpleXMLElement $sx)
    {
        if (isset(
$sx->features)) {
            foreach (
$sx->features->feature as $fea) {
                
$feHasCustomClass false;
                if (
$fea['has-custom-class']) {
                    
$feHasCustomClass true;
                }
                
$pkg = static::getPackageObject($fea['package']);
                
$fx Feature::add((string) $fea['handle'], (string) $fea['score'], $feHasCustomClass$pkg);
            }
        }
    }

    protected function 
importFeatureCategories(SimpleXMLElement $sx)
    {
        if (isset(
$sx->featurecategories)) {
            foreach (
$sx->featurecategories->featurecategory as $fea) {
                
$pkg = static::getPackageObject($fea['package']);
                
$fx FeatureCategory::add($fea['handle'], $pkg);
            }
        }
    }

    protected function 
importAttributeCategories(SimpleXMLElement $sx)
    {
        if (isset(
$sx->attributecategories)) {
            foreach (
$sx->attributecategories->category as $akc) {
                
$pkg = static::getPackageObject($akc['package']);
                
$akx AttributeKeyCategory::getByHandle($akc['handle']);
                if (!
is_object($akx)) {
                    
$akx AttributeKeyCategory::add($akc['handle'], $akc['allow-sets'], $pkg);
                }
            }
        }
    }

    protected function 
importAttributes(SimpleXMLElement $sx)
    {
        
$db Database::connection();
        if (isset(
$sx->attributekeys)) {
            foreach (
$sx->attributekeys->attributekey as $ak) {
                
$akc AttributeKeyCategory::getByHandle($ak['category']);
                
$akID $db->GetOne('select akID from AttributeKeys where akHandle = ? and akCategoryID = ?', array($ak['handle'], $akc->getAttributeKeyCategoryID()));
                if (!
$akID) {
                    
$txt Core::make('helper/text');
                    
$c1 overrideable_core_class('\Core\Attribute\Key\' . $txt->camelcase(
                            $akc->getAttributeKeyCategoryHandle()
                        ) . '
Key', DIRNAME_CLASSES . '/Attribute/Key/' . $txt->camelcase(
                            $akc->getAttributeKeyCategoryHandle()
                        ) . '
Key.php', (string) $akc->getPackageHandle()
                    );
                    call_user_func(array($c1, '
import'), $ak);
                }
            }
        }
    }

    protected function importAttributeSets(SimpleXMLElement $sx)
    {
        if (isset($sx->attributesets)) {
            foreach ($sx->attributesets->attributeset as $as) {
                $set = ConcreteCoreAttributeSet::getByHandle((string) $as['
handle']);
                $akc = AttributeKeyCategory::getByHandle($as['
category']);
                if (!is_object($set)) {
                    $pkg = static::getPackageObject($as['
package']);
                    $set = $akc->addSet((string) $as['
handle'], (string) $as['name'], $pkg, $as['locked']);
                }
                foreach ($as->children() as $ask) {
                    $ak = $akc->getAttributeKeyByHandle((string) $ask['
handle']);
                    if (is_object($ak)) {
                        $set->addKey($ak);
                    }
                }
            }
        }
    }

    protected function importGatheringDataSources(SimpleXMLElement $sx)
    {
        if (isset($sx->gatheringsources)) {
            foreach ($sx->gatheringsources->gatheringsource as $ags) {
                $pkg = static::getPackageObject($ags['
package']);
                $source = GatheringDataSource::add((string) $ags['
handle'], (string) $ags['name'], $pkg);
            }
        }
    }

    protected function importGatheringItemTemplateTypes(SimpleXMLElement $sx)
    {
        if (isset($sx->gatheringitemtemplatetypes)) {
            foreach ($sx->gatheringitemtemplatetypes->gatheringitemtemplatetype as $at) {
                $pkg = static::getPackageObject($at['
package']);
                GatheringItemTemplateType::add((string) $at['
handle'], $pkg);
            }
        }
    }

    protected function importGatheringItemTemplates(SimpleXMLElement $sx)
    {
        if (isset($sx->gatheringitemtemplates)) {
            foreach ($sx->gatheringitemtemplates->gatheringitemtemplate as $at) {
                $pkg = static::getPackageObject($at['
package']);
                $type = GatheringItemTemplateType::getByHandle((string) $at['
type']);
                $gatHasCustomClass = false;
                $gatForceDefault = false;
                $gatFixedSlotWidth = 0;
                $gatFixedSlotHeight = 0;
                if ($at['
has-custom-class']) {
                    $gatHasCustomClass = true;
                }
                if ($at['
force-default']) {
                    $gatForceDefault = true;
                }
                if ($at['
fixed-slot-width']) {
                    $gatFixedSlotWidth = (string) $at['
fixed-slot-width'];
                }
                if ($at['
fixed-slot-height']) {
                    $gatFixedSlotHeight = (string) $at['
fixed-slot-height'];
                }
                $template = GatheringItemTemplate::add(
                    $type,
                    (string) $at['
handle'],
                    (string) $at['
name'],
                    $gatFixedSlotWidth,
                    $gatFixedSlotHeight,
                    $gatHasCustomClass,
                    $gatForceDefault,
                    $pkg
                );
                foreach ($at->children() as $fe) {
                    $feo = Feature::getByHandle((string) $fe['
handle']);
                    if (is_object($feo)) {
                        $template->addGatheringItemTemplateFeature($feo);
                    }
                }
            }
        }
    }

    protected function importBlockTypeSets(SimpleXMLElement $sx)
    {
        if (isset($sx->blocktypesets)) {
            foreach ($sx->blocktypesets->blocktypeset as $bts) {
                $pkg = static::getPackageObject($bts['
package']);
                $set = BlockTypeSet::getByHandle((string) $bts['
handle']);
                if (!is_object($set)) {
                    $set = BlockTypeSet::add((string) $bts['
handle'], (string) $bts['name'], $pkg);
                }
                foreach ($bts->children() as $btk) {
                    $bt = BlockType::getByHandle((string) $btk['
handle']);
                    if (is_object($bt)) {
                        $set->addBlockType($bt);
                    }
                }
            }
        }
    }

    public function importFiles($fromPath, $computeThumbnails = true)
    {
        $fh = new Importer();

        if (!$computeThumbnails) {
            $fh->setRescanThumbnailsOnImport(false);
            $helper = Core::make('
helper/file');
        }
        $contents = Core::make('
helper/file')->getDirectoryContents($fromPath);
        foreach ($contents as $filename) {
            if (!is_dir($filename)) {
                $fv = $fh->import($fromPath . '
/' . $filename, $filename);
                if (!$computeThumbnails) {
                    $types = ConcreteCoreFileImageThumbnailTypeType::getVersionList();
                    foreach ($types as $type) {
                        // since we provide the thumbnails, we'
re going to get a list of thumbnail types
                        
// and loop through them, assigning them to all the files.
                        
$thumbnailPath $fromPath '/' $type->getHandle() . '/' $filename;
                        if (
file_exists($thumbnailPath)) {
                            
$fv->importThumbnail($type$thumbnailPath);
                        }
                    }
                }
            }
        }
    }
}
Онлайн: 1
Реклама