public function Go() { $this->Permission('Garden.Import'); $Imp = new ImportModel(); $Imp->LoadState(); $this->SetData('Steps', $Imp->Steps()); if ($Imp->CurrentStep < 1) { // Check for the import file. if ($Imp->ImportPath) { $Imp->CurrentStep = 1; } else { Redirect(strtolower($this->Application) . '/import'); } } if ($Imp->CurrentStep >= 1) { $Result = $Imp->RunStep($Imp->CurrentStep); if ($Result === TRUE) { $Imp->CurrentStep++; } elseif ($Result === 'COMPLETE') { $this->SetJson('Complete', TRUE); } /*elseif(is_array($Result)) { SaveToConfig(array( 'Garden.Import.CurrentStep' => $CurrentStep, 'Garden.Import.CurrentStepData' => ArrayValue('Data', $Result))); $this->SetData('CurrentStepMessage', ArrayValue('Message', $Result)); }*/ } $Imp->SaveState(); $this->Form = new Gdn_Form(); $this->Form->SetValidationResults($Imp->Validation->Results()); $this->SetData('CurrentStep', $Imp->CurrentStep); $this->SetData('CurrentStepMessage', GetValue('CurrentStepMessage', $Imp->Data, '')); $this->AddJsFile('import.js'); $this->Render(); }
/** * Main import page. * * @since 2.0.0 * @access public */ public function Index() { $this->Permission('Garden.Import'); // This permission doesn't exist, so only users with Admin == '1' will succeed. $Timer = new Gdn_Timer(); // Determine the current step. $this->Form = new Gdn_Form(); $Imp = new ImportModel(); $Imp->LoadState(); // Search for the list of acceptable imports. $ImportPaths = array(); $ExistingPaths = SafeGlob(PATH_ROOT . '/uploads/export*', array('gz', 'txt')); foreach ($ExistingPaths as $Path) { $ImportPaths[$Path] = basename($Path); } // Add the database as a path. $ImportPaths = array_merge(array('db:' => T('This Database')), $ImportPaths); if ($Imp->CurrentStep < 1) { // Check to see if there is a file. $ImportPath = C('Garden.Import.ImportPath'); $Validation = new Gdn_Validation(); if (strcasecmp(Gdn::Request()->RequestMethod(), 'post') == 0) { $Upload = new Gdn_Upload(); $Validation = new Gdn_Validation(); if (count($ImportPaths) > 0) { $Validation->ApplyRule('PathSelect', 'Required', T('You must select a file to import.')); } if (count($ImportPaths) == 0 || $this->Form->GetFormValue('PathSelect') == 'NEW') { $TmpFile = $Upload->ValidateUpload('ImportFile', FALSE); } else { $TmpFile = ''; } if ($TmpFile) { $Filename = $_FILES['ImportFile']['name']; $Extension = pathinfo($Filename, PATHINFO_EXTENSION); $TargetFolder = PATH_ROOT . DS . 'uploads' . DS . 'import'; if (!file_exists($TargetFolder)) { mkdir($TargetFolder, 0777, TRUE); } $ImportPath = $Upload->GenerateTargetName(PATH_ROOT . DS . 'uploads' . DS . 'import', $Extension); $Upload->SaveAs($TmpFile, $ImportPath); $Imp->ImportPath = $ImportPath; $this->Form->SetFormValue('PathSelect', $ImportPath); $UploadedFiles = GetValue('UploadedFiles', $Imp->Data); $UploadedFiles[$ImportPath] = basename($Filename); $Imp->Data['UploadedFiles'] = $UploadedFiles; } elseif ($PathSelect = $this->Form->GetFormValue('PathSelect')) { if ($PathSelect == 'NEW') { $Validation->AddValidationResult('ImportFile', 'ValidateRequired'); } else { $Imp->ImportPath = $PathSelect; } } elseif (!$Imp->ImportPath && count($ImportPaths) == 0) { // There was no file uploaded this request or before. $Validation->AddValidationResult('ImportFile', $Upload->Exception); } // Validate the overwrite. if (TRUE || strcasecmp($this->Form->GetFormValue('Overwrite'), 'Overwrite') == 0) { if (!StringBeginsWith($this->Form->GetFormValue('PathSelect'), 'Db:', TRUE)) { $Validation->ApplyRule('Email', 'Required'); if (!$this->Form->GetFormValue('UseCurrentPassword')) { $Validation->ApplyRule('Password', 'Required'); } } } if ($Validation->Validate($this->Form->FormValues())) { $this->Form->SetFormValue('Overwrite', 'overwrite'); $Imp->FromPost($this->Form->FormValues()); $this->View = 'Info'; } else { $this->Form->SetValidationResults($Validation->Results()); } } else { $this->Form->SetFormValue('PathSelect', $Imp->ImportPath); } $Imp->SaveState(); } else { $this->SetData('Steps', $Imp->Steps()); $this->View = 'Info'; } if (!StringBeginsWith($Imp->ImportPath, 'db:') && !file_exists($Imp->ImportPath)) { $Imp->DeleteState(); } try { $UploadedFiles = GetValue('UploadedFiles', $Imp->Data, array()); $ImportPaths = array_merge($ImportPaths, $UploadedFiles); $this->SetData('ImportPaths', $ImportPaths); $this->SetData('Header', $Imp->GetImportHeader()); $this->SetData('Stats', GetValue('Stats', $Imp->Data, array())); $this->SetData('GenerateSQL', GetValue('GenerateSQL', $Imp->Data)); $this->SetData('ImportPath', $Imp->ImportPath); $this->SetData('OriginalFilename', GetValue('OriginalFilename', $Imp->Data)); $this->SetData('CurrentStep', $Imp->CurrentStep); $this->SetData('LoadSpeedWarning', $Imp->LoadTableType(FALSE) == 'LoadTableWithInsert'); } catch (Gdn_UserException $Ex) { $this->Form->AddError($Ex); $Imp->SaveState(); $this->View = 'Index'; } $this->Render(); }
public function Index() { $this->Permission('Garden.Import'); // This permission doesn't exist, so only users with Admin == '1' will succeed. $Timer = new Gdn_Timer(); // Determine the current step. $this->Form = new Gdn_Form(); $Imp = new ImportModel(); $Imp->LoadState(); if ($Imp->CurrentStep < 1) { // Check to see if there is a file. $ImportPath = Gdn::Config('Garden.Import.ImportPath'); $Validation = new Gdn_Validation(); if (strcasecmp(Gdn::Request()->RequestMethod(), 'post') == 0) { $Upload = new Gdn_Upload(); $Validation = new Gdn_Validation(); $TmpFile = $Upload->ValidateUpload('ImportFile', FALSE); if ($TmpFile) { $Filename = $_FILES['ImportFile']['name']; $Extension = pathinfo($Filename, PATHINFO_EXTENSION); $TargetFolder = PATH_ROOT . DS . 'uploads' . DS . 'import'; if (!file_exists($TargetFolder)) { mkdir($TargetFolder, 0777, TRUE); } $ImportPath = $Upload->GenerateTargetName(PATH_ROOT . DS . 'uploads' . DS . 'import', $Extension); $Upload->SaveAs($TmpFile, $ImportPath); $Imp->ImportPath = $ImportPath; $Imp->Data['OriginalFilename'] = basename($Filename); $Imp->Data['FileUploaded'] = TRUE; } elseif (!$Imp->ImportPath) { // There was no file uploaded this request or before. $Validation->AddValidationResult('ImportFile', $Upload->Exception); } // Validate the overwrite. if (strcasecmp($this->Form->GetFormValue('Overwrite'), 'Overwrite') == 0) { $Validation->ApplyRule('Email', 'Required'); $Validation->ApplyRule('Password', 'Required'); } if ($Validation->Validate($this->Form->FormValues())) { $Imp->FromPost($this->Form->FormValues()); $this->View = 'Info'; } else { $this->Form->SetValidationResults($Validation->Results()); } } else { // TODO: Search for an existing file that was uploaded by the web admin. // $ImportPaths = SafeGlob(PATH_ROOT.DS.'uploads'.DS.'export *'); // if($ImportPaths) { // $ImportPath = $ImportPaths[0]; // if(in_array(pathinfo($ImportPath, PATHINFO_EXTENSION), array('gz', 'txt'))) { // $Imp->ImportPath = $ImportPath; // $Imp->Data['OriginalFilename'] = basename($ImportPath); // } // } } $Imp->SaveState(); } else { $this->SetData('Steps', $Imp->Steps()); $this->View = 'Info'; } if (!file_exists($Imp->ImportPath)) { $Imp->DeleteState(); } try { $this->SetData('Header', $Imp->GetImportHeader()); $this->SetData('Stats', GetValue('Stats', $Imp->Data, array())); $this->SetData('ImportPath', $Imp->ImportPath); $this->SetData('OriginalFilename', GetValue('OriginalFilename', $Imp->Data)); $this->SetData('CurrentStep', $Imp->CurrentStep); } catch (Gdn_UserException $Ex) { $this->Form->AddError($Ex); $Imp->SaveState(); $this->View = 'Index'; } $this->Render(); }