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

namespace ConcreteCoreUpdaterMigrationsMigrations;

use 
ConcreteCorePermissionAccessAccess;
use 
ConcreteCorePermissionAccessEntityGroupEntity;
use 
ConcreteCorePermissionAccessEntityType;
use 
ConcreteCorePermissionCategory;
use 
ConcreteCorePermissionDuration;
use 
ConcreteCorePermissionKeyKey;
use 
ConcreteCoreUserGroupGroup;
use 
DoctrineDBALMigrationsAbstractMigration;
use 
DoctrineDBALSchemaSchema;
use 
ConcreteCoreBlockBlockTypeBlockType;

class 
Version20150504000000 extends AbstractMigration
{
    private 
$updateSectionPlurals false;
    private 
$updateMultilingualTranslations false;

    public function 
getDescription()
    {
        return 
'5.7.4';
    }

    public function 
up(Schema $schema)
    {
        
ConcreteCoreDatabaseSchemaSchema::refreshCoreXMLSchema(array(
            
'ConversationPermissionAddMessageAccessList',
            
'ConversationSubscriptions',
            
'Conversations',

        ));

        
// Subscribe admin to conversations by default, if we have no subscriptions
        
$users Conversation::getDefaultSubscribedUsers();
        if (
count($users) == 0) {
            
$admin UserInfo::getByID(USER_SUPER_ID);
            if (
is_object($admin)) {
                
$users = array($admin);
                
Conversation::setDefaultSubscribedUsers($users);
            }
        }

        
$db Database::get();
        
$db->Execute('DROP TABLE IF EXISTS PageStatistics');

        
$pp $schema->getTable('PagePaths');
        if (!
$pp->hasColumn('ppGeneratedFromURLSlugs')) {
            
$db->Execute('alter table PagePaths add column ppGeneratedFromURLSlugs tinyint(1) unsigned not null default 0');
            
// we have to do this directly because the page path calls below will die otherwise.
        
}

        
$bt BlockType::getByHandle('page_list');
        if (
is_object($bt)) {
            
$bt->refresh();
        }

        
$bt BlockType::getByHandle('page_title');
        if (
is_object($bt)) {
            
$bt->refresh();
        }

        
$bt BlockType::getByHandle('form');
        if (
is_object($bt)) {
            
$bt->refresh();
        }

        
$c Page::getByPath('/dashboard/system/seo/urls');
        if (
is_object($c) && !$c->isError()) {
            
$c->update(array('cName' => 'URLs and Redirection'));
        }

        
$sp Page::getByPath('/dashboard/system/environment/entities');
        if (!
is_object($sp) || $sp->isError()) {
            
$sp SinglePage::add('/dashboard/system/environment/entities');
            
$sp->update(array('cName' => 'Database Entities'));
            
$sp->setAttribute('meta_keywords''database, entities, doctrine, orm');
        }

        
$pkx Category::getByHandle('multilingual_section');
        if (!
is_object($pkx)) {
            
$pkx Category::add('multilingual_section');
        }
        
$pkx->associateAccessEntityType(Type::getByHandle('group'));
        
$pkx->associateAccessEntityType(Type::getByHandle('user'));
        
$pkx->associateAccessEntityType(Type::getByHandle('group_combination'));

        
$db->Execute("alter table QueueMessages modify column body longtext not null");

        
$ms $schema->getTable('MultilingualSections');
        if (!
$ms->hasColumn('msNumPlurals')) {
            
$ms->addColumn('msNumPlurals''integer', array('notnull' => true'unsigned' => true'default' => 2));
            
$this->updateSectionPlurals true;
        }
        if (!
$ms->hasColumn('msPluralRule')) {
            
$ms->addColumn('msPluralRule''string', array('notnull' => true'length' => 400'default' => '(n != 1)'));
            
$this->updateSectionPlurals true;
        }
        if (!
$ms->hasColumn('msPluralCases')) {
            
$ms->addColumn('msPluralCases''string', array('notnull' => true'length' => 1000'default' => "one@1nother@0, 2~16, 100, 1000, 10000, 100000, 1000000, …"));
            
$this->updateSectionPlurals true;
        }
        
$mt $schema->getTable('MultilingualTranslations');
        if (!
$mt->hasColumn('msgidPlural')) {
            
$mt->addColumn('msgidPlural''text', array('notnull' => false));
            
$this->updateMultilingualTranslations true;
        }
        if (!
$mt->hasColumn('msgstrPlurals')) {
            
$mt->addColumn('msgstrPlurals''text', array('notnull' => false));
            
$this->updateMultilingualTranslations true;
        }

        
$cms $schema->getTable('ConversationMessages');
        if (!
$cms->hasColumn('cnvMessageAuthorName')) {
            
$cms->addColumn('cnvMessageAuthorName''string', array('notnull' => false'length' => 255));
        }
        if (!
$cms->hasColumn('cnvMessageAuthorEmail')) {
            
$cms->addColumn('cnvMessageAuthorEmail''string', array('notnull' => false'length' => 255));
        }
        if (!
$cms->hasColumn('cnvMessageAuthorWebsite')) {
            
$cms->addColumn('cnvMessageAuthorWebsite''string', array('notnull' => false'length' => 255));
        }

        
$this->updatePermissionDurationObjects();

        
$key Key::getByHandle('add_conversation_message');
        if (
is_object($key) && !$key->permissionKeyHasCustomClass()) {
            
$key->setPermissionKeyHasCustomClass(true);
        }

        
$this->installMaintenanceModePermission();
    }

    public function 
installMaintenanceModePermission()
    {
        
$pk Key::getByHandle('view_in_maintenance_mode');
        if (!
$pk instanceof Key) {
            
$pk Key::add('admin''view_in_maintenance_mode''View Site in Maintenance Mode''Controls whether a user can access the website when its under maintenance.'falsefalse);
            
$pa $pk->getPermissionAccessObject();
            if (!
is_object($pa)) {
                
$pa Access::create($pk);
            }
            
$adminGroup Group::getByID(ADMIN_GROUP_ID);
            if (
$adminGroup) {
                
$adminGroupEntity GroupEntity::getOrCreate($adminGroup);
                
$pa->addListItem($adminGroupEntity);
                
$pt $pk->getPermissionAssignmentObject();
                
$pt->assignPermissionAccess($pa);
            }
        }
    }

    protected function 
updatePermissionDurationObjects()
    {
        
$db Database::get();
        
$r $db->Execute('select pdID from PermissionDurationObjects order by pdID asc');
        while (
$row $r->FetchRow()) {
            
$pd Duration::getByID($row['pdID']);
            if (isset(
$pd->error)) {
                
// this is a legacy object. It was serialized from 5.7.3.1 and earlier and used to extend Object.
                // so we take the old pd* parameters and use them as the basis for the standard parameters.
                
$pd->setStartDate($pd->pdStartDate);
                
$pd->setEndDate($pd->pdEndDate);
                
$pd->setStartDateAllDay((bool) $pd->pdStartDateAllDay);
                
$pd->setEndDateAllDay((bool) $pd->pdEndDateAllDay);
                if (
$pd->pdRepeatPeriod == 'daily') {
                    
$pd->setRepeatPeriod(Duration::REPEAT_DAILY);
                } elseif (
$pd->pdRepeatPeriod == 'weekly') {
                    
$pd->setRepeatPeriod(Duration::REPEAT_WEEKLY);
                } elseif (
$pd->pdRepeatPeriod == 'monthly') {
                    
$pd->setRepeatPeriod(Duration::REPEAT_MONTHLY);
                } else {
                    
$pd->setRepeatPeriod(Duration::REPEAT_NONE);
                }
                if (
$pd->pdRepeatEveryNum) {
                    
$pd->setRepeatEveryNum($pd->pdRepeatEveryNum);
                }
                if (
$pd->pdRepeatPeriodWeeksDays) {
                    
$pd->setRepeatPeriodWeekDays($pd->pdRepeatPeriodWeeksDays);
                }
                if (
$pd->pdRepeatPeriodMonthsRepeatBy == 'week') {
                    
$pd->setRepeatMonthBy(Duration::MONTHLY_REPEAT_WEEKLY);
                } elseif (
$pd->pdRepeatPeriodMonthsRepeatBy == 'month') {
                    
$pd->setRepeatMonthBy(Duration::MONTHLY_REPEAT_MONTHLY);
                }
                if (
$pd->pdRepeatPeriodEnd) {
                    
$pd->setRepeatPeriodEnd($pd->pdRepeatPeriodEnd);
                }

                unset(
$pd->pdStartDate);
                unset(
$pd->pdEndDate);
                unset(
$pd->pdStartDateAllDay);
                unset(
$pd->pdEndDateAllDay);
                unset(
$pd->pdRepeatPeriod);
                unset(
$pd->pdRepeatEveryNum);
                unset(
$pd->pdRepeatPeriodWeeksDays);
                unset(
$pd->pdRepeatPeriodMonthsRepeatBy);
                unset(
$pd->pdRepeatPeriodEnd);
                unset(
$pd->error);
                
$pd->save();
            }
        }
    }

    public function 
postUp(Schema $schema)
    {
        
$db Database::get();
        if (
$this->updateSectionPlurals) {
            
$rs $db->Execute('select cID, msLanguage, msCountry from MultilingualSections');
            while (
$row $rs->FetchRow()) {
                
$locale $row['msLanguage'];
                if (
$row['msCountry']) {
                    
$locale .= '_' $row['msCountry'];
                }
                
$localeInfo GettextLanguagesLanguage::getById($locale);
                if (
$localeInfo) {
                    
$pluralCases = array();
                    foreach (
$localeInfo->categories as $category) {
                        
$pluralCases[] = $category->id.'@'.$category->examples;
                    }
                    
$db->update(
                        
'MultilingualSections',
                        array(
                            
'msNumPlurals' => count($localeInfo->categories),
                            
'msPluralRule' => $localeInfo->formula,
                            
'msPluralCases' => implode("n"$pluralCases),
                        ),
                        array(
'cID' => $row['cID'])
                    );
                }
            }
        }
        if (
$this->updateMultilingualTranslations) {
            
$db->Execute("UPDATE MultilingualTranslations SET comments = REPLACE(comments, ':', '\n') WHERE comments IS NOT NULL");
        }
    }

    public function 
down(Schema $schema)
    {
    }
}
Онлайн: 0
Реклама