Вход Регистрация
Файл: 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 : 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 $page, SimpleXMLElement $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);
                        }
                    }
                }
            }
        }
    }
}
Онлайн: 2
Реклама