ninegate/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/InitDataCommand.php

283 lines
12 KiB
PHP
Raw Normal View History

2018-12-18 09:44:39 +01:00
<?php
namespace Cadoles\CoreBundle\Command;
2019-03-13 17:30:41 +01:00
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
2018-12-18 09:44:39 +01:00
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Finder\Finder;
2019-07-23 15:32:35 +02:00
use Ramsey\Uuid\Uuid;
2020-10-09 15:43:50 +02:00
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Id\AssignedGenerator;
2018-12-18 09:44:39 +01:00
use Cadoles\CoreBundle\Entity\Group;
use Cadoles\CoreBundle\Entity\UserGroup;
2020-10-09 15:43:50 +02:00
use Cadoles\CoreBundle\Entity\PermModoProfil;
use Cadoles\CoreBundle\Entity\PermModo;
2018-12-18 09:44:39 +01:00
2019-03-13 17:30:41 +01:00
class InitDataCommand extends ContainerAwareCommand
2018-12-18 09:44:39 +01:00
{
protected function configure()
{
$this
// the name of the command (the part after "bin/console")
->setName('Core:InitData')
// the short description shown while running "php bin/console list"
->setDescription('Init Data for Core')
// the full command description shown when running the command with
// the "--help" option
->setHelp('This command Init Data for Core')
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
2019-03-13 17:30:41 +01:00
$output->writeln('');
$output->writeln('CORE = Default Data');
$em = $this->getContainer()->get('doctrine')->getEntityManager();
2019-04-17 17:27:19 +02:00
$masteridentity=$this->getContainer()->getParameter('masteridentity');
2019-10-15 10:02:33 +02:00
$ldap_template = $this->getContainer()->getParameter('ldap_template');
2019-04-17 17:27:19 +02:00
2018-12-18 09:44:39 +01:00
$finder = new Finder();
2019-03-12 14:50:57 +01:00
$finder->in('src/Cadoles/CoreBundle/Command/data');
2018-12-18 09:44:39 +01:00
// Init 01 = ce qui templetisé
2019-03-13 17:30:41 +01:00
$output->writeln(' > Parametres 01');
2018-12-18 09:44:39 +01:00
$finder->name('core-init-01.sql');
foreach( $finder as $file ){
$content = $file->getContents();
2019-03-12 14:50:57 +01:00
$stmt = $em->getConnection()->prepare($content);
2021-02-09 16:14:47 +01:00
$stmt->execute();
2018-12-18 09:44:39 +01:00
}
// Init 02 = ce qui est toujours le cas
2019-03-13 17:30:41 +01:00
$output->writeln(' > Parametres 02');
2018-12-18 09:44:39 +01:00
$finder->name('core-init-02.sql');
foreach( $finder as $file ){
$content = $file->getContents();
$stmt = $em->getConnection()->prepare($content);
$stmt->execute();
}
// Init country
2019-03-13 17:30:41 +01:00
$output->writeln(' > Pays');
2018-12-18 09:44:39 +01:00
$finder->name('country.sql');
foreach( $finder as $file ){
$content = $file->getContents();
$stmt = $em->getConnection()->prepare($content);
$stmt->execute();
2019-04-16 09:49:49 +02:00
2018-12-18 09:44:39 +01:00
}
// Init city
2019-03-13 17:30:41 +01:00
$output->writeln(' > Villes');
2018-12-18 09:44:39 +01:00
$finder->name('city.sql');
foreach( $finder as $file ){
$content = $file->getContents();
$stmt = $em->getConnection()->prepare($content);
$stmt->execute();
2019-04-16 09:49:49 +02:00
2018-12-18 09:44:39 +01:00
}
$stmt->closeCursor();
2021-02-09 16:14:47 +01:00
// On s'assure que l'admin à un password et sinon on l'init à la valeur du genconfig
$user=$em->getRepository('CadolesCoreBundle:User')->findOneBy(['username'=>'admin']);
if($user&&empty($user->getPassword())) {
$initpwdadmin=$this->getContainer()->getParameter('initpwdadmin');
$output->writeln(' > Initialisation passsword admin / '.$initpwdadmin.' : pensez à modfier votre password après connexion');
$user->setPassword($initpwdadmin);
$em->persist($user);
$em->flush();
}
2018-12-18 09:44:39 +01:00
// On s'assure que le groupe 'Tout le Monde' existe
$group=$em->getRepository('CadolesCoreBundle:Group')->findOneBy(array('fgall'=>true));
if (!$group) {
2019-03-13 17:30:41 +01:00
$output->writeln(' > Création du groupe Tout le Monde');
2018-12-18 09:44:39 +01:00
$group = new Group();
$group->setLabel("Tout le Monde");
$group->setFgopen(false);
$group->setFgall(true);
2019-03-12 14:50:57 +01:00
$group->setFgtemplate(false);
2019-04-17 17:27:19 +02:00
$group->setFgcanshare(false);
2019-05-07 13:49:42 +02:00
$group->setFgcancreatepage(true);
$group->setFgcancreateblog(true);
$group->setFgcancreatecalendar(true);
2020-04-14 08:56:42 +02:00
$group->setFgcancreateproject(true);
2018-12-18 09:44:39 +01:00
$em->persist($group);
2019-04-16 09:49:49 +02:00
$em->flush();
2018-12-18 09:44:39 +01:00
}
$sub = $em->createQueryBuilder();
$sub->select("usergroup");
$sub->from("CadolesCoreBundle:UserGroup","usergroup");
$sub->andWhere('usergroup.user = user.id');
$sub->andWhere('usergroup.group = :groupid');
$qb = $em->createQueryBuilder();
$qb->select('user')
->from('CadolesCoreBundle:User','user')
->where($qb->expr()->not($qb->expr()->exists($sub->getDQL())))
->setParameter("groupid",$group->getId());
2019-08-23 17:01:04 +02:00
$datas=$qb->getQuery()->getArrayResult();
$nbusers=0;
2018-12-18 09:44:39 +01:00
foreach($datas as $data) {
2019-08-23 17:01:04 +02:00
$nbusers++;
$user=$em->getRepository('CadolesCoreBundle:User')->find($data["id"]);
$group=$em->getRepository('CadolesCoreBundle:Group')->findOneBy(array('fgall'=>true));
$output->writeln(" $nbusers sur ".count($datas)." > Ratachement ".$user->getId()." ".$user->getUsername());
2019-07-23 15:32:35 +02:00
$key = Uuid::uuid4();
2018-12-18 09:44:39 +01:00
$usergroup=new UserGroup();
2019-08-23 17:01:04 +02:00
$usergroup->setUser($user);
2018-12-18 09:44:39 +01:00
$usergroup->setGroup($group);
2019-07-23 15:32:35 +02:00
$usergroup->setKeyvalue($key);
2018-12-18 09:44:39 +01:00
$em->persist($usergroup);
2019-04-16 09:49:49 +02:00
$em->flush();
2019-08-23 17:01:04 +02:00
$em->clear();
//$user=$em->getRepository('CadolesCoreBundle:User')->find($data["id"]);
2018-12-18 09:44:39 +01:00
}
2019-03-13 17:30:41 +01:00
2019-04-17 17:27:19 +02:00
// On s'assure si masteridentity est à LDAP qu'au minimum un niveau01 possède un filtre LDAP
if($masteridentity=="LDAP") {
$niveau01=$em->createQueryBuilder()->select('n')->from('CadolesCoreBundle:Niveau01','n')->where('n.ldapfilter IS NOT NULL')->getQuery()->getResult();
if(!$niveau01) {
// Si ce n'est pas le cas on positionne un filtre ultra large sur le niveau01 de base
$niveau01=$group=$em->getRepository('CadolesCoreBundle:Niveau01')->find(-100);
2019-10-15 10:02:33 +02:00
if($ldap_template=="scribe")
$niveau01->setLdapfilter("(&(uid=*)(objectclass=inetOrgPerson)(!(description=Computer)))");
else
$niveau01->setLdapfilter($this->getContainer()->getParameter('openldapreqniveau01'));
2019-10-15 10:02:33 +02:00
2019-04-17 17:27:19 +02:00
$em->persist($niveau01);
$em->flush();
}
}
2020-09-30 13:55:31 +02:00
// On s'assure si masteridentity est à SSO qu'au minimum un niveau01 possède un attribut
if($masteridentity=="SSO") {
$niveau01=$em->createQueryBuilder()->select('n')->from('CadolesCoreBundle:Niveau01','n')->where('n.attributes IS NOT NULL')->getQuery()->getResult();
if(!$niveau01) {
// Si ce n'est pas le cas on positionne un attribut ultra large sur le niveau01 de base
$niveau01=$group=$em->getRepository('CadolesCoreBundle:Niveau01')->find(-100);
$niveau01->setAttributes('{"username":"*"}');
$em->persist($niveau01);
$em->flush();
}
}
2020-10-09 15:43:50 +02:00
// Génération du profils de permissions modérateurs
$metadata = $em->getClassMetaData('CadolesCoreBundle:PermModoProfil');
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);
$metadata->setIdGenerator(new AssignedGenerator());
$entityprofil = $em->getRepository('CadolesCoreBundle:PermModoProfil')->find(-100);
if(!$entityprofil) {
$entityprofil = new PermModoProfil();
$entityprofil->setId(-100);
$entityprofil->setName("Global");
$em->persist($entityprofil);
$em->flush();
}
// Affecter les permissions modérateurs sans profils sur le profils par défaut
$entitys = $em->getRepository('CadolesCoreBundle:PermModo')->findBy(["permmodoprofil"=>null]);
foreach($entitys as $entity) {
$entity->setPermmodoprofil($entityprofil);
$em->persist($entity);
$em->flush();
}
// Affecter le profil modérateur par défaut aux modérateurs qui n'en ont pas
$users = $em->getRepository('CadolesCoreBundle:User')->findBy(["role"=>"ROLE_MODO","permmodoprofil"=>null]);
foreach($users as $user) {
$user->setPermmodoprofil($entityprofil);
$em->persist($user);
$em->flush();
}
// Initialiser l'ensemble des profils modérateurs
$entityprofils = $em->getRepository('CadolesCoreBundle:PermModoProfil')->findAll();
foreach($entityprofils as $profil) {
$this->addModeration($profil,'cadoles_core_config_commun',0);
$this->addModeration($profil,'cadoles_core_config_theme',0);
$this->addModeration($profil,'cadoles_core_config_datauser',0);
$this->addModeration($profil,'cadoles_core_config_datausers',0);
$this->addModeration($profil,'cadoles_core_config_whitelist',0);
$this->addModeration($profil,'cadoles_core_config_niveau01',1);
$this->addModeration($profil,'cadoles_core_config_niveau02',1);
$this->addModeration($profil,'cadoles_core_config_group',1);
$this->addModeration($profil,'cadoles_core_config_registration',1);
$this->addModeration($profil,'cadoles_core_config_user',1);
$this->addModeration($profil,'cadoles_portal_config_pagetemplate',1);
$this->addModeration($profil,'cadoles_portal_config_page',1);
$this->addModeration($profil,'cadoles_portal_config_item',1);
$this->addModeration($profil,'cadoles_portal_config_alert',1);
$this->addModeration($profil,'cadoles_portal_config_calendar',1);
$this->addModeration($profil,'cadoles_portal_config_blog',1);
$this->addModeration($profil,'cadoles_portal_config_project',1);
$this->addModeration($profil,'cadoles_portal_config_flux',1);
$this->addModeration($profil,'cadoles_portal_config_notice',1);
$this->addModeration($profil,'cadoles_portal_config_icon',1);
$this->addModeration($profil,'cadoles_portal_config_synclimesurvey',0);
$this->addModeration($profil,'cadoles_portal_config_syncmoodle',0);
$this->addModeration($profil,'cadoles_portal_config_syncwordpress',0);
$this->addModeration($profil,'cadoles_core_config_statistic',1);
$this->addModeration($profil,'cadoles_core_config_mailing',1);
$this->addModeration($profil,'cadoles_core_config_importuser',0);
$this->addModeration($profil,'cadoles_cron_config',0);
$this->addModeration($profil,'cadoles_cron_config_log',0);
}
2020-09-30 13:55:31 +02:00
// Forcer le theme
$force_theme=$this->getContainer()->getParameter('force_theme');
if($force_theme) {
// On force la configuration du theme
$force_themename=$this->getContainer()->getParameter('force_themename');
$config = $em->getRepository('CadolesCoreBundle:Config')->find("theme");
if($config) {
$config->setValue($force_themename);
$em->persist($config);
$em->flush();
}
// On enlève l'accès de la sidebar
$sidebar = $em->getRepository('CadolesCoreBundle:Sidebar')->findOneBy(["path"=>"cadoles_core_config_theme"]);
if($sidebar) {
$em->remove($sidebar);
$em->flush();
}
}
2019-03-13 17:30:41 +01:00
$output->writeln('');
2018-12-18 09:44:39 +01:00
}
protected static function determineKernelRootDir(Event $event) {
$extra = $event->getComposer()->getPackage()->getExtra();
$rootdir = rtrim(getcwd(), '/');
return $rootdir . '/' . trim($extra['symfony-app-dir'], '/');
}
2020-10-09 15:43:50 +02:00
protected function addModeration($profil,$route,$visible) {
$em = $this->getContainer()->get('doctrine')->getEntityManager();
$entity=$em->getRepository('CadolesCoreBundle:PermModo')->findOneBy(["route"=>$route,"permmodoprofil"=>$profil]);
if(!$entity) {
$entity=new PermModo();
$entity->setRoute($route);
$entity->setVisible($visible);
$entity->setPermmodoprofil($profil);
$em->persist($entity);
$em->flush();
}
}
2018-12-18 09:44:39 +01:00
}