/** * Add a new geodispersion analysis in the database, in a transactional manner. * When successful, eturns the newly created GeoAnalysis object. * * @param string $description geodispersion analysis title * @param int $analysis_level Analysis level * @param string $map_file Filename of the map * @param int $map_top_level Parent level of the map * @param bool $use_flags Use flag in the place display * @param int $gen_details Number of top places to display * @return GeoAnalysis */ public function createGeoAnalysis($description, $analysis_level, $map_file, $map_top_level, $use_flags, $gen_details) { try { Database::beginTransaction(); Database::prepare('INSERT INTO `##maj_geodispersion`' . ' (majgd_file, majgd_descr, majgd_sublevel, majgd_map, majgd_toplevel, majgd_useflagsgen, majgd_detailsgen)' . ' VALUES (:gedcom_id, :description, :analysis_level, :map, :map_top_level, :use_flags, :gen_details)')->execute(array('gedcom_id' => $this->tree->getTreeId(), 'description' => $description, 'analysis_level' => $analysis_level, 'use_flags' => $use_flags ? 'yes' : 'no', 'gen_details' => $gen_details, 'map' => $map_file, 'map_top_level' => $map_top_level)); $id = Database::lastInsertId(); $ga = $this->getGeoAnalysis($id, false); Database::commit(); } catch (\Exception $ex) { Database::rollback(); $ga = null; Log::addErrorLog('A new Geo Analysis failed to be created. Transaction rollbacked. Parameters [' . $description . ', ' . $analysis_level . ',' . $map_file . ',' . $map_top_level . ',' . $use_flags . ', ' . $gen_details . ']. Exception: ' . $ex->getMessage()); } return $ga; }