setDescription('Backup Phraseanet Databases'); $this->addArgument('directory', null, 'The directory where to backup', $dir); return $this; } public function requireSetup() { return true; } protected function doExecute(InputInterface $input, OutputInterface $output) { $output->write('Phraseanet is going to be backup...', true); $appbox = appbox::get_instance(\bootstrap::getCore()); $ok = true; $ok = $this->dump_base($appbox, $input, $output) && $ok; foreach ($appbox->get_databoxes() as $databox) { $ok = $this->dump_base($databox, $input, $output) && $ok; } return (int) ! $ok; } protected function dump_base(base $base, InputInterface $input, OutputInterface $output) { $date_obj = new DateTime(); $filename = sprintf( '%s%s_%s.sql' , p4string::addEndSlash($input->getArgument('directory')) , $base->get_dbname() , $date_obj->format('Y_m_d_H_i_s') ); $output->write(sprintf('Generating %s ... ', $filename)); $builder = ProcessBuilder::create(array( 'mysqldump', '--host='.$base->get_host(), '--port='.$base->get_port(), '--user='.$base->get_user(), '--password='.$base->get_passwd(), '--databases', $base->get_dbname(), '--default-character-set=utf8' )); $proces = $builder->getProcess(); $proces->run(); if ($proces->isSuccessful()) { file_put_contents($filename, $proces->getOutput()); } if (file_exists($filename) && filesize($filename) > 0) { $output->writeln('OK'); return true; } else { $output->writeln('Failed'); return false; } } }