From 5399306e8707df0fabf44173bcd635a1c338ea41 Mon Sep 17 00:00:00 2001 From: afornerot Date: Wed, 24 Jul 2019 13:41:35 +0200 Subject: [PATCH] svg --- dicos/90_ninegate.xml | 16 ++-- .../CoreBundle/Command/data/core-init-01.sql | 2 +- .../CoreBundle/Resources/public/js/local.js | 13 +-- .../Resources/views/Include/head.html.twig | 1 + .../Controller/PagewidgetController.php | 39 +++++++- .../views/Pagewidget/viewchat.html.twig | 5 +- .../Controller/ChatController.php | 1 + .../Cadoles/WebsocketBundle/Form/ChatType.php | 10 +- .../Resources/views/Chat/client.html.twig | 96 +++++++++++++++++-- .../Topic/WebsocketCounter.php | 2 - .../WebsocketBundle/Topic/WebsocketTopic.php | 18 ++++ tmpl/ninegate.nginx.conf | 4 +- 12 files changed, 176 insertions(+), 31 deletions(-) diff --git a/dicos/90_ninegate.xml b/dicos/90_ninegate.xml index b4bb906f..1fd67d00 100644 --- a/dicos/90_ninegate.xml +++ b/dicos/90_ninegate.xml @@ -6,18 +6,18 @@ - + - + ninegate - - 5555 + + ninegate_websocket_portexterne @@ -168,10 +168,10 @@ - + 5555 - + 5556 @@ -275,6 +275,9 @@ ninegate_allow_hosts ninegate_dbuser ninegate_dbpass + + ninegate + ninegate @@ -383,6 +386,7 @@ ninegate_websocket_url ninegate_websocket_portinterne ninegate_websocket_portexterne + ninegate_websocket diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql index e475b660..d8c7576c 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Command/data/core-init-01.sql @@ -8,7 +8,7 @@ INSERT IGNORE INTO `niveau01` (`id`, `label`, `siren`) VALUES (-100, 'DRAAF', '130007107'); INSERT IGNORE INTO `user` (`id`, `niveau01_id`, `username`, `firstname`, `lastname`, `password`, `email`, `avatar`, `role`,`siren`,`authlevel`) VALUES -(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}XuBTTUoInXPRBr1msGCFHj0Nm1C83fj/ +(-100, -100, 'admin', 'Administrateur', 'draaf', '{SSHA}ydZGT20kB14WfmeVQZVPRTfbbrX0ahPR ', 'admin@ldapbundle.ac-arno.fr', 'admin.jpg', 'ROLE_ADMIN', '130007107', 'simple'); diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/public/js/local.js b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/public/js/local.js index 38dc1e54..2df2a00c 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/public/js/local.js +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/public/js/local.js @@ -77,26 +77,16 @@ $(document).on('ready', function(){ return false; }); + /* if( typeof CKEDITOR !== 'undefined') { CKEDITOR.on('dialogDefinition', function(ev) { try { - /* this just gets the name of the dialog */ var dialogName = ev.data.name; - - /* this just gets the contents of the opened dialog */ var dialogDefinition = ev.data.definition; - - - /* Make sure that the dialog opened is the link plugin ... otherwise do nothing */ if(dialogName == 'link') { - /* Getting the contents of the Target tab */ var informationTab = dialogDefinition.getContents('target'); - - /* Getting the contents of the dropdown field "Target" so we can set it */ var targetField = informationTab.get('linkTargetType'); - - /* Now that we have the field, we just set the default to _blank */ targetField['default'] = '_blank'; } @@ -109,4 +99,5 @@ $(document).on('ready', function(){ } }); } + */ }); \ No newline at end of file diff --git a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Include/head.html.twig b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Include/head.html.twig index fb406440..270f12f7 100644 --- a/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Include/head.html.twig +++ b/src/ninegate-1.0/src/Cadoles/CoreBundle/Resources/views/Include/head.html.twig @@ -100,6 +100,7 @@ .grid-item h3, .pagination>li>a, .pagination>li>span, + .modal-dialog, a { color: #{{ color['main'] }} diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php index 62e2bcbf..43b04ff4 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Controller/PagewidgetController.php @@ -13,6 +13,8 @@ use Symfony\Component\Finder\Finder; use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\HttpFoundation\File\File; use GuzzleHttp\Exception\RequestException; +use Symfony\Component\Form\FormError; + use Cadoles\PortalBundle\Entity\Pagewidget; use Cadoles\PortalBundle\Form\PagewidgetType; @@ -98,7 +100,11 @@ class PagewidgetController extends Controller if($page->getPagecategory()->getId()!=2) throw $this->createNotFoundException('Permission denied'); - if ($form->isValid()) { + // Sur erreur + $this->getErrorForm(null,$form,$request,$idwidgettype,$page,$entity,"submit"); + + // Sur validation + if ($form->get('submit')->isClicked() && $form->isValid()) { $idicon = $form->get('idicon')->getData(); $icon=$this->getDoctrine()->getRepository("CadolesPortalBundle:Icon")->findoneby(["id"=>$idicon]); $widgettype=$this->getDoctrine()->getRepository("CadolesPortalBundle:Widget")->findoneby(["id"=>$idwidgettype]); @@ -314,7 +320,38 @@ class PagewidgetController extends Controller return new Response($response); } + + + protected function getErrorForm($id,$form,$request,$idwidgettype,$page,$data,$mode) { + if ($form->get('submit')->isClicked()&&$mode=="delete") { + } + + if ($form->get('submit')->isClicked() && ($mode=="submit" || $mode=="update")) { + // Interdire l'insertion de 2 chat dans la meme page + if($idwidgettype==-1840) { + $pagewidget=$this->getDoctrine()->getRepository("CadolesPortalBundle:Pagewidget")->findoneby(["page"=>$page,"widget"=>-1840]); + if($pagewidget) { + $form->addError(new FormError("Vous ne pouvez pas insérer deux widgets de type Chat dans la même page")); + } + } + } + + if ($form->get('submit')->isClicked() && !$form->isValid()) { + $this->get('session')->getFlashBag()->clear(); + $validator = $this->get('validator'); + $errors = $validator->validate($data); + foreach( $errors as $error ) { + $request->getSession()->getFlashBag()->add("error", $error->getMessage()); + } + + $errors = $form->getErrors(); + foreach( $errors as $error ) { + $request->getSession()->getFlashBag()->add("error", $error->getMessage()); + } + } + } + public function viewurlAction($id,$access="config") { $em = $this->getDoctrine()->getManager(); $entity = $em->getRepository($this->labelentity)->find($id); diff --git a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewchat.html.twig b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewchat.html.twig index 3f93f6fa..fad31df1 100644 --- a/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewchat.html.twig +++ b/src/ninegate-1.0/src/Cadoles/PortalBundle/Resources/views/Pagewidget/viewchat.html.twig @@ -46,8 +46,11 @@ {{ entity.name }} -
+
+ {{ render(url('cadoles_websocket_chat',{'id':group,'framed':true,'border':entity.border,'colorbodybacklight':colorbodyback, 'colorbodyback':colorbodyback,'colorbodyfont':colorbodyfont})) }} +
{% endif %}
diff --git a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Controller/ChatController.php b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Controller/ChatController.php index 88089007..3bf42839 100644 --- a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Controller/ChatController.php +++ b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Controller/ChatController.php @@ -69,6 +69,7 @@ class ChatController extends Controller 'usesidebar' => false, 'userkey' => $key, 'groupid' => $id, + 'group' => $group, 'messages' => $messages, 'framed' => $framed, 'border' => $border, diff --git a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Form/ChatType.php b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Form/ChatType.php index b8910e88..f1eca332 100644 --- a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Form/ChatType.php +++ b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Form/ChatType.php @@ -31,7 +31,15 @@ class ChatType extends AbstractType 'required' => false, 'config' => ["height" => "100px",'filebrowserUploadRoute' => 'cadoles_portal_user_pagewidget_upload'] ]); - + + $builder + ->add("messagemail",CKEditorType::class,[ + 'config_name' => 'small_config', + 'label' => "Message", + 'mapped'=> false, + 'required' => false, + 'config' => ["height" => "200px",'filebrowserUploadRoute' => 'cadoles_portal_user_pagewidget_upload'] + ]); } public function configureOptions(OptionsResolver $resolver) diff --git a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Resources/views/Chat/client.html.twig b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Resources/views/Chat/client.html.twig index 681c7831..7ce7a392 100644 --- a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Resources/views/Chat/client.html.twig +++ b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Resources/views/Chat/client.html.twig @@ -36,6 +36,18 @@ line-height: 12px; margin-bottom: 10px; } + .bootstrap-switch{ + margin-top:5px; + } + .labelswitch { + line-height: 40px; + float: right; + margin-right: 10px; + } + #listtoavatar img { + margin:0px 5px 5px 0px; + cursor:pointer; + } #cke_1_bottom{ display:none } {% endblock %} @@ -43,10 +55,12 @@ {{ form_start(form) }}
{{ form_widget(form.message) }} + + Envoyer
- {{ form_end(form) }} +
{% for message in messages %} @@ -67,6 +81,35 @@
{% endfor %} + + + + {{ form_end(form) }} {% endblock %} {% block localexternalscript %} @@ -76,6 +119,7 @@ {% block localjavascript %} $(document).ready(function(){ + $(".switch").bootstrapSwitch(); var dateoptions = {weekday: "long", year: "numeric", month: "long", day: "numeric", hour: "2-digit", minute: "2-digit" }; @@ -120,22 +164,62 @@ $( "#sendbtn" ).click(function() { var data = CKEDITOR.instances["chat_message"].getData(); - if(data) { - event={mykey: "{{userkey}}", type: "add", message: data}; + if($("#sendbymail").bootstrapSwitch('state')) { + CKEDITOR.instances["chat_messagemail"].setData(data); + $("#mailsuject").val("{{app.session.get('appname')}} = Notification {{ group.label }}"); + $("#mailto").val(""); + //$("#listtoavatar").html(""); + + {% for user in group.users %} + {%if(user.user!=app.user)%} + $("#mailto").val($("#mailto").val()+";{{user.user.email}}"); + $("#listtoavatar").append($("")); + {%endif%} + {% endfor %} + + $('#mymodal-sendmail').modal('show'); + } + else { + if(data) { + event={mykey: "{{userkey}}", type: "add", message: data}; + session.publish("websocket/channel/{{groupid}}", event); + CKEDITOR.instances["chat_message"].setData(''); + + event={type: "add", group:{{groupid}}}; + parent.counter(event); + } + } + }); + + $( "#sendbtnmail" ).click(function() { + var data = CKEDITOR.instances["chat_messagemail"].getData(); + var subject=$("#mailsuject").val(); + var mailto=$("#mailto").val(); + + if(data&&subject&&mailto) { + event={mykey: "{{userkey}}", type: "add", message: data, mail: "true", to: mailto, subject: subject}; session.publish("websocket/channel/{{groupid}}", event); CKEDITOR.instances["chat_message"].setData(''); event={type: "add", group:{{groupid}}}; - parent.parent.counter(event); - } + parent.counter(event); + + $('#mymodal-sendmail').modal('hide'); + + } + else alert("Sujet, corps et destinataire(s) obligatoire"); }); $(document).on('click', '.delmessage', function(){ id=$(this).data("id"); event={mykey: "{{userkey}}", type: "del", id: id}; session.publish("websocket/channel/{{groupid}}", event); + }); - + $(document).on('click', '#listtoavatar img', function(){ + var mail = ";"+$(this).data("mail"); + $("#mailto").val($("#mailto").val().replace(mail, "")); + $(this).remove(); }); }) {% endif %} diff --git a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Topic/WebsocketCounter.php b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Topic/WebsocketCounter.php index 7b4b8e59..a4a67f5a 100644 --- a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Topic/WebsocketCounter.php +++ b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Topic/WebsocketCounter.php @@ -36,10 +36,8 @@ class WebsocketCounter implements TopicInterface */ public function onSubscribe(ConnectionInterface $connection, Topic $topic, WampRequest $request) { - $userid=$connection->userid; //this will broadcast the message to ALL subscribers of this topic. //$topic->broadcast(['log' => $connection->resourceId." has joined ".$topic->getId()." ".$userid]); - } /** diff --git a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Topic/WebsocketTopic.php b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Topic/WebsocketTopic.php index 0076fa01..01f46989 100644 --- a/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Topic/WebsocketTopic.php +++ b/src/ninegate-1.0/src/Cadoles/WebsocketBundle/Topic/WebsocketTopic.php @@ -88,6 +88,24 @@ class WebsocketTopic implements TopicInterface if($group&&$usergroup&&$user) { if($event["type"]=="add") { + if(array_key_exists("mail",$event)) { + $mail = $this->container->get('cadoles.core.service.mail'); + if($mail) { + $mail_params=array( + "subject" => $event["subject"], + "body_html"=>$event["message"], + "body_text"=>strip_tags($event["message"]) + ); + + // Transformer la liste des destinataires en tableau : [0] tjr vide on l'unset + $to=explode(";",$event["to"]); + unset($to[0]); + + $mail->sendEmail("template", $mail_params, $to, $user->getEmail(), $user->getLastname()." ".$user->getFirstname()); + $event["message"].="
Notification envoyée par mail"; + } + } + $message=new Message(); $message->setTopic($event["message"]); $message->setUser($user); diff --git a/tmpl/ninegate.nginx.conf b/tmpl/ninegate.nginx.conf index d411e94a..4cbe81b0 100644 --- a/tmpl/ninegate.nginx.conf +++ b/tmpl/ninegate.nginx.conf @@ -1,5 +1,5 @@ server { - listen 5555 ssl; + listen %%ninegate_websocket_portexterne ssl; ssl on; ssl_certificate %%server_cert; @@ -19,6 +19,6 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_pass http://%%web_url:5556; + proxy_pass http://%%web_url:%%ninegate_websocket_portinterne; } } \ No newline at end of file