Пример #1
0
 /**
  * Fill the queue with upgrade tasks.
  *
  * @param string $currentVer
  *   the original revision.
  * @param string $latestVer
  *   the target (final) revision.
  * @param string $postUpgradeMessageFile
  *   path of a modifiable file which lists the post-upgrade messages.
  *
  * @return CRM_Queue_Service
  */
 public static function buildQueue($currentVer, $latestVer, $postUpgradeMessageFile)
 {
     $upgrade = new CRM_Upgrade_Form();
     // hack to make 4.0.x (D7,J1.6) codebase go through 3.4.x (d6, J1.5) upgrade files,
     // since schema wise they are same
     if (CRM_Upgrade_Form::getRevisionPart($currentVer) == '4.0') {
         $currentVer = str_replace('4.0.', '3.4.', $currentVer);
     }
     // Ensure that queue can be created
     if (!CRM_Queue_BAO_QueueItem::findCreateTable()) {
         CRM_Core_Error::fatal(ts('Failed to find or create queueing table'));
     }
     $queue = CRM_Queue_Service::singleton()->create(array('name' => self::QUEUE_NAME, 'type' => 'Sql', 'reset' => TRUE));
     $revisions = $upgrade->getRevisionSequence();
     foreach ($revisions as $rev) {
         // proceed only if $currentVer < $rev
         if (version_compare($currentVer, $rev) < 0) {
             $beginTask = new CRM_Queue_Task(array('CRM_Upgrade_Form', 'doIncrementalUpgradeStart'), array($rev), "Begin Upgrade to {$rev}");
             $queue->createItem($beginTask);
             $task = new CRM_Queue_Task(array('CRM_Upgrade_Form', 'doIncrementalUpgradeStep'), array($rev, $currentVer, $latestVer, $postUpgradeMessageFile), "Upgrade DB to {$rev}");
             $queue->createItem($task);
             $task = new CRM_Queue_Task(array('CRM_Upgrade_Form', 'doIncrementalUpgradeFinish'), array($rev, $currentVer, $latestVer, $postUpgradeMessageFile), "Finish Upgrade DB to {$rev}");
             $queue->createItem($task);
         }
     }
     return $queue;
 }