synchro only
This commit is contained in:
parent
ee84ce033e
commit
8e9ff10223
@ -182,11 +182,7 @@ class OnlyCommand extends Command
|
||||
$onlyusers[$onlyuser->id]=$onlyuser->userName;
|
||||
}
|
||||
}
|
||||
|
||||
$response = \Unirest\Request::get($this->only_url.'/people',$headers);
|
||||
if($this->koresponse($response)) return 0;
|
||||
|
||||
|
||||
|
||||
// Controler les utilisateurs ninegate
|
||||
$this->writeln('');
|
||||
$this->writeln('== CONTROLE USER NINEGATE============================');
|
||||
@ -197,7 +193,6 @@ class OnlyCommand extends Command
|
||||
$this->writelnred("ERREUR ".$user->getUsername()." existe dans Ninegate mais pas dans OnlyOffice");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// On recherche la page template de group
|
||||
$pagetemplate=$this->em->getRepository("CadolesPortalBundle:Page")->findOneBy(["parentfor"=>"group"]);
|
||||
@ -275,6 +270,7 @@ class OnlyCommand extends Command
|
||||
$group->setFgall(false);
|
||||
$group->setFgtemplate(false);
|
||||
$group->setOwner($user);
|
||||
$group->setPagetemplate($pagetemplate);
|
||||
$group->setIdonlyoffice($onlygroup->id);
|
||||
|
||||
$this->em->persist($group);
|
||||
@ -330,51 +326,54 @@ class OnlyCommand extends Command
|
||||
$groupdescription=$group->getDescription();
|
||||
$groupowner=$group->getOwner();
|
||||
$groupisprivate=true;
|
||||
$tocreate=false;
|
||||
|
||||
// Si pas de propriétaire de projet on le rattache à admin
|
||||
if(!$groupowner)
|
||||
$groupowner=$this->em->getRepository("CadolesCoreBundle:USer")->findBy(["username"=>"admin"]);
|
||||
|
||||
// Le groupe a un identifiant only, on le recherche via cet ID
|
||||
if($group->getIdonlyoffice()) {
|
||||
if(!$simulate) {
|
||||
if($groupowner) {
|
||||
// On recherche le propriétaire du groupe dans only
|
||||
$respuser = \Unirest\Request::get($this->only_url.'/people/'.$groupowner->getUsername(),$headers);
|
||||
|
||||
$groupowner=$this->em->getRepository("CadolesCoreBundle:User")->findOneBy(["username"=>"admin"]);
|
||||
|
||||
if($groupowner) {
|
||||
// On recherche le propriétaire du groupe dans only
|
||||
$respuser = \Unirest\Request::get($this->only_url.'/people/'.$groupowner->getUsername(),$headers);
|
||||
|
||||
// Là normalement on a forcement une réponse positive
|
||||
if(!$this->koresponse($respuser)) {
|
||||
// Le groupe a un identifiant only, on le recherche via cet ID
|
||||
if($group->getIdonlyoffice()) {
|
||||
// On recherche le groupe dans only
|
||||
$respgroup = \Unirest\Request::get($this->only_url.'/project/'.$group->getIdonlyoffice(),$headers);
|
||||
|
||||
// Là normalement on n'a forcement une réponse positive
|
||||
if(!$this->koresponse($respuser)&&!$this->koresponse($respgroup)) {
|
||||
// Si le projet existe
|
||||
if(!$this->koresponse($respgroup)) {
|
||||
// On regarde s'il y a des changement
|
||||
if($respgroup->body->response->responsible->userName!=$groupowner->getUsername()||$respgroup->body->response->title!=$grouptitle||$respgroup->body->response->description!=$groupdescription||$respgroup->body->response->isPrivate!=$groupisprivate) {
|
||||
$this->writeln("Modification du groupe dans Only. Group = ".$group->getLabel());
|
||||
|
||||
// On modifie le groupe only
|
||||
$query = array('title' => $grouptitle, 'description' => $groupdescription, 'responsibleId' => $respuser->body->response->id, 'private' => $groupisprivate);
|
||||
$body = \Unirest\Request\Body::json($query);
|
||||
$respmodif = \Unirest\Request::put($this->only_url.'/project/'.$respgroup->body->response->id."/withSecurityInfo",$headers,$body);
|
||||
if($this->koresponse($respmodif)) {
|
||||
$this->writelnred("ERREUR SUR MODIFICATION du Group = ".$group->getLabel());
|
||||
}
|
||||
if(!$simulate) {
|
||||
// On modifie le groupe only
|
||||
$query = array('title' => $grouptitle, 'description' => $groupdescription, 'responsibleId' => $respuser->body->response->id, 'private' => $groupisprivate);
|
||||
$body = \Unirest\Request\Body::json($query);
|
||||
$respmodif = \Unirest\Request::put($this->only_url.'/project/'.$respgroup->body->response->id."/withSecurityInfo",$headers,$body);
|
||||
if($this->koresponse($respmodif)) {
|
||||
$this->writelnred("ERREUR SUR MODIFICATION du Group = ".$group->getLabel());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Sinon c'est qu'il a été supprimé via only : il faut donc le regénérer
|
||||
else {
|
||||
$tocreate=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Sinon c'est que l'on doit le créer dans Only
|
||||
else {
|
||||
if(!$simulate) {
|
||||
if($groupowner) {
|
||||
// On recherche le propriétaire du groupe dans only
|
||||
$respuser = \Unirest\Request::get($this->only_url.'/people/'.$groupowner->getUsername(),$headers);
|
||||
// Sinon c'est que l'on doit le créer dans Only
|
||||
else {
|
||||
$tocreate=true;
|
||||
}
|
||||
|
||||
// Là normalement on n'a forcement une réponse positive
|
||||
if(!$this->koresponse($respuser)) {
|
||||
|
||||
$this->writeln("Création du groupe dans Only. Group = ".$group->getLabel());
|
||||
// Création
|
||||
if($tocreate) {
|
||||
$this->writeln("Création du groupe dans Only. Group = ".$group->getLabel());
|
||||
if(!$simulate) {
|
||||
$query = array(
|
||||
'title' => $grouptitle,
|
||||
'description' => $groupdescription,
|
||||
@ -396,7 +395,7 @@ class OnlyCommand extends Command
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Si pas d'erreur on doit avoir à présent le projet dans only rattaché à un groupe ninegate
|
||||
// On va pouvoir s'occuper des membres du groupes
|
||||
if($group->getIdonlyoffice()) {
|
||||
@ -405,7 +404,12 @@ class OnlyCommand extends Command
|
||||
foreach($group->getUsers() as $member) {
|
||||
array_push($membersNingate,$member->getUser()->getUsername());
|
||||
}
|
||||
|
||||
|
||||
// Si groupe sans propriétaire on ajoute forcement admin à la liste des membres du groupe
|
||||
if(!$group->getOwner()) {
|
||||
array_push($membersNingate,"admin");
|
||||
}
|
||||
|
||||
// Liste des membres Only
|
||||
$membersOnly=[];
|
||||
$respmember = \Unirest\Request::get($this->only_url.'/project/'.$group->getIdonlyoffice().'/team',$headers);
|
||||
|
@ -933,7 +933,7 @@ class GroupController extends Controller
|
||||
$em = $this->getDoctrine()->getManager();
|
||||
if($group->getOwner()) {
|
||||
$usergroup=$em->getRepository("CadolesCoreBundle:Usergroup")->findOneBy(["user"=>$group->getOwner()]);
|
||||
if($usergroup) {
|
||||
if(!$usergroup) {
|
||||
$key = Uuid::uuid4();
|
||||
$usergroup=new Usergroup;
|
||||
$usergroup->setUser($group->getOwner());
|
||||
|
@ -39,7 +39,10 @@ class syncGroup implements EventSubscriber
|
||||
if(!($entity instanceof Group)) return;
|
||||
|
||||
// Synchronisation uniquement si changement de valeur
|
||||
$this->shouldSync = $args->hasChangedField('label');
|
||||
$this->shouldSync = $args->hasChangedField('label') ||
|
||||
$args->hasChangedField('description') ||
|
||||
$args->hasChangedField('owner') ||
|
||||
$args->hasChangedField('fgcanshare');
|
||||
|
||||
if($args->hasChangedField('label')) $this->oldid=$args->getOldValue('label');
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ use Cadoles\CoreBundle\Entity\User;
|
||||
use Cadoles\CoreBundle\Entity\Group;
|
||||
use Cadoles\CoreBundle\Entity\UserGroup;
|
||||
use Doctrine\ORM\EntityManager;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
class onlyService
|
||||
{
|
||||
@ -18,6 +19,7 @@ class onlyService
|
||||
protected $only_user;
|
||||
protected $only_password;
|
||||
protected $debug = true;
|
||||
protected $headers = [];
|
||||
|
||||
public function __construct($container, EntityManager $em)
|
||||
{
|
||||
@ -45,8 +47,45 @@ class onlyService
|
||||
//==================================================================================================================================================================
|
||||
|
||||
public function syncUser(User $user) {
|
||||
error_log("==SYNC ONLY USER==========================================================");
|
||||
// Recherche utilisateur eportail
|
||||
$this->mydebug("==SYNC ONLY USER==========================================================");
|
||||
|
||||
// Authentification à Only
|
||||
if($this->authOnly()) {
|
||||
// Recherche utilisateur only
|
||||
$this->mydebug("Recherche utilisateur only");
|
||||
$respuser = \Unirest\Request::get($this->only_url.'/people/'.$user->getUsername(),$this->headers);
|
||||
|
||||
// Si existe modification
|
||||
if(!$this->koresponse($respuser)) {
|
||||
$this->mydebug("Modification user = ".$user->getUsername());
|
||||
$onlyuser=$respuser->body->response;
|
||||
|
||||
// Si véritable modification
|
||||
if($onlyuser->firstName!=$user->getFirstname()||$onlyuser->lastName!=$user->getLastname()||$onlyuser->email!=$user->getEmail()) {
|
||||
$this->mydebug("Lancer la modification");
|
||||
$this->mydebug($onlyuser->firstName." !=".$user->getFirstname());
|
||||
$this->mydebug($onlyuser->lastName." !=".$user->getLastname());
|
||||
$this->mydebug($onlyuser->email." !=".$user->getEmail());
|
||||
|
||||
$query = array(
|
||||
'firstName' => $user->getFirstname(),
|
||||
'lastName' => $user->getLastname(),
|
||||
'email' => $user->getEmail(),
|
||||
);
|
||||
$body = \Unirest\Request\Body::json($query);
|
||||
$respupdate = \Unirest\Request::put($this->only_url.'/people/'.$onlyuser->id,$this->headers,$body);
|
||||
}
|
||||
}
|
||||
|
||||
// Sinon création
|
||||
else {
|
||||
$this->mydebug("Création user = ".$user->getUsername());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//$respuser = \Unirest\Request::get($this->only_url.'/people/'.$onlygroup->responsible->id,$this->headers);
|
||||
|
||||
// Correspondance profil ldapuser = profil eportail
|
||||
|
||||
@ -71,30 +110,108 @@ class onlyService
|
||||
//== Function Groupe================================================================================================================================================
|
||||
//==================================================================================================================================================================
|
||||
|
||||
public function syncGroup(Group $group, $oldid) {
|
||||
error_log("==SYNC ONLY GROUP=========================================================");
|
||||
public function syncGroup(Group $group, $oldid) {
|
||||
$this->mydebug("==SYNC ONLY GROUP=========================================================");
|
||||
|
||||
// Renommage du précédent groupe
|
||||
if(isset($oldid)&&$oldid!=$group->getLabel()) {
|
||||
// Authentification à Only
|
||||
if($this->authOnly()) {
|
||||
// Si groupe de travail
|
||||
if($group->getFgcanshare()) {
|
||||
// Info du groupe
|
||||
$grouptitle=$group->getLabel();
|
||||
$groupdescription=$group->getDescription();
|
||||
$groupowner=$group->getOwner();
|
||||
$groupisprivate=true;
|
||||
$tocreate=false;
|
||||
|
||||
// Si pas de propriétaire de projet on le rattache à admin
|
||||
if(!$groupowner)
|
||||
$groupowner=$this->em->getRepository("CadolesCoreBundle:USer")->findOneBy(["username"=>"admin"]);
|
||||
|
||||
if($groupowner) {
|
||||
// On recherche le propriétaire du groupe dans only
|
||||
$this->mydebug("Recherche du propriétaire du group only");
|
||||
$respuser = \Unirest\Request::get($this->only_url.'/people/'.$groupowner->getUsername(),$this->headers);
|
||||
|
||||
// Normalement on a toujours le propriétaire dans only
|
||||
if(!$this->koresponse($respuser)) {
|
||||
// Si idonlyoffice de lié
|
||||
if($group->getIdonlyoffice()) {
|
||||
// Recherche groupe only
|
||||
$this->mydebug("Recherche group only ".$group->getIdonlyoffice());
|
||||
$respgroup = \Unirest\Request::get($this->only_url.'/project/'.$group->getIdonlyoffice(),$this->headers);
|
||||
|
||||
// Si existe modification
|
||||
if(!$this->koresponse($respgroup)) {
|
||||
$this->mydebug("Modification Group = ".$group->getLabel());
|
||||
$onlygroup=$respgroup->body->response;
|
||||
|
||||
// Si véritable modification
|
||||
if($onlygroup->responsible->userName!=$groupowner->getUsername()||$onlygroup->title!=$grouptitle||$onlygroup->description!=$groupdescription||$onlygroup->isPrivate!=$groupisprivate) {
|
||||
$this->mydebug("Lancer la modification");
|
||||
$this->mydebug($respuser->body->response->userName." !=".$groupowner->getUsername());
|
||||
$this->mydebug($onlygroup->title." !=".$grouptitle);
|
||||
$this->mydebug($onlygroup->description." !=".$groupdescription);
|
||||
$this->mydebug($onlygroup->isPrivate." !=".$groupisprivate);
|
||||
|
||||
$query = array(
|
||||
'title' => $grouptitle,
|
||||
'description' => $groupdescription,
|
||||
'responsibleId' => $respuser->body->response->id,
|
||||
'private' => $groupisprivate
|
||||
);
|
||||
$body = \Unirest\Request\Body::json($query);
|
||||
$respupdate = \Unirest\Request::put($this->only_url.'/project/'.$onlygroup->id."/withSecurityInfo",$this->headers,$body);
|
||||
}
|
||||
}
|
||||
|
||||
// Sinon c'est qu'il a été supprimé via only : il faut donc le regénérer
|
||||
else {
|
||||
$tocreate=true;
|
||||
}
|
||||
}
|
||||
|
||||
// Sinon il faut le créer dans only
|
||||
else {
|
||||
$tocreate=true;
|
||||
}
|
||||
|
||||
// Création
|
||||
if($tocreate) {
|
||||
$this->mydebug("Création Group = ".$group->getLabel());
|
||||
$query = array(
|
||||
'title' => $grouptitle,
|
||||
'description' => $groupdescription,
|
||||
'responsibleId' => $respuser->body->response->id,
|
||||
'private' => $groupisprivate,
|
||||
'notify' => true
|
||||
);
|
||||
$body = \Unirest\Request\Body::json($query);
|
||||
$respsubmit = \Unirest\Request::post($this->only_url.'/project/withSecurity',$this->headers,$body);
|
||||
if(!$this->koresponse($respsubmit)) {
|
||||
$group->setIdonlyoffice($respsubmit->body->response->id);
|
||||
$this->em->persist($group);
|
||||
$this->em->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Si non groupe de travail mais avec un id Only
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// On recherche le groupe à insérer / modifier
|
||||
public function delGroup(Group $group) {
|
||||
|
||||
// Si existe modification = rien à faire normalement
|
||||
// Sinon création
|
||||
// On recherche le groupe eportail
|
||||
|
||||
return true;
|
||||
}
|
||||
// Si existe suppression
|
||||
|
||||
public function delGroup(Group $group) {
|
||||
|
||||
// On recherche le groupe eportail
|
||||
|
||||
// Si existe suppression
|
||||
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//==================================================================================================================================================================
|
||||
//== Function GroupUser=============================================================================================================================================
|
||||
@ -122,8 +239,52 @@ public function addUserGroup(UserGroup $usergroup) {
|
||||
// Création du rattachement
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private function authOnly() {
|
||||
// Only Office est-il dans le domaine
|
||||
if(stripos($this->only_url,"/")===0)
|
||||
$this->only_url="https://".$this->container->getParameter("weburl").$this->only_url;
|
||||
$indomaine = (stripos($this->only_url,$this->container->getParameter("weburl"))!==false);
|
||||
|
||||
// Si hors domaine on utilise le proxy si proxy il y a
|
||||
if(!$indomaine) {
|
||||
$PROXYactivate = $this->em->getRepository("CadolesCoreBundle:Config")->find("PROXYactivate")->getValue();
|
||||
if($PROXYactivate) {
|
||||
$PROXYserver = $this->em->getRepository("CadolesCoreBundle:Config")->find("PROXYserver")->getValue();
|
||||
$PROXYport = $this->em->getRepository("CadolesCoreBundle:Config")->find("PROXYport")->getValue();
|
||||
\Unirest\Request::proxy($PROXYserver, $PROXYport, CURLPROXY_HTTP, true);
|
||||
}
|
||||
}
|
||||
|
||||
\Unirest\Request::verifyPeer(false);
|
||||
\Unirest\Request::verifyHost(false);
|
||||
\Unirest\Request::timeout(5);
|
||||
$this->headers = ['Host' => $this->only_host, 'Accept' => 'application/json','Content-Type'=>'application/json','Retry-After'=>'5'];
|
||||
$query = array('userName' => $this->only_user, 'password' => $this->only_password);
|
||||
$body = \Unirest\Request\Body::json($query);
|
||||
|
||||
$response = \Unirest\Request::post($this->only_url.'/authentication',$this->headers,$body);
|
||||
if($this->koresponse($response)) return false;
|
||||
$token=$response->body->response->token;
|
||||
$this->headers["Authorization"]=$token;
|
||||
return true;
|
||||
}
|
||||
|
||||
private function koresponse($response) {
|
||||
if($response->code>=Response::HTTP_BAD_REQUEST) {
|
||||
$this->mydebug("ERREUR ".$response->code);
|
||||
if(property_exists($response,"body") && property_exists($response->body,"error")) $this->mydebug("ERREUR ".$response->body->error->message);;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private function mydebug($texte) {
|
||||
if($this->debug) error_log("==SYNC ONLY USER==========================================================");
|
||||
if($this->debug) error_log($texte);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -994,7 +994,7 @@ class InitDataCommand extends ContainerAwareCommand
|
||||
$entityWidget->setParameter($parameter);
|
||||
$em->persist($entityWidget);
|
||||
}
|
||||
else {
|
||||
elseif($entityWidget) {
|
||||
$em->remove($entityWidget);
|
||||
}
|
||||
|
||||
@ -1241,21 +1241,23 @@ class InitDataCommand extends ContainerAwareCommand
|
||||
if(!$entityPagewidget) {
|
||||
$entityWidget = $em->getRepository('CadolesPortalBundle:Widget')->find($widgetid);
|
||||
|
||||
$entityPagewidget = new Pagewidget();
|
||||
$entityPagewidget->setId($id);
|
||||
$entityPagewidget->setLoc($loc);
|
||||
$entityPagewidget->setRoworder($order);
|
||||
$entityPagewidget->setName($title);
|
||||
$entityPagewidget->setHeight($entityWidget->getHeight());
|
||||
$entityPagewidget->setAutoajust($entityWidget->getAutoajust());
|
||||
$entityPagewidget->setBorder($border);
|
||||
$entityPagewidget->setOpened($entityWidget->getOpened());
|
||||
$entityPagewidget->setIcon($entityWidget->getIcon());
|
||||
$entityPagewidget->setPage($entityPage);
|
||||
$entityPagewidget->setWidget($entityWidget);
|
||||
$entityPagewidget->setParameter($fields);
|
||||
$em->persist($entityPagewidget);
|
||||
$em->flush();
|
||||
if($entityWidget) {
|
||||
$entityPagewidget = new Pagewidget();
|
||||
$entityPagewidget->setId($id);
|
||||
$entityPagewidget->setLoc($loc);
|
||||
$entityPagewidget->setRoworder($order);
|
||||
$entityPagewidget->setName($title);
|
||||
$entityPagewidget->setHeight($entityWidget->getHeight());
|
||||
$entityPagewidget->setAutoajust($entityWidget->getAutoajust());
|
||||
$entityPagewidget->setBorder($border);
|
||||
$entityPagewidget->setOpened($entityWidget->getOpened());
|
||||
$entityPagewidget->setIcon($entityWidget->getIcon());
|
||||
$entityPagewidget->setPage($entityPage);
|
||||
$entityPagewidget->setWidget($entityWidget);
|
||||
$entityPagewidget->setParameter($fields);
|
||||
$em->persist($entityPagewidget);
|
||||
$em->flush();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ Alias /ninegate /var/www/html/ninegate/web
|
||||
php_admin_flag allow_url_fopen On
|
||||
</Directory>
|
||||
|
||||
%if %%getVar("ninegate_activate_websocket", 'non') == "oui"
|
||||
Listen %%adresse_ip_eth0:%%ninegate_websocket_portexterne
|
||||
<VirtualHost %%adresse_ip_eth0:%%ninegate_websocket_portexterne>
|
||||
ErrorLog /var/log/apache2/ssl_error.log
|
||||
@ -26,4 +27,5 @@ Listen %%adresse_ip_eth0:%%ninegate_websocket_portexterne
|
||||
|
||||
ProxyPass / ws://%%adresse_ip_eth0:%%ninegate_websocket_portinterne retry=0 keepalive=On
|
||||
ProxyPassReverse / ws://%%adresse_ip_eth0:%%ninegate_websocket_portinterne retry=0
|
||||
</VirtualHost>
|
||||
</VirtualHost>
|
||||
%end if
|
@ -45,9 +45,9 @@ parameters:
|
||||
websocket_portinterne: %%ninegate_websocket_portinterne
|
||||
%else
|
||||
websocket_activate: false
|
||||
websocket_host:
|
||||
websocket_port:
|
||||
websocket_portinterne:
|
||||
websocket_host: %%web_url
|
||||
websocket_port: 80
|
||||
websocket_portinterne: 80
|
||||
%end if
|
||||
%if %%getVar("ninegate_activate_portal", 'non') == "oui"
|
||||
portal_activate: true
|
||||
|
Loading…
Reference in New Issue
Block a user