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