/** * Enables a User entity. * * @Route("/{username}/enable", name="admin_users_enable") * @Method("post") */ public function users_enableAction($username) { $form = $this->createEnableForm($username); $request = $this->getRequest(); if ('POST' === $request->getMethod()) { $form->bind($request); if ($form->isValid()) { $userManager = $this->get('fos_user.user_manager'); $user = $userManager->findUserByUsername($username); if (!$user) { throw $this->createNotFoundException('Unable to find User entity.'); } $roles = $user->getRoles(); if (!in_array('ROLE_ADMIN', $roles) && !in_array('ROLE_SUPER_ADMIN', $roles)) { //check if database exists $dbs_array = $this->database_list(); if (!in_array($user->getDbNameUq(), $dbs_array)) { $dbName = $this->get_prefix() . $user->getDbNameUq(); //add Database entity $dm = $this->get('doctrine.odm.mongodb.document_manager'); $database = new Database(); $database->setName($dbName); $database->setDisplayedname(ucfirst($user->getDbNameUq())); $database->setLink($user->getDbNameUq()); $database->setLanguage($user->getDefaultlanguage()); $dm->persist($database); $dm->flush(); //create new database $connection = new \MongoClient(); $db = $connection->{$dbName}; $db->listCollections(); //collections $db->createCollection('Collection'); $db->createCollection('Config'); $db->createCollection('Definition'); $db->createCollection('Glossary'); $db->createCollection('Image'); $db->createCollection('Location'); $db->createCollection('Other'); $db->createCollection('Module'); $db->createCollection('Plantunit'); $db->createCollection('Taxon'); $db->createCollection('Page'); //indexes $db->Image->ensureIndex(array('title1' => 1, 'title2' => 1)); $db->Location->ensureIndex(array('coordinates' => '2d')); // $db->Plantunit->ensureIndex(array('attributes'=>'text')); $db->Taxon->ensureIndex(array('name' => 1)); $db->Taxon->ensureIndex(array('identifier' => 1)); $db->Plantunit->ensureIndex(array('identifier' => 1)); $db->Plantunit->ensureIndex(array('taxonsrefs.$id' => 1)); //pages data $db->Page->insert(array('name' => 'Home', 'alias' => 'home', 'order' => 1)); $db->Page->insert(array('name' => 'Mentions', 'alias' => 'mentions', 'order' => 2)); $db->Page->insert(array('name' => 'Credits', 'alias' => 'credits', 'order' => 3)); $db->Page->insert(array('name' => 'Contacts', 'alias' => 'contacts', 'order' => 4)); //init config $db->Config->insert(array('defaultlanguage' => $user->getDefaultlanguage(), 'islocked' => false, 'originaldb' => $dbName, 'name' => ucfirst($user->getDbNameUq()))); //update user account $user->setDbName($dbName); $user->setDblist(array($dbName)); $user->addRole('ROLE_ADMIN'); $userManager->updateUser($user); //send mail $message = \Swift_Message::newInstance()->setSubject('Publish : account enabled')->setFrom($this->container->getParameter('from_email_adress'))->setTo($user->getEmail())->setBody($this->container->get('templating')->render('PlantnetDataBundle:Backend\\Mail:enable.txt.twig', array('url' => $this->get('router')->generate('admin_index', array(), true))), 'text/html'); $this->container->get('mailer')->send($message); $this->get('session')->getFlashBag()->add('msg_success', 'Role Admin granted'); } else { echo 'Error...'; exit; } } } } return $this->redirect($this->generateUrl('admin_users_edit', array('username' => $username))); }
private function check_databases($languages, $user, $default) { $default_db = $user->getDbName(); $dm = $this->get('doctrine.odm.mongodb.document_manager'); $dm->getConfiguration()->setDefaultDB($this->getDataBase()); $database = $dm->getRepository('PlantnetDataBundle:Database')->findOneBy(array('name' => $default_db, 'language' => $default)); if (!$database) { throw $this->createNotFoundException('Unable to find Database entity.'); } $config = $dm->createQueryBuilder('PlantnetDataBundle:Config')->getQuery()->getSingleResult(); if (!$config) { throw $this->createNotFoundException('Unable to find Config entity.'); } $default_template = $config->getTemplate(); $imgprotect = $config->getHasimageprotection(); $default_link = $database->getLink(); $children = $database->getChildren(); if (count($children)) { foreach ($children as $child) { if (in_array($child->getLanguage(), $languages)) { $child->setEnable(true); $dm->persist($child); } else { $child->setEnable(false); $dm->persist($child); } } $dm->flush(); } if (count($languages)) { foreach ($languages as $language) { $exists = false; if (count($children)) { foreach ($children as $child) { if ($language == $child->getLanguage()) { $exists = true; } } } if (!$exists) { $new_name = $default_db . '_' . $language; $new_database = new Database(); $new_database->setName($new_name); $new_database->setDisplayedname(ucfirst($default_link) . ' ' . $language); $new_database->setLink($default_link . '_' . $language); $new_database->setLanguage($language); $new_database->setEnable(true); $new_database->setParent($database); $dm->persist($new_database); $dm->flush(); //create new database $connection = new \MongoClient(); $db = $connection->{$new_name}; $db->listCollections(); //collections $db->createCollection('Collection'); $db->createCollection('Config'); $db->createCollection('Definition'); $db->createCollection('Glossary'); $db->createCollection('Image'); $db->createCollection('Location'); $db->createCollection('Other'); $db->createCollection('Module'); $db->createCollection('Plantunit'); $db->createCollection('Taxon'); $db->createCollection('Page'); //indexes $db->Image->ensureIndex(array('title1' => 1, 'title2' => 1)); $db->Location->ensureIndex(array('coordinates' => '2d')); // $db->Plantunit->ensureIndex(array('attributes'=>'text')); $db->Taxon->ensureIndex(array('name' => 1)); $db->Taxon->ensureIndex(array('identifier' => 1)); $db->Plantunit->ensureIndex(array('identifier' => 1)); $db->Plantunit->ensureIndex(array('taxonsrefs.$id' => 1)); //pages data $db->Page->insert(array('name' => 'Home', 'alias' => 'home', 'order' => 1)); $db->Page->insert(array('name' => 'Mentions', 'alias' => 'mentions', 'order' => 2)); $db->Page->insert(array('name' => 'Credits', 'alias' => 'credits', 'order' => 3)); $db->Page->insert(array('name' => 'Contacts', 'alias' => 'contacts', 'order' => 4)); //init config $db->Config->insert(array('islocked' => true, 'originaldb' => $default_db, 'defaultlanguage' => $language, 'name' => ucfirst($default_link) . ' ' . $language, 'template' => $default_template, 'hasimageprotection' => $imgprotect)); } } } $dm->getConfiguration()->setDefaultDB($this->getDataBase($user, $dm)); }
/** * Creates a new Database. * * @Route("/database/create", name="database_create") * @Method("post") * @Template() */ public function collection_createAction(Request $request) { $user = $this->container->get('security.context')->getToken()->getUser(); $form = $this->createDatabaseNewForm(); $roles = $user->getRoles(); if ($request->isMethod('POST')) { $form->bind($request); if (in_array('ROLE_ADMIN', $roles) && !in_array('ROLE_SUPER_ADMIN', $roles)) { $dbName = $form->get('dbname'); $language = $form->get('defaultlanguage'); if (!is_null($dbName->getData())) { if (!ctype_lower($dbName->getData())) { $dbName->addError(new FormError("This field is not valid (only lower case letters)")); } if (strlen($dbName->getData()) < 3 || strlen($dbName->getData()) > 50) { $dbName->addError(new FormError("This field must contain 3 to 50 lower case letters")); } } else { $dbName->addError(new FormError("This field must not be empty")); } $dbs = $this->database_list(); if (in_array($dbName->getData(), $dbs)) { $dbName->addError(new FormError('This value is already used.')); } if ($form->isValid()) { $new_db = $this->get_prefix() . $dbName->getData(); //add Database entity $dm = $this->get('doctrine.odm.mongodb.document_manager'); $database = new Database(); $database->setName($new_db); $database->setDisplayedname(ucfirst($dbName->getData())); $database->setLink($dbName->getData()); $database->setLanguage($language->getData()); $dm->persist($database); $dm->flush(); //create new database $connection = new \MongoClient(); $db = $connection->{$new_db}; $db->listCollections(); //collections $db->createCollection('Collection'); $db->createCollection('Config'); $db->createCollection('Definition'); $db->createCollection('Glossary'); $db->createCollection('Image'); $db->createCollection('Location'); $db->createCollection('Other'); $db->createCollection('Module'); $db->createCollection('Plantunit'); $db->createCollection('Taxon'); $db->createCollection('Page'); //indexes $db->Image->ensureIndex(array('title1' => 1, 'title2' => 1)); $db->Location->ensureIndex(array('coordinates' => '2d')); // $db->Plantunit->ensureIndex(array('attributes'=>'text')); $db->Taxon->ensureIndex(array('name' => 1)); $db->Taxon->ensureIndex(array('identifier' => 1)); $db->Plantunit->ensureIndex(array('identifier' => 1)); $db->Plantunit->ensureIndex(array('taxonsrefs.$id' => 1)); //pages data $db->Page->insert(array('name' => 'Home', 'alias' => 'home', 'order' => 1)); $db->Page->insert(array('name' => 'Mentions', 'alias' => 'mentions', 'order' => 2)); $db->Page->insert(array('name' => 'Credits', 'alias' => 'credits', 'order' => 3)); $db->Page->insert(array('name' => 'Contacts', 'alias' => 'contacts', 'order' => 4)); //init config $db->Config->insert(array('defaultlanguage' => $language->getData(), 'islocked' => false, 'originaldb' => $new_db, 'name' => ucfirst($dbName->getData()))); //update user account $userManager = $this->get('fos_user.user_manager'); $db_list = $user->getDblist(); $db_list[] = $new_db; $user->setDblist($db_list); $userManager->updateUser($user); $this->get('session')->getFlashBag()->add('msg_success', 'Database created'); return $this->redirect($this->generateUrl('admin_index')); } } } return $this->render('PlantnetDataBundle:Backend\\Admin:database_new.html.twig', array('form' => $form->createView())); }