Beispiel #1
0
 /**
  * {@inheritDoc}
  *
  * Module database table list is supposed to be updated
  * during module upgrade, however we don't have a feasible solution yet.
  * Thus module developers are encouraged to use $config['schema']
  */
 public function updateAction()
 {
     if ($this->skipUpgrade()) {
         return;
     }
     $module = $this->event->getParam('module');
     $config = $this->canonizeConfig($this->config);
     if (isset($config['schema'])) {
         $schemaList = $config['schema'];
     } elseif (empty($config['sqlfile'])) {
         $schemaList = array();
     } else {
         $sqlFile = sprintf('%s/%s/%s', Pi::path('module'), $this->event->getParam('directory'), $config['sqlfile']);
         if (!file_exists($sqlFile)) {
             $schemaList = array();
         } else {
             $schemaList = SqlSchema::fetchSchema($sqlFile);
         }
     }
     $modelSchema = Pi::model('module_schema');
     $rowset = $modelSchema->select(array('module' => $module));
     foreach ($rowset as $row) {
         $name = $row->name;
         if (!isset($schemaList[$name])) {
             $row->delete();
             $status = true;
             if (!$status) {
                 $msg = 'Deprecated schema "%s" is not removed.';
                 return array('status' => false, 'message' => sprintf($msg, $name));
             }
         } else {
             unset($schemaList[$row->name]);
         }
     }
     foreach ($schemaList as $name => $type) {
         $status = $modelSchema->insert(array('name' => $name, 'type' => $type, 'module' => $module));
         if (!$status) {
             return array('status' => false, 'message' => 'Module schema is not saved.');
         }
     }
     return true;
 }