Commit 512a4e97 authored by Raph El's avatar Raph El
Browse files

Merge branch 'development' of https://gitlab.adullact.net/pixelhumain/survey into development

parents c014f2af 9a126f42
var answerObject={
delete : function(id, callB){
getAjax("",baseUrl+"/survey/co/delete/id/"+id,function(){
if(notNull(callB))
callB();
else{
toastr.success("La candidature a été supprimée avec succès");
$("#allAnswersList .ansline"+id).remove();
}
},"html");
},
mailTo : {
subject: "Votre candidature a été validée",
validation : function(id, step){
var msg="<span style='white-space: pre-line;'>"+$("#send-mail-admin #message-email").text()+"<br/></span>"+
aObj.mailTo.defaultRedirect(elt, type, id);
var params={
tplMail : $("#send-mail-admin #contact-email").val(),
tpl : "basic",
tplObject : answerObject.mailTo.subject,
html: msg
};
ajaxPost(
null,
baseUrl+"/survey/answer/mail/validation/",
params,
function(data){
toastr.success("Le mail a été envoyé avec succès");
}
);
},
initMessage : true,
initObject : true,
initMail: function(elt){
if(typeof elt.creator != "undefined" && elt.creator.email)
return elt.creator.email;
else
return "";
},
defaultObject : function(elt){
return "La réponse demande d'être approfondi";
},
defaultRedirect : function(elt, id){
urlMail=(notNull(costum)) ?
return "<a href='"+baseUrl+"#answer.index.id."+id+"' target='_blank'>Retrouvez la page "+elt.name+" en cliquant sur ce lien</a>";
},
defaultMessage : function(elt, type, id){
var nameContact=(typeof elt.creator != "undefined" && elt.creator.name) ? elt.creator.name : "";
var str="Bonjour"+((notEmpty(nameContact)) ? " "+nameContact : "")+",\n"+
"Le contenu que vous avez publié demande d'être approfindi : \n"+
" - Référencer l'adresse\n"+
" - Ajouter la description, des mots clés, une image\n"+
" - Les dates ne sont pas cohérentes\n"+
"Encore un petit effort et vos points seront attribués";
return str;
},
bootbox : function(aObj, elt, type, id){
bootbox.dialog({
onEscape: function() {},
message: '<div id="send-mail-admin" class="row"> ' +
'<div class="col-xs-12"> ' +
'<span>Email</span> ' +
'<input type="text" id="contact-email" class="col-xs-12" value="'+aObj.mailTo.initMail(elt)+'"/>'+
'</div>'+
'<div class="col-xs-12"> ' +
'<span>Object</span> ' +
'<input type="text" id="object-email" class="col-xs-12" value="'+aObj.mailTo.defaultObject(elt)+'"/>'+
'</div>'+
'<div class="col-xs-12"> ' +
'<span>Message</span> ' +
'<textarea id="message-email" class="col-xs-12 text-dark" style="min-height:250px;">'+aObj.mailTo.defaultMessage(elt, type, id)+'</textarea>'+
'</div>'+
'</div>',
buttons: {
success: {
label: "Ok",
className: "btn-primary",
callback: function () {
aObj.mailTo.sendMail(aObj, elt, type, id);
}
},
cancel: {
label: trad["cancel"],
className: "btn-secondary",
callback: function() {}
}
}
});
},
validate : function(aObj, elt, type, id){
}
}
}
\ No newline at end of file
......@@ -15,6 +15,7 @@
'admindirectory'=>'survey.controllers.answer.admin.DirectoryAction',
'directory'=>'survey.controllers.answer.DirectoryAction',
'get' => 'survey.controllers.answer.GetAction',
'sendmail' => 'survey.controllers.answer.mail.SendAction',
);
}
public function actionViews($tpl="survey.views.tpls.forms.cplx.answers"){
......
<?php
class SendAction extends CAction {
public function run($id, $tpl="validation", $step=null) {
$controller=$this->getController();
$msg=null;
if(isset($_POST["tpl"]))
$tpl=$_POST["tpl"];
if(isset($_POST["step"]))
$step=$_POST["step"];
if(isset($_POST["msg"]))
$msg=$_POST["msg"];
$mailParams=Answer::mailProcess($id, $tpl, $step, $msg);
Rest::json(array("result"=>true, "msg"=>"Ok : webhook handdled"));
}
}
\ No newline at end of file
......@@ -274,11 +274,10 @@ class Answer{
}
return $elements;
}
public static $mailTpl=array(
"validation"=>array(
"subject"=> "La candidature {nameAns} a été validée",
"msg"=>"Nous vous informons que la candidature que vous avez soumise a été validée par les administrateurs. Vous pouvez retrouvez toutes les informations au lien suivant"
)
public static $mailConfig=array(
"validation"=>["tpl"=>"answer.validation", "subject"=>"La candidature {what} a été validée"],
"rejected"=>["tpl"=>"answer.rejected", "subject"=>"La candidature {what} a été rejetée"],
"default"=>["tpl"=>"answer.default", "subject"=>""]
);
public static function getCommunityToNotify($answer, $entry=null){
$arrayMail=array();
......@@ -286,8 +285,8 @@ class Answer{
foreach($answer["links"] as $k => $v){
if($k=="answered" && (empty($entry) || in_array("answered",$entry))){
foreach($v as $id){
$people=Element::getElementById($id, Person::COLLECTION, null, array("email") );
array_push($arrayMail, $people["email"]);
$people=Element::getElementById($id, Person::COLLECTION, null, array("email","name","slug") );
array_push($arrayMail, $people);
}
}
}
......@@ -300,24 +299,40 @@ class Answer{
return $arrayMail;
}
public static function getMailNotifification($id, $key, $step){
public static function mailProcess($id, $tpl, $step, $infos){
$costum = CacheHelper::getCostum();
$answer=Answer::getById($id);
$mailsCommunity=Answer::getCommunityToNotify($answer);
$answer=self::getById($id);
$mailsCommunity=self::getCommunityToNotify($answer);
$answer["mappingValues"]=array();
$form=Form::getById($answer["form"]);
$form=Form::getByIdMongo($answer["form"]);
if(isset($form["mapping"]))
$answer["mappingValues"]=Answer::getMappingValues($res["form"]["mapping"], $ans);
$answer["mappingValues"]=self::getMappingValues($form["mapping"], $answer);
$nameAnsw=(isset($answer["mappingValues"]["name"])) ? $answer["mappingValues"]["name"] : "";
foreach($mailsCommunity as $email){
/*if(Costum::isSameFunction("getAnswerCommunityToNotify")){
}else{
$subject= ;
$msg="Bonjour {contactName}, ";
}*/
foreach($mailsCommunity as $c){
$params = array (
"type" => Cron::TYPE_MAIL,
"tpl"=>self::$mailConfig[$tpl]["tpl"],
"subject" => "[".Mail::getAppName()."] ".Yii::t("mail",self::$mailConfig[$tpl]["subject"], array("{what}"=>$nameAnsw)),
"from"=>Yii::app()->params['adminEmail'],
"to" => $c["email"],
"tplParams" => array( "user"=> $c ,
"title" => Mail::getAppName() ,
"answer" => $answer,
"form"=>$form,
"msg"=>@$infos));
$params=Mail::getCustomMail($params);
Mail::schedule($params);
}
if(Costum::isSameFunction("AnswerMailProcess")){
// CARREFUL $costumUserArray need to be return as result : return $params["costumUserArray"]
Costum::sameFunction("AnswerMailProcess", array(
"tpl"=>$tpl,
"step"=>$step,
"infos"=>$infos,
"form"=>$form,
"answer"=>$answer)
);
}
}
}
......
......@@ -94,12 +94,6 @@ if(isset($this->costum["contextType"]) && isset($this->costum["contextId"])){
margin-top: -1px;
}
}
@media (max-width: 768px){
h1, h2, h3, h4, h5, h6 {
display: block;
font-size: 1.9em;
}
}
#customHeader #newsstream .loader{
display: none;
}
......
......@@ -37,10 +37,11 @@ if( $mode != "pdf" ){
$thumb=$elt["thumbImg"]=(isset($elt["profilThumbImageUrl"])) ? Yii::app()->createUrl($elt["profilThumbImageUrl"]) : Yii::app()->getModule( Yii::app()->params["module"]["parent"] )->getAssetsUrl()."/images/thumb/default_organizations.jpg";
if($isOperator && $oid==(string)$operatorOf["_id"])
$alreadyCandidate=true;
// Un opérateur a déja été selectionné !
if($state != "0")
{
$selectedOperator = true;
$str = '<tr>'.
$str .= '<tr>'.
'<td class="padding-top-15">Opérateur</td>'.
'<td><a href="#page.type.organizations.id.'.$oid.'" class="lbh-preview-element"><img src="'.$thumb.'" width=50 height=50/> '.$elt["name"].'</a></td>'.
'<td class="padding-top-15"><span class="label label-success">Validé</span></td>'.
......@@ -58,34 +59,57 @@ if( $mode != "pdf" ){
'</td>'.
'<td class="padding-top-15">';
if($isFinanceur)
$str.='<span class="label label-success"><a href="javascript:;" class="validateOperator text-white" data-id="'.$oid.'"> Valider l\'opérateur</a></span>';
$str.='<span class="label label-warning"><a href="javascript:;" class="validateOperator text-white" data-id="'.$oid.'"> Valider l\'opérateur</a></span>';
else
$str.='<span class="label italic text-dark">En attente de traitement</span>';
$str.='</td>'.
'</tr>';
}
}
}
} else{
$str="<tr>".
"<td colspan='2'>Aucun opérateur n'est positionné sur ce dossier</td>".
"</tr>";
}
echo $str;
//if role operateurs
if($isOperator && !$selectedOperator){
if( !$alreadyCandidate && @$answer["step"]!="deal12"){
?>
<tr>
<td colspan='2' class="text-center" >
<a href="javascript:;" data-oid="<?php echo (string)$operatorOf["_id"] ?>" class="intentOperator btn btn-primary">Demande de prise en charge en tant qu'opérateur <?php echo $operatorOf["name"] ?></a>
</td>
</tr>
<?php
}else{ ?>
// Si l'utilisateur a un role opérator
if(!$selectedOperator){
if($isOperator && !$isFinanceur){
if( !$alreadyCandidate && @$answer["step"]!="deal12"){
?>
<tr>
<td colspan='2' class="text-center" >
<a href="javascript:;" data-oid="<?php echo (string)$operatorOf["_id"] ?>" class="intentOperator btn btn-primary">Demande de prise en charge en tant qu'opérateur <?php echo $operatorOf["name"] ?></a>
</td>
</tr>
<?php
}else{ ?>
<tr>
<td colspan='3' class="text-center" >
Vous avez déjà inscrit <?php echo @$operatorOf["name"] ?> sur la liste des opérateurs
</td>
</tr>
<?php }
}else if($isFinanceur){ ?>
<tr>
<td colspan='3' class="text-center" >
Vous avez déjà inscrit <?php echo @$operatorOf["name"] ?> sur la liste des opérateurs
<td colspan="3">
<select id="operators-selections" path="links.operators" style="width:100%;" data-financeur="true">
<option class='' selected>Ajouter un opérateur à ce dossier</option>
<?php
foreach ($parentForm["communityLinks"] as $v => $f) {
if($f["type"]==Organization::COLLECTION
&& isset($f["roles"]) && in_array("Opérateur", $f["roles"])){
$elt=Element::getElementById($v, $f["type"], null, array("name", "profilThumbImageUrl"));
echo "<option class='optoper' value='".$v."' ".((isset($selectedOps) && $selectedOps==$v) ? "selected" : "").">".$elt["name"]."</option>";
}
} ?>
</select>
</td>
</tr>
<?php }
} ?>
</tbody>
......@@ -93,19 +117,24 @@ if( $mode != "pdf" ){
<?php if($isFinanceur && !$selectedOperator){
if(!@$answer["step"] || in_array($answer["step"], ["deal1","deal12"])){ ?>
<div class="col-xs-12 text-center margin-top-50 well">
<span style="font-size: 22px;font-weight: 800;">Ce dossier n'a pas encore d'opérateur rattaché. En tant que financeurs ou administrateur de la DEAL, veuillez valider un opérateur afin de passer ce dossier à l'étape suivant d'instruction.</span>
<span style="font-size: 22px;font-weight: 800;">Ce dossier n'a pas encore d'opérateur rattaché. En tant que financeurs ou administrateur de la DEAL, veuillez valider un opérateur afin de passer ce dossier à l'étape suivant d'instruction.<br/>
Vous pouvez aussi sélectionner un opérateur de votre choix qui sera mieux placé pour répondre au dossier du demandeur.</span>
</div>
<?php }
}
// ELSE On rentre dans le cas où c'est un propriétaire qui a soumis le dossier
// Il voit donc plusieurs états : possibilité de choisir son opérateur (deal12) ou de laisser libre.(deal1)
// Il a aussi un bouton de soumission afin d'instruire le dossier et de le rendre visible pour les financeurs opérateurs et admin
} else { ?>
<?php
if(@$answer["step"]){
// deal 1 => cas où le demandeur a soumis son dossier mais qu'il n'a pas choisi d'opé
if($answer["step"]=="deal1"){ ?>
<div class="col-xs-12 text-center margin-top-50 well">
<span style="font-size: 22px;font-weight: 800;">Vous avez soumis votre dossier.<br/>Votre candidature est en attente d'opérateur<br/> Une fois positionné, l'opérateur prendra en charge la suite de la canditature afin d'établir les financenements et le suivi des travaux.</span>
</div>
<?php }else{
// Cas ou l'opérateur a été choisi par le demandeur et où le dossier avance dans les steps
foreach ($answer["links"]["operators"] as $oid => $state) {
$opId=$oid;
$operator=Element::getElementById($oid, Organization::COLLECTION, null, array("name","slug", "profilThumbImageUrl"));
......@@ -127,7 +156,9 @@ if( $mode != "pdf" ){
</div>
<?php }
// ELse dossier pas
}else{ ?>
<div class="form-operator col-xs-12 no-padding">
<label for="<?php echo $kunik ?>">
<h4 style="color:<?php echo ($titleColor) ? $titleColor : "black"; ?>">
......@@ -198,6 +229,7 @@ if( $mode != "pdf" ){
});
$("#operators-selections").off().on("change", function(){
var oid = $(this).val();
var actionFromFinanceur=(notNull($(this).data("financeur")) && $(this).data("financeur")) ? true : false;
if(notNull(oid)){
var valOp= 0;
submitVal="deal12";
......@@ -216,7 +248,10 @@ if( $mode != "pdf" ){
// if(notNull($(this).data("action"))
// ctxTpl.action=$(this).data("action");
dataHelper.path2Value( ctxTpl, function(params) {
toastr.success("Votre préférence opérateur a bien été prise en compte");
if(actionFromFinanceur)
urlCtrl.loadByHash(location.hash);
else
toastr.success("Votre préférence opérateur a bien été prise en compte");
//urlCtrl.loadByHash(location.hash);
});
}
......@@ -273,14 +308,24 @@ if( $mode != "pdf" ){
function validateForStep3(){
dataHelper.path2Value( ctxTpl, function(params) {
ctxTpl = {
id : "<?php echo $answer['_id'] ?>",
id : "<?php echo (string)$answer['_id'] ?>",
collection : "answers",
path : "step",
value : "deal3" //pourrait etre un parametre element.costum.form.stepOperateur : deal3
};
mylog.log("save step save",ctxTpl);
dataHelper.path2Value( ctxTpl, function(params) {
urlCtrl.loadByHash(location.hash);
//Send mail Validation
toastr.success("La validation de l'opérateur a été prise en compte.<br/>Un mail de notification est en cours d'envoie");
ajaxPost(
null,
baseUrl+"/survey/answer/sendmail/id/<?php echo (string)$answer['_id'] ?>",
{step:"<?php echo @$answer["step"] ?>"},
function(data){
toastr.success("Un mail a été envoyé à toutes les parties prenantes afin de les notifier");
urlCtrl.loadByHash(location.hash);
}
);
} );
} );
}
......
......@@ -89,12 +89,6 @@ if(isset($this->costum["contextType"]) && isset($this->costum["contextId"])){
margin-top: -1px;
}
}
@media (max-width: 768px){
h1, h2, h3, h4, h5, h6 {
display: block;
font-size: 1.9em;
}
}
#customHeader #newsstream .loader{
display: none;
}
......
......@@ -149,7 +149,7 @@ $initAnswerFiles=Document::getListDocumentsWhere(array(
</div>
</script>
<!---->
</div>
<?php } ?>
</div>
<?php if($mode != "pdf"){ ?>
......@@ -187,88 +187,34 @@ $initAnswerFiles=Document::getListDocumentsWhere(array(
endpoint:null
},
deleteFile: {
enabled: true//,
// endpoint: baseUrl+'/'+moduleId+'/document/delete/id/server/file'
enabled: true
},
callbacks: {
//when a img is selected
/*onSubmit: function(id, fileName) {
//if(typeof v.endPoint == "undefined")
// $(domElement).fineUploader('setEndpoint',uploadObj.path);
console.log("coucou",id,this);
alert(uploadAnswerObj.dom);
listObject=$("#"+uploadAnswerObj.dom).fineUploader('getUploads');
showBtnUpload=false;
if(listObject.length > 0){
$.each(listObject, function(e,v){
if(v.status == "submitting")
showBtnUpload=true;
});
}
if( showBtnUpload ){
$("#"+uploadAnswerObj.dom+"_submit").parent().show();//.fineUploader('uploadStoredFiles');
}
},*/
/* onCancel: function(id) {
if(($("ul.qq-upload-list > li").length-1)<=0)
$('#trigger-upload').addClass("hide");
},*/
onPasteReceived: function(blob) {
},
onSubmitDelete: function(id) {
//alert("id");
//mylog.log(this.getName(id));
//this.setDeleteFileParams({ids: [this.getName(id)]}, id);
onPasteReceived: function(blob) {
},
//launches request endpoint
//onUpload: function(id, fileName) {
//alert(" > upload : "+id+fileName+contextData.type+contextData.id);
//alert(" > request : "+ uploadObj.id +" :: "+ uploadObj.type);
//mylog.log('onUpload uplaodObj',uploadObj);
//var ex = $('.fine-uploader-manual-trigger').fineUploader('getEndpoint');
//mylog.log('onUpload getEndpoint',ex);
//},
//launched on upload
//onProgress: function(id, fileName, uploadedBytes,totalBytes) {
/*mylog.log('onProgress uplaodObj',uploadObj);
var ex = $('.fine-uploader-manual-trigger').fineUploader('getEndpoint');
mylog.log('onProgress getEndpoint',ex);
mylog.log('getInProgress',$('.fine-uploader-manual-trigger').fineUploader('getInProgress'));*/
//alert("progress > "+" :: "+ uploadObj.id +" :: "+ uploadObj.type);
//},
onSubmitDelete: function(id) {},
//when every img finish upload process whatever the status
onComplete: function(id, fileName,responseJSON,xhr) {
mylog.log("onCompleate", id, fileName, responseJSON);
setFiles={};
setFiles[responseJSON.id.$id]=responseJSON;
var serverPathToFile = responseJSON.docPath,
fileItem = this.getItemByFileId(id);
var viewTnh = qq(fileItem).getByClass("qq-upload-link")[0];
if(typeof viewTnh != "undefined")
viewTnh.setAttribute("href", serverPathToFile);
// $fileItem.find(".qq-upload-link")
// .attr("href", serverPathToFile)
// .removeClass("hide");
this.setDeleteFileEndpoint(baseUrl+"/"+moduleId+"/document/deletedocumentbyid/id/"+responseJSON.id.$id, id);
var serverPathToFile = responseJSON.docPath,
fileItem = this.getItemByFileId(id);
var viewTnh = qq(fileItem).getByClass("qq-upload-link")[0];
if(typeof viewTnh != "undefined")
viewTnh.setAttribute("href", serverPathToFile);
this.setDeleteFileEndpoint(baseUrl+"/"+moduleId+"/document/deletedocumentbyid/id/"+responseJSON.id.$id, id);
if(!responseJSON.result){
toastr.error(trad.somethingwentwrong+" : "+responseJSON.msg );
mylog.error(trad.somethingwentwrong , responseJSON.msg)
}
},
onStatusChange : function(id, oldStatus, newStatus) {
onStatusChange : function(id, oldStatus, newStatus) {
},
onSessionRequestComplete:function(response, success, xhrOrXdr){
},
//when all upload is complete whatever the result
/* onAllComplete: function(succeeded, failed) {
mylog.log("ooooooooooooo",succeeded,failed);
$("#"+uploadAnswerObj.dom+"_submit").parent().fadeOut();
},*/
onError: function(id) {
toastr.info(trad.somethingwentwrong);
}
......@@ -281,8 +227,6 @@ $initAnswerFiles=Document::getListDocumentsWhere(array(
},
autoUpload: false
}).on("submit", function(event,id, fileName) {
//if(typeof v.endPoint == "undefined")
// $(domElement).fineUploader('setEndpoint',uploadObj.path);
listObject=$(this).fineUploader('getUploads');
showBtnUpload=false;
if(listObject.length > 0){
......@@ -295,25 +239,7 @@ $initAnswerFiles=Document::getListDocumentsWhere(array(
$(this).find(".fineUploaderOpenFormSubmit").show();//.fineUploader('uploadStoredFiles');
}
})/*.on("complete", function(event, id, fileName,responseJSON,xhr){
mylog.log("onCompleate", id, fileName, responseJSON);
setFiles={};
setFiles[responseJSON.id.$id]=responseJSON;
var serverPathToFile = responseJSON.docPath,
fileItem = this.getItemByFileId(id);
var viewTnh = qq(fileItem).getByClass("qq-upload-link")[0];
if(typeof viewTnh != "undefined")
viewTnh.setAttribute("href", serverPathToFile);
// $fileItem.find(".qq-upload-link")
// .attr("href", serverPathToFile)
// .removeClass("hide");
this.setDeleteFileEndpoint(baseUrl+"/"+moduleId+"/document/deletedocumentbyid/id/"+responseJSON.id.$id, id);
if(!responseJSON.result){
toastr.error(trad.somethingwentwrong+" : "+responseJSON.msg );
mylog.error(trad.somethingwentwrong , responseJSON.msg)
}
})*/.on("allComplete", function(event, succeeded, failed) {
}).on("allComplete", function(event, succeeded, failed) {
mylog.log("ooooooooooooo",succeeded,failed);
$(this).find(".fineUploaderOpenFormSubmit").fadeOut();
});
......@@ -332,22 +258,16 @@ $initAnswerFiles=Document::getListDocumentsWhere(array(
idUploader=$(this).data("dom-uploader");
listObject=$("#"+idUploader).fineUploader('getUploads');
goToUpload=false;
alert(idUploader);
mylog.log(listObject);
if(listObject.length > 0){
$.each(listObject, function(e,v){
if(v.status == "submitted")
goToUpload=true;
});
}
alert(goToUpload);
if( goToUpload ){
insideCallBMulti=true;
$("#"+idUploader).fineUploader('uploadStoredFiles');
//principalement pour les surveys
//if(typeof callB == "function")
// callB();
}
}
});
});
function prepFileForFormsUploader(data){
......
......@@ -89,12 +89,6 @@ if(isset($this->costum["contextType"]) && isset($this->costum["contextId"])){
margin-top: -1px;
}
}
@media (max-width: 768px){
h1, h2, h3, h4, h5, h6 {
display: block;
font-size: 1.9em;
}
}
#customHeader #newsstream .loader{
display: none;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment