function pendingList() { $MigrationRemote = ClassRegistry::init('Migration.MigrationRemote'); $models = Migration::migratingModels(); $list = array(); foreach ($models as $mname) { $Model = Migration::getLocalModel($mname); $up = $Model->migrationPendingCount(); if (!empty($up)) { $list[$mname]['update'] = $up; } $del = $Model->migrationDeletedCount(); if (!empty($del)) { $list[$mname]['delete'] = $del; } } return $list; }
function getMigratedAssociations($Model) { $settings = $this->settings[$Model->alias]; $assoc = Set::normalize($settings['assoc']); $belongsTo = array_diff($Model->getAssociated('belongsTo'), array_keys($assoc)); if (!empty($belongsTo)) { $exclude = array_merge(array($Model->primaryKey), $settings['excludeFields']); foreach ($Model->getAssociated('belongsTo') as $alias) { $opt = $Model->belongsTo[$alias]; $migratingModels = Migration::migratingModels(); if (!in_array($opt['foreignKey'], $exclude)) { if (in_array($opt['className'], $migratingModels)) { $assoc[$alias] = $opt; } elseif (isset($migratingModels[$opt['className']])) { $opt['className'] = $migratingModels[$opt['className']]; $assoc[$alias] = $opt; } } } } App::import('Lib', 'Migration.MigrationConfig'); $parsers = MigrationConfig::load('assocParsers'); if (!empty($parsers)) { foreach ($parsers as $p) { $res = call_user_func($p, $this, $Model, $assoc); if (!empty($res)) { $assoc = array_merge($assoc, $res); } } } return $assoc; }
function admin_index() { App::import('Lib', 'Migration.Migration'); App::import('Lib', 'Migration.MigrationProcess'); $targets = Migration::targetList(); if (empty($targets)) { $this->render('admin_missing_target'); return; } //$Model = Migration::getLocalModel('Slider'); //debug($Model->migrationDeletedCount()); // $Model = Migration::getLocalModel('Page'); // debug($Model->migrationDeletedCount()); $posted = !empty($this->data); if ($posted) { foreach ($this->data['Migration']['targets'] as $target => $active) { if ($active) { $process = new MigrationProcess($target); foreach ($this->data['Migration']['models'] as $modelName => $active) { if ($active) { $modelName = str_replace('-', '.', $modelName); //$process->models[$modelName] = $this->Migrated->findOpt($modelName); $process->setModelOpt($modelName, $this->Migrated->getModelOpt($modelName)); } } // debug($process->models); $process->run(); $this->Session->setFlash(implode("<br>\n", $process->msgs)); } } $dry = MigrationConfig::load('dryRun'); if ($dry) { $this->data = array(); $posted = false; } else { $this->Migrated->clear(); $this->redirect(array('action' => 'index')); } } $modelsNames = Migration::migratingModels(); $models = array(); $pendings = Migration::pendingList(); foreach ($modelsNames as $mname) { $m = array('class' => Migration::classNameParts($mname, 'class'), 'name' => str_replace('.', '-', $mname), 'count' => 0, 'deleted_count' => 0, 'migrated_count' => 0, 'param' => Migration::modelNameToUrl($mname)); if (!empty($pendings[$mname])) { $m['count'] = array_sum($pendings[$mname]); $m['deleted_count'] = empty($pendings[$mname]['delete']) ? 0 : $pendings[$mname]['delete']; $m['migrated_count'] = $this->Migrated->alterCount($mname, $m['count']); if (!$posted) { $this->data['Migration']['models'][$m['name']] = 1; } } $models[] = $m; } // debug($models); if (!$posted) { foreach ($targets as $key => $label) { $this->data['Migration']['targets'][$key] = 1; } } $this->set('models', $models); $this->set('targets', $targets); }