ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 12837


Ignore:
Timestamp:
Sep 4, 2009, 6:19:14 PM (13 years ago)
Author:
fukamachi
Message:

db converter - did refactoring for abstraction

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE3/branches/fukamachi/db-convert-from-2.x/lib/task/openpneUpgradeFrom2Task.class.php

    r12809 r12837  
    1818  private $date                 = '0000-00-00 00:00:00';
    1919  private $mapCategoryIds       = array();
    20   private $mapCommunityAdmin    = array();
    21   private $mapFileIds           = array();
    2220  private $birthdayProfileId    = null;
    23   private $duplicateCommunities = array();
    2421  private $validatorFile        = null;
    2522  private $unreadDiaryIds       = array();
     
    8986    $this->connectTo2();
    9087    Doctrine::generateModelsFromDb($tmpdir, array('OpenPNE2'), array('generateBaseClasses' => false, 'baseClassName' => 'sfDoctrineRecord'));
     88    $this->connectTo3();
    9189
    9290    // generate OpenPNE3 models
     
    9997
    10098    // clear db records
    101     $tables = array('Blacklist', 'File', 'FileBin', 'CommunityCategory', 'Community', 'CommunityConfig', 'CommunityMember', 'Member', 'MemberConfig', 'MemberImage', 'Profile', 'ProfileTranslation', 'ProfileOption', 'ProfileOptionTranslation', 'MemberProfile', 'MemberRelationship', 'CommunityTopic', 'CommunityEvent', 'Diary', 'DiaryImage', 'DiaryComment', 'DiaryCommentImage', 'DiaryCommentUnread', 'Message', 'MessageSendList', 'DeletedMessage', 'MessageFile');
     99    $tables = array('Blacklist', /*'File', 'FileBin',*/ 'CommunityCategory', 'Community', 'CommunityConfig', 'CommunityMember', 'Member', 'MemberConfig', 'MemberImage', 'Profile', 'ProfileTranslation', 'ProfileOption', 'ProfileOptionTranslation', 'MemberProfile', 'MemberRelationship', 'CommunityTopic', 'CommunityEvent', 'Diary', 'DiaryImage', 'DiaryComment', 'DiaryCommentImage', 'DiaryCommentUnread', /*'Message', 'MessageSendList', 'DeletedMessage', 'MessageFile'*/);
    102100
    103101    foreach ($tables as $table)
    104102    {
    105       $this->clearDbTable($table);
     103      Doctrine::getTable($table)->createQuery()->delete()->execute();
    106104    }
    107105
     
    111109    print "converting Blacklist : ".memory_get_usage()."\n";
    112110    $this->convertBlacklist();
    113     print "converting File and FileBin : ".memory_get_usage()."\n";
    114     $this->convertFileAndFileBin();
     111    //print "converting File and FileBin : ".memory_get_usage()."\n";
     112    //$this->convertFileAndFileBin();
    115113    print "converting CommunityCategory : ".memory_get_usage()."\n";
    116114    $this->convertCommunityCategory();
     
    129127    print "converting ProfileOption : ".memory_get_usage()."\n";
    130128    $this->convertProfileOption();
    131     print "converting MemberProfile : ".memory_get_usage()."\n";
    132     $this->convertMemberProfile();
     129    //print "converting MemberProfile : ".memory_get_usage()."\n";
     130    //$this->convertMemberProfile();
    133131    print "converting MemberRelationship : ".memory_get_usage()."\n";
    134132    $this->convertMemberRelationship();
     
    141139    print "converting DiaryCommentAndImage : ".memory_get_usage()."\n";
    142140    $this->convertDiaryCommentAndImage();
    143     print "converting MessageTables : ".memory_get_usage()."\n";
    144     $this->convertMessageTables();
     141    //print "converting MessageTables : ".memory_get_usage()."\n";
     142    //$this->convertMessageTables();
    145143
    146144    // delete models' cache
     
    148146  }
    149147
     148  /**
     149   * Convert Methods
     150   */
    150151  protected function convertAdminUser()
    151152  {
     
    232233  protected function _createFile($param = array())
    233234  {
    234     $dupNamedFile = Doctrine::getTable('File')->createQuery()
    235       ->select('id')
    236       ->where('name = ?', $param['name'])
    237       ->fetchOne();
    238 
    239235    // NOTICE: ignore if the file with same name had saved
    240     if ($dupNamedFile)
    241     {
    242       $dupNamedFile->free();
    243 
     236    if ($this->getFileByName($param['name']))
     237    {
    244238      return;
    245239    }
    246240
    247     $file = new TempFile();
    248     $file->setId($param['id']);
    249     $file->setName($param['name']);
    250     if (array_key_exists('original_filename', $param))
    251     {
    252       $file->setOriginalFilename($param['original_filename']);
    253     }
    254     $file->setCreatedAt($param['date']);
    255     $file->setUpdatedAt($param['date']);
    256 
    257     $fileBin = new TempFileBin();
    258     $fileBin->setFileId($param['id']);
    259     $fileBin->setBin($param['bin']);
    260     $fileBin->setCreatedAt($param['date']);
    261     $fileBin->setUpdatedAt($param['date']);
     241    $paramFile = $param;
     242    unset($paramFile['bin']);
     243    $file = $this->insertInto('File', $paramFile, true);
     244
     245    unset($param['name']);
     246    unset($param['original_name']);
     247    $fileBin = $this->insertInto('FileBin', $param, true);
    262248
    263249    $file->setFileBin($fileBin);
     
    272258
    273259    $file->save();
    274     $this->mapFileIds[$param['name']] = $param['id'];
    275260
    276261    $file->free();
     
    289274    foreach ($cCommuCategoryParents as $cCategoryParent)
    290275    {
    291       $categoryRoot = new TempCommunityCategory();
    292       $categoryRoot->setTreeKey($cCategoryParent->getCCommuCategoryParentId());
    293       $categoryRoot->setName($cCategoryParent->getName());
    294       $categoryRoot->setSortOrder($cCategoryParent->getSortOrder());
    295       $categoryRoot->save();
     276      $categoryRoot = $this->insertInto('CommunityCategory', array(
     277        'tree_key' => $cCategoryParent->getCCommuCategoryParentId(),
     278        'name'     => $cCategoryParent->getName(),
     279        'sort_order' => $cCategoryParent->getSortOrder(),
     280      ), true);
    296281
    297282      $treeCategory->createRoot($categoryRoot);
     
    321306      }
    322307
     308      $categoryRoot->free();
    323309      $cCategoryParent->free();
    324310    }
     
    327313  protected function convertCommunityAndCommunityConfig()
    328314  {
    329     $this->connectTo2();
    330     $cCommus = Doctrine::getTable('CCommu')->createQuery()
    331       ->orderBy('c_commu_id')
    332       ->execute();
    333     $this->connectTo3();
    334 
    335     foreach ($cCommus as $cCommu)
    336     {
    337       $community = new TempCommunity();
    338       $community->setId($cCommu->getCCommuId());
    339 
    340       $community->setName($cCommu->getName());
    341       // NOTICE: add index if already created same name community
    342       if ($this->_isDuplicateCommunityName($cCommu->getName()))
    343       {
    344         $this->_addIndexToCommunity($community);
    345       }
    346 
    347       if ($fileId = $this->getFileIdByName($cCommu->getImageFilename()))
    348       {
    349         $community->setFileId($fileId);
    350       }
    351       if (
    352         array_key_exists($cCommu->getCCommuCategoryId(), $this->mapCategoryIds)
    353         && !$this->mapCategoryIds[$cCommu->getCCommuCategoryId()]
    354       )
    355       {
    356         $community->setCommunityCategoryId($this->mapCategoryIds[$cCommu->getCCommuCategoryId()]);
    357       }
    358       $community->setCreatedAt($cCommu->getRDate());
    359       $community->setUpdatedAt($cCommu->getUDatetime());
    360 
    361       $community->save();
    362 
    363       if (method_exists($cCommu, 'getIsOpen')){
    364         $publicFlag = new TempCommunityConfig();
    365         $publicFlag->setCommunityId($community->getId());
    366         $publicFlag->setName('public_flag');
    367         $publicFlag->setValue($cCommu->getIsOpen());
    368         $publicFlag->setCreatedAt($this->date);
    369         $publicFlag->setUpdatedAt($this->date);
    370         $publicFlag->save();
    371       }
    372 
    373       if (method_exists($cCommu, 'getIsTopic'))
    374       {
    375         $topicAuthority = new TempCommunityConfig();
    376         $topicAuthority->setCommunityId($community->getId());
    377         $topicAuthority->setName('topic_authority');
    378         $topicAuthority->setValue($cCommu->getIsTopic());
    379         $topicAuthority->setCreatedAt($this->date);
    380         $topicAuthority->setUpdatedAt($this->date);
    381         $topicAuthority->save();
    382       }
    383 
    384       $description = new TempCommunityConfig();
    385       $description->setCommunityId($community->getId());
    386       $description->setName('description');
    387       $description->setValue($cCommu->getInfo());
    388       $description->setCreatedAt($this->date);
    389       $description->setUpdatedAt($this->date);
    390       $description->save();
    391 
    392       $this->mapCommunityAdmin[$cCommu->getCCommuId()] = $cCommu->getCMemberIdAdmin();
    393 
    394       $cCommu->free();
    395       $community->free();
    396     }
    397   }
    398 
    399   protected function _isDuplicateCommunityName($name)
    400   {
    401     if (array_key_exists($name, $this->duplicateCommunities))
    402     {
    403       return true;
    404     }
    405 
    406     return (boolean) Doctrine::getTable('Community')->createQuery()
    407       ->where('name = ?', $name)
    408       ->fetchOne();
    409   }
    410 
    411   protected function _addIndexToCommunity($community)
    412   {
    413     $name = $community->getName();
    414     $index = array_key_exists($name, $this->duplicateCommunities) ? $this->duplicateCommunities[$name] : 0;
    415     if ($index)
    416     {
    417       $community->setName(sprintf('%s (%d)', $name, ++$index));
    418     }
    419     else
    420     {
    421       $dupCommunity = Doctrine::getTable('Community')->createQuery()
    422         ->where('name = ?', $name)
    423         ->orderBy('id desc')
    424         ->fetchOne();
    425       if ($dupCommunity)
    426       {
    427         $dupCommunity->setName(sprintf('%s (%d)', $name, ++$index));
    428         $community->setName(sprintf('%s (%d)', $name, ++$index));
    429       }
    430     }
    431     $this->duplicateCommunities[$name] = $index;
     315    $this->connectTo3();
     316
     317    $offset = 0;
     318    while ($cCommus = $this->getModelsIterator('CCommu', 100, $offset, 'c_commu_id'))
     319    {
     320      foreach ($cCommus as $cCommu)
     321      {
     322        // NOTICE: ignore if already created same name community
     323        if ($this->isExist('Community', array('name' => $cCommu->getName())))
     324        {
     325          $cCommu->free();
     326          continue;
     327        }
     328
     329        $param = array(
     330            'id'         => $cCommu->getCCommuId(),
     331            'name'       => $cCommu->getName(),
     332            'created_at' => $cCommu->getRDate(),
     333            'updated_at' => $cCommu->getUDatetime(),
     334            );
     335        if ($file = $this->getFileByName($cCommu->getImageFilename()))
     336        {
     337          $param['file_id'] = $file->getId();
     338          $file->free();
     339        }
     340        if (array_key_exists($cCommu->getCCommuCategoryId(), $this->mapCategoryIds))
     341        {
     342          $param['community_category_id'] = $this->mapCategoryIds[$cCommu->getCCommuCategoryId()];
     343        }
     344        $this->insertInto('Community', $param);
     345
     346        // CommunityConfigs
     347        $param = array(
     348            'community_id' => $cCommu->getCCommuId(),
     349            'created_at'   => $this->date,
     350            'updated_at'   => $this->date,
     351            );
     352
     353        $configs = array();
     354        $configs['description'] = $cCommu->getInfo();
     355        if (method_exists($cCommu, 'getIsOpen'))
     356        {
     357          $configs['public_flag'] = $cCommu->getIsOpen();
     358        }
     359        if (method_exists($cCommu, 'getIsTopic'))
     360        {
     361          $configs['topic_authority'] = $cCommu->getIsTopic();
     362        }
     363
     364        $this->createConfigs('CommunityConfig', $param, $configs);
     365
     366        $cCommu->free();
     367      }
     368      $offset += 100;
     369    }
    432370  }
    433371
    434372  protected function convertCommunityMember()
    435373  {
    436     $this->connectTo2();
    437     $cCommuMembers = Doctrine::getTable('CCommuMember')->findAll();
    438     $this->connectTo3();
    439 
    440     foreach ($cCommuMembers as $cCommuMember)
    441     {
    442       $param = array(
    443         'id'           => $cCommuMember->getCCommuMemberId(),
    444         'community_id' => $cCommuMember->getCCommuId(),
    445         'member_id'    => $cCommuMember->getCMemberId(),
    446         'created_at'   => $cCommuMember->getRDatetime(),
    447         'updated_at'   => $cCommuMember->getRDatetime(),
    448       );
    449       if ($cCommuMember->getCCommuMemberId() === $this->mapCommunityAdmin[$cCommuMember->getCCommuId()])
    450       {
    451         $param['position'] = 'admin';
    452       }
    453       $this->insertInto('CommunityMember', $param);
    454 
    455       $cCommuMember->free();
     374    $this->connectTo3();
     375
     376    $offset = 0;
     377    while ($cCommuMembers = $this->getModelsIterator('CCommuMember', 100, $offset))
     378    {
     379      foreach ($cCommuMembers as $cCommuMember)
     380      {
     381        // NOTICE: ignore if the community this member joins is not exist
     382        if (!$this->isExist('Community', array('id' => $cCommuMember->getCCommuId())))
     383        {
     384          $cCommuMember->free();
     385          continue;
     386        }
     387
     388        $param = array(
     389            'id'           => $cCommuMember->getCCommuMemberId(),
     390            'community_id' => $cCommuMember->getCCommuId(),
     391            'member_id'    => $cCommuMember->getCMemberId(),
     392            'created_at'   => $cCommuMember->getRDatetime(),
     393            'updated_at'   => $cCommuMember->getRDatetime(),
     394            );
     395        $this->connectTo2();
     396        if (
     397            $this->isExist('CCommu', array(
     398                'c_commu_id' => $cCommuMember->getCCommuId(),
     399                'c_member_id_admin' => $cCommuMember->getCCommuMemberId()
     400                ))
     401           )
     402        {
     403          $param['position'] = 'admin';
     404        }
     405        $this->connectTo3();
     406        $this->insertInto('CommunityMember', $param);
     407
     408        $cCommuMember->free();
     409      }
     410      $offset += 100;
    456411    }
    457412  }
     
    459414  protected function convertMember()
    460415  {
    461     $this->connectTo2();
    462     $cMembers = Doctrine::getTable('CMember')->createQuery()
    463       ->orderBy('c_member_id')
    464       ->execute();
    465     $this->connectTo3();
    466 
    467     foreach ($cMembers as $cMember)
    468     {
    469       $param = array(
    470         'id'         => $cMember->getCMemberId(),
    471         'name'       => $cMember->getNickname(),
    472         'created_at' => $cMember->getRDate(),
    473         'updated_at' => $cMember->getUDatetime(),
    474         'is_active'  => !$cMember->getIsLoginRejected(),
    475       );
    476       if ($cMember->getCMemberIdInvite() && Doctrine::getTable('Member')->find($cMember->getCMemberIdInvite()))
    477       {
    478         $param['invite_member_id'] = $cMember->getCMemberIdInvite();
    479       }
    480 
    481       $this->insertInto('Member', $param);
    482       $cMember->free();
     416    $this->connectTo3();
     417
     418    $offset = 0;
     419    while ($cMembers = $this->getModelsIterator('CMember', 100, $offset, 'c_member_id'))
     420    {
     421      foreach ($cMembers as $cMember)
     422      {
     423        $param = array(
     424            'id'         => $cMember->getCMemberId(),
     425            'name'       => $cMember->getNickname(),
     426            'created_at' => $cMember->getRDate(),
     427            'updated_at' => $cMember->getUDatetime(),
     428            'is_active'  => !$cMember->getIsLoginRejected(),
     429            );
     430        if ($cMember->getCMemberIdInvite() && Doctrine::getTable('Member')->find($cMember->getCMemberIdInvite()))
     431        {
     432          $param['invite_member_id'] = $cMember->getCMemberIdInvite();
     433        }
     434
     435        $this->insertInto('Member', $param);
     436        $cMember->free();
     437      }
     438      $offset += 100;
    483439    }
    484440  }
     
    486442  protected function convertMemberConfig()
    487443  {
    488     $this->connectTo2();
    489     $cMemberSecures = Doctrine::getTable('CMemberSecure')->findAll();
    490     $this->connectTo3();
    491 
    492     foreach ($cMemberSecures as $cMemberSecure)
    493     {
    494       // NOTICE: ignore if the member isn't exist
    495       if (!($cMember = Doctrine::getTable('CMember')->find($cMemberSecure->getCMemberId())))
    496       {
    497         continue;
    498       }
    499 
    500       // common parameters
    501       $param = array(
    502         'member_id' => $cMemberSecure->getCMemberid(),
    503         'created_at' => $this->date,
    504         'updated_at' => $this->date,
    505       );
    506 
    507       // MemberConfig records
    508       $configs = array(
    509         'pc_address'     => $this->decrypt($cMemberSecure->getPcAddress()),
    510         'password'       => $cMemberSecure->getHashedPassword(),
    511         'mobile_address' => $cMemberSecure->getKtaiAddress(),
    512         'mobile_uid'     => $cMemberSecure->getEasyAccessId(),
    513         'lastLogin'      => $cMember->getAccessDate(),
    514       );
    515 
    516       $this->_createMemberConfigs($param, $configs);
    517 
    518       $cMemberSecure->free();
    519       $cMember->free();
    520     }
    521   }
    522 
    523   protected function _createMemberConfigs($param, $configs)
    524   {
    525     foreach ($configs as $name => $value)
    526     {
    527       if (!$value)
    528       {
    529         continue;
    530       }
    531 
    532       $this->insertInto('MemberConfig', array_merge($param, array(
    533         'name'  => $name,
    534         'value' => $value,
    535       )));
     444    $this->connectTo3();
     445
     446    $offset = 0;
     447    while ($cMemberSecures = $this->getModelsIterator('CMemberSecure', 100, $offset))
     448    {
     449      foreach ($cMemberSecures as $cMemberSecure)
     450      {
     451        // NOTICE: ignore if the member isn't exist
     452        $this->connectTo2();
     453        if (!$this->isExist('CMember', array('c_member_id' => $cMemberSecure->getCMemberId())))
     454        {
     455          $cMemberSecure->free();
     456          continue;
     457        }
     458        $this->connectTo3();
     459
     460        // common parameters
     461        $param = array(
     462            'member_id' => $cMemberSecure->getCMemberId(),
     463            'created_at' => $this->date,
     464            'updated_at' => $this->date,
     465            );
     466
     467        // MemberConfig records
     468        $configs = array(
     469            'pc_address'     => $this->decrypt($cMemberSecure->getPcAddress()),
     470            'password'       => $cMemberSecure->getHashedPassword(),
     471            'mobile_address' => $cMemberSecure->getKtaiAddress(),
     472            'mobile_uid'     => $cMemberSecure->getEasyAccessId(),
     473            'lastLogin'      => $cMember->getAccessDate(),
     474            );
     475
     476        $this->createConfigs('MemberConfig', $param, $configs);
     477
     478        $cMemberSecure->free();
     479        $cMember->free();
     480      }
     481      $offset += 100;
    536482    }
    537483  }
     
    549495        {
    550496          $getImageFilename = 'getImageFilename_'.$i;
    551           $this->_createMemberImage(array(
    552             'member_id'      => $cMember->getCMemberId(),
    553             'image_filename' => $cMember->$getImageFilename(),
    554             'is_primary'     => $cMember->getImageFilename() === $cMember->$getImageFilename(),
    555           ));
     497
     498          if ($file = $this->getFileByName($cMember->$getImageFilename()))
     499          {
     500            $this->insertInto('MemberImage', array(
     501              'member_id'      => $cMember->getCMemberId(),
     502              'file_id'        => $file->getId(),
     503              'image_filename' => $cMember->$getImageFilename(),
     504              'is_primary'     => $cMember->getImageFilename() === $cMember->$getImageFilename(),
     505              'created_at'     => $this->date,
     506              'updated_at'     => $this->date,
     507            ));
     508            $file->free();
     509          }
    556510        }
    557511
     
    562516  }
    563517
    564   protected function _createMemberImage($param = array())
    565   {
    566     if (!($memberImage = $this->getFile('MemberImage', $param['image_filename'])))
    567     {
    568       return;
    569     }
    570 
    571     $this->update($memberImage, $param);
    572   }
    573 
    574518  protected function convertProfile()
    575519  {
    576     $this->connectTo2();
    577     $cProfiles = Doctrine::getTable('CProfile')->findAll();
    578     $this->connectTo3();
    579 
    580     foreach ($cProfiles as $cProfile)
    581     {
    582       $this->insertInto('Profile', array(
    583         'id'                  => $cProfile->getCProfileId(),
    584         'name'                => $cProfile->getName(),
    585         'is_required'         => $cProfile->getIsRequired(),
    586         'is_edit_public_flag' => $cProfile->getPublicFlagEdit(),
    587         'default_public_flag' => $cProfile->getPublicFlagDefault(),
    588         'form_type'           => $cProfile->getFormType(),
    589         'value_type'          => $cProfile->getValType(),
    590         'is_disp_regist'      => $cProfile->getDispRegist(),
    591         'is_disp_config'      => $cProfile->getDispConfig(),
    592         'is_disp_search'      => $cProfile->getDispSearch(),
    593         'value_regexp'        => $cProfile->getValRegexp(),
    594         'value_min'           => $cProfile->getValMin(),
    595         'value_max'           => $cProfile->getValMax(),
    596         'sort_order'          => $cProfile->getSortOrder(),
    597         'created_at'          => $this->date,
    598         'updated_at'          => $this->date,
    599       ));
    600 
    601       $profileTranslation = Doctrine::getTable('Profile')->createQuery('p')
    602         ->leftJoin('p.Translation t WITH t.lang = "ja_JP"')
    603         ->where('p.id = ?', $cProfile->getCProfileId())
    604         ->fetchOne();
    605 
    606       $param = array(
    607         'caption' => $cProfile->getCaption(),
    608         'lang'    => 'ja_JP',
    609       );
    610       $param['info'] = $cProfile->getInfo();
    611 
    612       $this->update($profileTranslation, $param);
    613 
    614       $cProfile->free();
    615       $profileTranslation->free();
     520    $this->connectTo3();
     521
     522    $offset = 0;
     523    while ($cProfiles = $this->getModelsIterator('CProfile', 100, $offset))
     524    {
     525      foreach ($cProfiles as $cProfile)
     526      {
     527        $this->insertInto('Profile', array(
     528              'id'                  => $cProfile->getCProfileId(),
     529              'name'                => $cProfile->getName(),
     530              'is_required'         => $cProfile->getIsRequired(),
     531              'is_edit_public_flag' => $cProfile->getPublicFlagEdit(),
     532              'default_public_flag' => $cProfile->getPublicFlagDefault(),
     533              'form_type'           => $cProfile->getFormType(),
     534              'value_type'          => $cProfile->getValType(),
     535              'is_disp_regist'      => $cProfile->getDispRegist(),
     536              'is_disp_config'      => $cProfile->getDispConfig(),
     537              'is_disp_search'      => $cProfile->getDispSearch(),
     538              'value_regexp'        => $cProfile->getValRegexp(),
     539              'value_min'           => $cProfile->getValMin(),
     540              'value_max'           => $cProfile->getValMax(),
     541              'sort_order'          => $cProfile->getSortOrder(),
     542              'created_at'          => $this->date,
     543              'updated_at'          => $this->date,
     544              ));
     545
     546        $profileTranslation = Doctrine::getTable('Profile')->createQuery('p')
     547          ->leftJoin('p.Translation t WITH t.lang = "ja_JP"')
     548          ->where('p.id = ?', $cProfile->getCProfileId())
     549          ->fetchOne();
     550
     551        $param = array(
     552            'caption' => $cProfile->getCaption(),
     553            'lang'    => 'ja_JP',
     554            );
     555        $param['info'] = $cProfile->getInfo();
     556
     557        $this->update($profileTranslation, $param);
     558
     559        $cProfile->free();
     560        $profileTranslation->free();
     561      }
     562      $offset += 100;
    616563    }
    617564
     
    652599    $this->connectTo3();
    653600
    654     foreach ($cProfileOptions as $cProfileOption)
    655     {
    656       $this->_createProfileOption(array(
    657         'id'         => $cProfileOption->getCProfileOptionId(),
    658         'profile_id' => $cProfileOption->getCProfileId(),
    659         'sort_order' => $cProfileOption->getSortOrder(),
    660       ), $cProfileOption->getCProfileOptionId());
    661 
    662       $cProfileOption->free();
     601    $offset = 0;
     602    while ($cProfileOptions = $this->getModelsIterator('CProfileOption', 100, $offset))
     603    {
     604      foreach ($cProfileOptions as $cProfileOption)
     605      {
     606        $this->_createProfileOption(array(
     607              'id'         => $cProfileOption->getCProfileOptionId(),
     608              'profile_id' => $cProfileOption->getCProfileId(),
     609              'sort_order' => $cProfileOption->getSortOrder(),
     610              ), $cProfileOption->getValue());
     611        $cProfileOption->free();
     612      }
     613      $offset += 100;
    663614    }
    664615
    665616    $this->_createProfileOption(array(
    666       'profile_id' => $this->birthdayProfileId,
    667       'sort_order' => 0,
    668     ));
    669   }
    670 
    671   protected function _createProfileOption($param = array(), $value = null)
    672   {
    673     $param['created_at'] = $this->date;
    674     $param['updated_at'] = $this->date;
    675 
    676     $this->insertInto('ProfileOption', $param);
    677 
    678     if (!is_null($value))
     617          'profile_id' => $this->birthdayProfileId,
     618          'sort_order' => 0,
     619          ));
     620  }
     621
     622  protected function _createProfileOption($param = array(), $translation = null)
     623  {
     624    $profileOption = $this->insertInto('ProfileOption', $param, true);
     625
     626    if (!is_null($translation))
    679627    {
    680628      $profileOptionTranslation = Doctrine::getTable('ProfileOption')->createQuery('p')
    681629        ->leftJoin('p.Translation t WITH t.lang = "ja_JP"')
    682         ->where('p.id = ?', $param['id'])
     630        ->where('p.id = ?', $profileOption->getId())
    683631        ->fetchOne();
    684632
    685       $this->update($profileOptionTranslation, array(
    686         'value' => $value,
    687         'lang'  => 'ja_JP',
    688       ));
    689     }
     633      $profileOptionTranslation->setValue($translation);
     634      $profileOptionTranslation->save();
     635
     636      $profileOptionTranslation->free();
     637    }
     638
     639    $profileOption->free();
    690640  }
    691641
     
    701651      {
    702652        // NOTICE: ignore if the member isn't exist
    703         if (!$this->isExistMember($cMemberProfile->getCMemberId()))
     653        if (!$this->isExist('Member', array('id' => $cMemberProfile->getCMemberId())))
    704654        {
    705655          $cMemberProfile->free();
     
    791741  protected function convertMemberRelationship()
    792742  {
    793     $this->connectTo2();
    794     $cFriends = Doctrine::getTable('CFriend')->findAll();
    795     $cFriendConfirms = Doctrine::getTable('CFriendConfirm')->findAll();
    796     $cAccessBlocks = Doctrine::getTable('CAccessBlock')->findAll();
    797     $this->connectTo3();
    798 
    799     foreach ($cFriends as $cFriend)
    800     {
    801       // NOTICE: ignore if member_id_to is equal to member_id_from
    802       if ($cFriend->getCMemberIdTo() === $cFriend->getCMemberIdFrom())
    803       {
    804         continue;
    805       }
    806 
    807       $this->_updateMemberRelationship(array(
    808         'member_id_from' => $cFriend->getCMemberIdFrom(),
    809         'member_id_to'   => $cFriend->getCMemberIdTo(),
    810         'datetime'       => $cFriend->getRDatetime(),
    811         'is_friend'      => true,
    812       ));
    813       $cFriend->free();
    814     }
    815 
    816     foreach ($cFriendConfirms as $cFriendConfirm)
    817     {
    818       // NOTICE: ignore if member_id_to is equal to member_id_from
    819       if ($cFriendConfirm->getCMemberIdTo() === $cFriendConfirm->getCMemberIdFrom())
    820       {
    821         continue;
    822       }
    823 
    824       $this->_updateMemberRelationship(array(
    825         'member_id_from' => $cFriendConfirm->getCMemberIdFrom(),
    826         'member_id_to'   => $cFriendConfirm->getCMemberIdTo(),
    827         'datetime'       => $cFriendConfirm->getRDatetime(),
    828         'is_friend_pre'  => true,
    829       ));
    830       $cFriendConfirm->free();
    831     }
    832 
    833     foreach ($cAccessBlocks as $cAccessBlock)
    834     {
    835       // NOTICE: ignore if member_id is equal to member_id_block
    836       if ($cAccessBlock->getCMemberId() === $cAccessBlock->getCMemberIdBlock())
    837       {
    838         continue;
    839       }
    840 
    841       $this->_updateMemberRelationship(array(
    842         'member_id_from'  => $cAccessBlock->getCMemberId(),
    843         'member_id_to'    => $cAccessBlock->getCMemberIdBlock(),
    844         'datetime'        => $cAccessBlock->getRDatetime(),
    845         'is_access_block' => true,
    846       ));
    847       $cAccessBlock->free();
     743    $this->connectTo3();
     744
     745    $offset = 0;
     746    while ($cFriends = $this->getModelsIterator('CFriend', 100, $offset))
     747    {
     748      foreach ($cFriends as $cFriend)
     749      {
     750        $this->_updateMemberRelationship(array(
     751              'member_id_from' => $cFriend->getCMemberIdFrom(),
     752              'member_id_to'   => $cFriend->getCMemberIdTo(),
     753              'datetime'       => $cFriend->getRDatetime(),
     754              'is_friend'      => true,
     755              ));
     756        $cFriend->free();
     757      }
     758      $offset += 100;
     759    }
     760
     761    $offset = 0;
     762    while ($cFriendConfirms = $this->getModelsIterator('CFriendConfirm', 100, $offset))
     763    {
     764      foreach ($cFriendConfirms as $cFriendConfirm)
     765      {
     766        $this->_updateMemberRelationship(array(
     767              'member_id_from' => $cFriendConfirm->getCMemberIdFrom(),
     768              'member_id_to'   => $cFriendConfirm->getCMemberIdTo(),
     769              'datetime'       => $cFriendConfirm->getRDatetime(),
     770              'is_friend_pre'  => true,
     771              ));
     772        $cFriendConfirm->free();
     773      }
     774      $offset += 100;
     775    }
     776
     777    $offset = 0;
     778    while ($cAccessBlocks = $this->getModelsIterator('CAccessBlock', 100, $offset))
     779    {
     780      foreach ($cAccessBlocks as $cAccessBlock)
     781      {
     782        $this->_updateMemberRelationship(array(
     783              'member_id_from'  => $cAccessBlock->getCMemberId(),
     784              'member_id_to'    => $cAccessBlock->getCMemberIdBlock(),
     785              'datetime'        => $cAccessBlock->getRDatetime(),
     786              'is_access_block' => true,
     787              ));
     788        $cAccessBlock->free();
     789      }
     790      $offset += 100;
    848791    }
    849792  }
     
    851794  protected function _updateMemberRelationship($param = array())
    852795  {
    853     $q = Doctrine::getTable('MemberRelationship')->createQuery()
    854       ->where('member_id_from = ?', $param['member_id_from'])
    855       ->andWhere('member_id_to = ?', $param['member_id_to']);
    856 
    857     if (!($memberRelationship = $q->fetchOne()))
    858     {
    859       $this->insertInto('MemberRelationship', $param);
    860     }
    861     else
     796    // NOTICE: ignore if member_id_from is equal to member_id_to
     797    if ($param['member_id_from'] === $param['member_id_to'])
     798    {
     799      return;
     800    }
     801
     802    $memberIds = array(
     803      'member_id_from' => $param['member_id_from'],
     804      'member_id_to'   => $param['member_id_to'],
     805    );
     806    if ($memberRelationship = $this->selectOne('MemberRelationship', $memberIds))
    862807    {
    863808      unset($param['member_id_from']);
    864809      unset($param['member_id_to']);
    865810      $this->update($memberRelationship, $param);
     811      $memberRelationship->free();
     812    }
     813    else
     814    {
     815      $this->insertInto('MemberRelationship', $param);
    866816    }
    867817  }
     
    874824      ->execute();
    875825    $this->connectTo3();
    876     $this->clearDbTable('CommunityTopic');
    877826
    878827    foreach ($cCommuTopics as $cCommuTopic)
     
    1009958        $this->connectTo2();
    1010959        // NOTICE: ignore if the member isn't exist
    1011         if (!($cMember = Doctrine::getTable('CMember')->find($cDiary->getCMemberId())))
    1012         {
     960        if (!$this->isExist('CMember', array('c_member_id' => $cDiary->getCMemberId())))
     961        {
     962          $cDiary->free();
    1013963          continue;
    1014964        }
    1015         $cMember->free();
    1016965        $this->connectTo3();
    1017966
    1018         $diary = new TempDiary();
    1019         $diary->setId($cDiary->getCDiaryId());
    1020         $diary->setMemberId($cDiary->getCMemberId());
    1021         $diary->setTitle($cDiary->getSubject());
    1022         $diary->setBody($cDiary->getBody());
    1023         $diary->setPublicFlag($cDiary->getPublicFlag());
    1024         $diary->setCreatedAt($cDiary->getRDatetime());
    1025         $diary->setUpdatedAt($cDiary->getUDatetime());
     967        $diary = $this->insertInto('Diary', array(
     968          'id'          => $cDiary->getCDiaryId(),
     969          'member_id'   => $cDiary->getCMemberId(),
     970          'title'       => $cDiary->getSubject(),
     971          'body'        => $cDiary->getBody(),
     972          'public_flag' => $cDiary->getPublicFlag(),
     973          'created_at'  => $cDiary->getPublicFlag(),
     974          'updated_at'  => $cDiary->getUDatetime(),
     975        ), true);
    1026976
    1027977        for ($i = 1; $i <= 3; ++$i)
    1028978        {
    1029979          $getImageFilename = 'getImageFilename_'.$i;
    1030           if ($diaryImage = $this->getFile('DiaryImage', $cDiary->$getImageFilename(), false))
     980          if ($file = $this->getFileByName($cDiary->$getImageFilename()))
    1031981          {
    1032982            $diary->setHasImages(true);
    1033             $diaryImage->setDiaryId($cDiary->getCDiaryId());
    1034             $diaryImage->setNumber($i);
    1035             $diaryImage->save();
    1036             $diaryImage->free();
     983            $this->insertInto('DiaryImage', array(
     984              'diary_id' => $diary->getId(),
     985              'number'   => $i,
     986              'file_id'  => $file->getId(),
     987            ));
     988            $file->free();
    1037989          }
    1038990        }
     
    10741026        }
    10751027
    1076         $this->insertTo('DiaryComment', array(
     1028        $this->insertInto('DiaryComment', array(
    10771029          'id'         => $cDiaryComment->getCDiaryCommentId(),
    10781030          'diary_id'   => $cDiaryComment->getCDiaryId(),
     
    10871039        {
    10881040          $getImageFilename = 'getImageFilename_'.$i;
    1089           if ($diaryCommentImage = $this->getFile('DiaryCommentImage', $cDiaryComment->$getImageFilename(), false))
     1041          if ($file = $this->getFileByName($cDiaryComment->$getImageFilename()))
    10901042          {
    1091             $diaryCommentImage->setDiaryCommentId($cDiaryComment->getCDiaryCommentId());
    1092             $diaryCommentImage->save();
    1093             $diaryCommentImage->free();
     1043            $this->insertInto('DiaryCommentImage', array(
     1044              'diary_comment_id' => $cDiaryComment->getCDiaryCommentId(),
     1045              'file_id'          => $file->getId(),
     1046            ));
     1047            $file->free();
    10941048          }
    10951049        }
     
    11641118
    11651119        // create MessageFile
     1120        $param = array(
     1121          'message_id' => $cMessage->getCMessageId(),
     1122          'created_at' => $this->date,
     1123          'updated_at' => $this->date,
     1124        );
    11661125        for ($i = 1; $i <= 3; ++$i)
    11671126        {
    11681127          $getImageFilename = 'getImageFilename_'.$i;
    1169           $this->_createMessageFile($cMessage->getCMessageId(), $cMessage->$getImageFilename());
    1170         }
    1171         $this->_createMessageFile($cMessage->getCMessageId(), $cMessage->getFilename());
     1128          if ($file = $this->getFileByName($cMessage->$getImageFilename()))
     1129          {
     1130            $this->insertInto('MessageFile', array_merge($param, array('file_id' => $file->getId())));
     1131            $file->free();
     1132          }
     1133        }
     1134        if ($file = $this->getFileByName($cMessage->getFilename()))
     1135        {
     1136          $this->insertInto('MessageFile', array_merge($param, array('file_id' => $file->getId())));
     1137          $file->free();
     1138        }
    11721139
    11731140        $messageSendList->free();
     
    12021169  }
    12031170
    1204   protected function _createMessageFile($messageId, $filename)
    1205   {
    1206     if ($messageFile = $this->getFile('MessageFile', $filename))
    1207     {
    1208       $this->update($messageFile, array('message_id' => $messageId));
    1209     }
    1210   }
    1211 
     1171  /**
     1172   * Functions
     1173   */
    12121174  protected function clearCache()
    12131175  {
     
    12261188  }
    12271189
     1190  protected function getFileByName($name = null)
     1191  {
     1192    if ($name)
     1193    {
     1194      return $this->selectOne('File', array('name' => $name));
     1195    }
     1196  }
     1197
     1198  protected function getModelsIterator($table, $limit = 100, $offset = 0, $orderBy = null)
     1199  {
     1200    $this->connectTo2();
     1201    $q = Doctrine::getTable($table)->createQuery()
     1202      ->limit($limit)
     1203      ->offset($offset);
     1204    if (!is_null($orderBy))
     1205    {
     1206      $q->orderBy($orderBy);
     1207    }
     1208    $cModels = $q->execute();
     1209    $this->connectTo3();
     1210
     1211    return $cModels->count() ? $cModels : false;
     1212  }
     1213
     1214  protected function createConfigs($tableName, $param, $configs)
     1215  {
     1216    foreach ($configs as $name => $value)
     1217    {
     1218      if (!$value)
     1219      {
     1220        continue;
     1221      }
     1222
     1223      $this->insertInto($tableName, array_merge($param, array(
     1224        'name'  => $name,
     1225        'value' => $value,
     1226      )));
     1227    }
     1228  }
     1229
     1230  /**
     1231   * Initialize
     1232   */
    12281233  protected function getBaseModelsDirectories($dir)
    12291234  {
     
    12911296  }
    12921297
    1293   protected function clearDbTable($table)
    1294   {
    1295     Doctrine::getTable($table)->createQuery()->delete()->execute();
     1298  /**
     1299   * Utilities
     1300   */
     1301  protected function getValidatorFile()
     1302  {
     1303    if ($this->validatorFile === null)
     1304    {
     1305      $this->validatorFile = new sfValidatorFile();
     1306    }
     1307
     1308    return $this->validatorFile;
     1309  }
     1310
     1311  protected function makeCamelCase($string = '')
     1312  {
     1313    $camel = '';
     1314    $words = explode('_', $string);
     1315    $camel .= array_shift($words);
     1316    foreach ($words as $word)
     1317    {
     1318      $camel .= ucfirst($word);
     1319    }
     1320
     1321    return $camel;
    12961322  }
    12971323
     
    13221348  }
    13231349
    1324   protected function getFileIdByName($name)
    1325   {
    1326     if (!$name)
    1327     {
    1328       return;
    1329     }
    1330 
    1331     if (array_key_exists($name, $this->mapFileIds))
    1332     {
    1333       return $this->mapFileIds[$name];
    1334     }
    1335   }
    1336 
    1337   protected function isExistMember($memberId)
    1338   {
    1339     $this->connectTo2();
    1340     $member = Doctrine::getTable('CMember')->find($memberId);
    1341     $this->connectTo3();
    1342 
    1343     if ($member)
    1344     {
    1345       $member->free();
    1346 
    1347       return true;
    1348     }
    1349 
    1350     return false;
    1351   }
    1352 
    1353   protected function getValidatorFile()
    1354   {
    1355     if ($this->validatorFile === null)
    1356     {
    1357       $this->validatorFile = new sfValidatorFile();
    1358     }
    1359 
    1360     return $this->validatorFile;
    1361   }
    1362 
    1363   protected function getFile($className, $filename, $timestamp = true)
    1364   {
    1365     if (!$filename)
    1366     {
    1367       return;
    1368     }
    1369 
    1370     // NOTICE: ignore if the member image isn't exist
    1371     if (!($fileId = $this->getFileIdByName($filename)))
    1372     {
    1373       return;
    1374     }
    1375 
    1376     $className = 'Temp'.$className;
    1377     $file = new $className();
    1378     $file->setFileId($fileId);
    1379     if ($timestamp)
    1380     {
    1381       $file->setCreatedAt($this->date);
    1382       $file->setUpdatedAt($this->date);
    1383     }
    1384 
    1385     return $file;
    1386   }
    1387 
    1388   protected function printMemoryUsage($msg = 'point: ')
     1350  protected function printMemoryUsage($msg = 'point')
    13891351  {
    13901352    $memory = memory_get_usage();
     
    13971359  }
    13981360
    1399   protected function getModelsIterator($table, $limit = 100, $offset = 0)
    1400   {
    1401     $this->connectTo2();
    1402     $cModels = Doctrine::getTable($table)->createQuery()
    1403       ->limit($limit)
    1404       ->offset($offset)
    1405       ->execute();
    1406     $this->connectTo3();
    1407 
    1408     return $cModels->count() ? $cModels : false;
    1409   }
    1410 
    1411   protected function update($record, $param = array(), $returnRecord = false)
     1361  /**
     1362   * SQL like operations
     1363   */
     1364  protected function selectOne($tableName, $where = array())
     1365  {
     1366    $q = Doctrine::getTable($tableName)->createQuery();
     1367
     1368    foreach ($where as $key => $value)
     1369    {
     1370      $q->andWhere($key.' = ?', $value);
     1371    }
     1372
     1373    return $q->fetchOne();
     1374  }
     1375
     1376  protected function isExist($tableName, $where = array())
     1377  {
     1378    return (boolean) $this->selectOne($tableName, $where);
     1379  }
     1380
     1381  protected function insertInto($tableName, $param = array(), $returnRecord = false)
     1382  {
     1383    $className = 'Temp'.$tableName;
     1384    $record = new $className();
     1385
     1386    return $this->update($record, $param, $returnRecord);
     1387  }
     1388
     1389  protected function update(&$record, $param = array(), $returnRecord = false)
    14121390  {
    14131391    foreach ($param as $field => $value)
     
    14241402    $record->free();
    14251403  }
    1426 
    1427   protected function insertInto($tableName, $param = array(), $returnRecord = false)
    1428   {
    1429     $className = 'Temp'.$tableName;
    1430     $record = new $className();
    1431 
    1432     return $this->update($record, $param, $returnRecord);
    1433   }
    1434 
    1435   protected function makeCamelCase($string = '')
    1436   {
    1437     $camel = '';
    1438     $words = explode('_', $string);
    1439     $camel .= array_shift($words);
    1440     foreach ($words as $word)
    1441     {
    1442       $camel .= ucfirst($word);
    1443     }
    1444 
    1445     return $camel;
    1446   }
    14471404}
Note: See TracChangeset for help on using the changeset viewer.