function admin_diff($modelName, $id) { App::import('Lib', 'Migration.Migration'); $modelName = Migration::urlParamToModelName($modelName); $Model = Migration::getLocalModel($modelName); $this->loadModel($modelName); $Model->joinMigrationRemote(); $local = $Model->read(null, $id); $targets = Migration::targetList(); $remotes = array(); foreach ($targets as $key => $label) { $remoteModel = Migration::getRemoteModel($Model, $key); $remotes[$key] = $Model->getRemoteEntry($local, $key); $remotes[$key]['alias'] = $remoteModel->alias; } $local = $Model->getRawEntry($local); $this->set('localId', $id); $this->set('local', $local); $this->set('modelAlias', $Model->alias); $this->set('modelUrlAlias', $Model->getUrlName()); $this->set('remotes', $remotes); $this->set('targets', $targets); }
function migrationDeletedIds($Model, $targetInstance = null) { $MR = $this->MigrationRemote; $MN = $this->MigrationNode; $fullName = $this->getFullName($Model); $deletedIds = $this->MigrationRemote->find('list', array('fields' => array($MR->alias . '.remote_id', $MR->alias . '.remote_id', $MR->alias . '.instance'), 'conditions' => array($MR->alias . '.model' => $fullName, $Model->alias . '.' . $Model->primaryKey => null), 'joins' => array(array('alias' => $Model->alias, 'table' => $Model->useTable, 'type' => 'LEFT', 'conditions' => array($MR->alias . '.local_id = ' . $Model->alias . '.' . $Model->primaryKey))))); if ($targetInstance) { $targets = array($targetInstance => $targetInstance); } else { $targets = Migration::targetList(); } $format = $Model->getDataSource()->columns['datetime']['format']; foreach ($targets as $instance => $name) { $lastSync = $this->getLastSync($Model, $instance); $existingLocalCond = $this->FindPresyncConds($Model, array('conditions' => array('created <= ' => date($format, $lastSync)))); $remoteModel = Migration::getRemoteModel($Model, $instance); $ids = $remoteModel->find('list', array('fields' => array($Model->primaryKey, $Model->primaryKey), 'conditions' => array('created <= ' => date($format, $lastSync), 'not' => array($existingLocalCond)))); if (!empty($ids)) { $deletedIds[$instance] = array_merge(empty($deletedIds[$instance]) ? array() : $deletedIds[$instance], $ids); } // debug($remoteOnly); } if (!empty($targetInstance) && !is_array($targetInstance)) { $deletedIds = empty($deletedIds[$targetInstance]) ? array() : $deletedIds[$targetInstance]; } return $deletedIds; }
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); }