예제 #1
0
 /**
  * @param      $uid
  * @param bool $dbBackupPath
  * @param null $plugin
  * @throws Exception
  */
 public function updateDatabase($uid, $dbBackupPath = false, $plugin = null)
 {
     try {
         Craft::log('Running migrations...', LogLevel::Info, true);
         if (!craft()->migrations->runToTop($plugin)) {
             Craft::log('Something went wrong running a migration. :-(', LogLevel::Error);
             craft()->updates->rollbackUpdate($uid, $dbBackupPath);
             Craft::log('Taking the site out of maintenance mode.', LogLevel::Info, true);
             Craft::disableMaintenanceMode();
             throw new Exception(Craft::t('There was a problem updating your database.'));
         }
         // If plugin is null we're looking at Craft.
         if ($plugin === null) {
             // Setting new Craft info.
             Craft::log('Settings new Craft release info in craft_info table.', LogLevel::Info, true);
             if (!craft()->updates->setNewCraftInfo(CRAFT_VERSION, CRAFT_BUILD, CRAFT_RELEASE_DATE)) {
                 throw new Exception(Craft::t('The update was performed successfully, but there was a problem setting the new info in the database info table.'));
             }
         } else {
             if (!craft()->updates->setNewPluginInfo($plugin)) {
                 throw new Exception(Craft::t('The update was performed successfully, but there was a problem setting the new info in the plugins table.'));
             }
         }
         // Take the site out of maintenance mode.
         Craft::log('Taking the site out of maintenance mode.', LogLevel::Info, true);
         Craft::disableMaintenanceMode();
     } catch (\Exception $e) {
         craft()->updates->rollbackUpdate($uid, $dbBackupPath);
         Craft::log('Taking the site out of maintenance mode.', LogLevel::Info, true);
         Craft::disableMaintenanceMode();
         throw new Exception(Craft::t('There was a problem updating your database.'));
     }
 }