GureWork > espacios de Coworking topalekuak :)
Template:@himikel > TeamParticipate

TeamParticipate
TeamParticipateEdit

    Tabla de contenidos
    No hay encabezados

    This template manage how can participate current user in a space's team, show different alternatives in function of participation mode

    Paramters: Space, ParticipationMode {"Open","ByInvitation","Private"}

    // + PARAMETERS
    var mPars = {     
      mPage: (__request.args.page ? string.deserialize(__request.args.page) : null ) ?? args.page ?? page,
      sSpaceName: __request.args.space ?? args.space ?? "",
      sParticipationMode: __request.args.participationMode ?? args.participationMode ?? "",
      sInvitationCode: __request.args.IC ?? args.IC ?? ""
    };
    //Web.Pre(Json.Format(mPars));
    
    // + INCLUDES
    dekiapi();
    
    // + CONSTANTS
    var LANGUAGE_ES = {
        user : "Usuario",
        team : "Equipo",
        name : "Nombre",
        surname : "Apellidos",
        email: "Correo electrónico",
        participate: "Participar",
        since: "Desde",
        teamwelcome: "¡Bienvenido al equipo %1!",
        requiredfield: "¡Introduce el campo \"%1\"!",
        validfield: "¡Introduce un \"%1\" válido!",
        gotospace: "Ir al espacio %1",
        teamparticipate: "Participa en el equipo %1",
        user_alreadyinteam_msg : 'El usuario ya es integrante del equipo.',
        logintoparticip_msg : 'Para participar primero hay que identificarse.<br />Puedes iniciar la sesión utilizando tu proveedor OpenID favorito:',
        logintoparticip_link: 'Clica aquí para iniciar la sesión ...'
     };
    
    var LANGUAGE_EN = {
        user : "User",
        team : "Team",
        name : "Name",
        surname : "Surname",
        email: "Email",    
        participate: "Participate",
        since: "Since",
        teamwelcome: "Welcome to %1 team!",
        requiredfield: "The field \"%1\" is required!",
        validfield: "Enter a valid \"%1\"!",
        gotospace: "Go to %1 space",
        teamparticipate: "Participate in the %1 team",
        user_alreadyinteam_msg : 'User is already member of the team.',
        logintoparticip_msg : 'To participate you need to identificate first.<br />You can log-in using your favorite OpenID provider:',
        logintoparticip_link: 'Click here to log-in ...'
     };
    
    var LANGUAGE_EU = {
        user : "Erabiltzailea",
        team : "Taldea",
        name : "Izena",
        surname : "Abizenak",
        email: "Posta elektronikoa",
        participate: "Parte Hartu",
        since: "Noiztik",
        teamwelcome: "Ongietorria %1 taldera!",
        requiredfield: "Sar ezazu \"%1\" eremua!",
        validfield: "Sar ezazu baliozko \"%1\"!",
        gotospace: "Joan %1 espaziora",
        teamparticipate: "Parte hartu %1 taldean",
        user_alreadyinteam_msg : 'Erabiltzailea iadanik taldeko kidea da.',
        logintoparticip_msg : 'Parte hartzeko lehenik identifikatu beharra dago.<br />Saioa hasi dezakezu gustokoen duzun OpenID hornitzaileaz:',
        logintoparticip_link: 'Klikatu hemen saioa hasteko ...'
    };
    
    var TXTS = { 'es': LANGUAGE_ES, 'es-es': LANGUAGE_ES, 'en': LANGUAGE_EN, 'en-us': LANGUAGE_EN, 'eu': LANGUAGE_EU, 'es-eu': LANGUAGE_EU }; //#mod @himikel
    var lg = mPars.mPage.language;
    if (!TXTS[lg])
      let lg = 'en';
    
    var bUserInGroup=false;
    var sTeam=mPars.sSpaceName;
    var sChannel="participate";
    var sTeamWelcomeMsg=String.Replace(TXTS[lg].teamwelcome,"%1",sTeam);
    var sSpaceUrl=site.url.."/"..sTeam;
    var sNameReqFldMsg=String.Replace(TXTS[lg].requiredfield,"%1",TXTS[lg].name);
    var sEmailReqFldMsg=String.Replace(TXTS[lg].requiredfield,"%1",TXTS[lg].email);
    var sEmailValFldMsg=String.Replace(TXTS[lg].validfield,"%1",TXTS[lg].email);
    var sGoToSpaceMsg=String.Replace(TXTS[lg].gotospace,"%1",sTeam);
    
    var sHeaderMsg=String.Replace(TXTS[lg].teamparticipate,"%1",sTeam);
    var sMsg="<h3>"..sHeaderMsg.."</h3><br />";
    //let sMsg..="atok: "..user.authtoken.."<br />";
    Web.Html(sMsg);
    if (user.anonymous)
    {
      //Anonymous Users need to log-in by OpenID first (or using native account)
      var sReturnPath=mPars.mPage.path;
      if (mPars.sInvitationCode!="")
        let sReturnPath..="-IC-"..mPars.sInvitationCode; //To solve ReturnTotitle problem using apache rewriterule
        //let sReturnPath..="&IC="..mPars.sInvitationCode;
      var sLoginUrl=site.uri.."Special:OpenIdLogin?returntotitle="..Uri.Encode(Uri.Encode(sReturnPath));
      let sMsg="<br />"..TXTS[lg].logintoparticip_msg;
      let sMsg..="<br /><b><a href='"..sLoginUrl .."'>"..TXTS[lg].logintoparticip_link.."</a></b><br /><br />";
      Web.Html(sMsg);
    }//if
    else
    {
      let sMsg=TXTS[lg].user..": "..user.name.."<br />";
      Web.Html(sMsg);
    
      var xGroupUsers=Wiki.Api(Uri.Build(site.api, ["groups", "="..mPars.sSpaceName, "users"] ));
      //Web.Pre(Json.Format(xGroupUsers));
    
      var slGroupUsers=[ Xml.Text(xUser, 'username') foreach var xUser in Xml.Select(xGroupUsers, '/users/user') ];
      //var slGroupUsers=Xml.Select(xGroupUsers, '/users/user');
      //Web.Pre(Json.Format(slGroupUsers)); 
    
      var slData = Json.Parse(user.homepage.properties["TeamParticipate"].text ?? "") ?? [];
      //Web.Pre(Json.Format(slData));  
      var nLastInd=#slData-1;
      var sName = slData[nLastInd]["Name"];
      var sSurname = slData[nLastInd]["Surname"];
      var sEmail = slData[nLastInd]["Email"];
      var sSinceVar= "Since-"..mPars.sSpaceName;
      var sSince = slData[nLastInd][sSinceVar];
    
      //var sName=user.homepage.properties["Name"].text;
      //var sSurname=user.homepage.properties["Surname"].text;
      //var sEmail=user.homepage.properties["Email"].text;
      //let sMsg=TXTS[lg].name..": "..sName.."<br />";
      //Web.Html(sMsg);
    
      let bUserInGroup=(user.name in slGroupUsers);
      if (bUserInGroup)
      {
        let sMsg=TXTS[lg].user_alreadyinteam_msg.."<br />";
        let sMsg..=TXTS[lg].since..": "..sSince.."<br />";    
        Web.Html(sMsg);
      }   
    
      var bInvited=false,bIncompleted=false;
      if (!bUserInGroup)
      { 
        if (mPars.sParticipationMode=="ByInvitation")
        {      
          if ((sTeam=="LinkedHitz")&&(mPars.sInvitationCode=="12345678"))
            let bInvited=true;
          else if (sTeam=="OpenKoop")
          {
            var slIUsers=["trebea","diegopoloroman","albarte"];
            if (user.name in slIUsers)
              let bInvited=true;     
          }
        }
      }
      else
      {
        if ((sName==null)||(sEmail==null))
          let bIncompleted=true;
      }
    
      var sButton="-";
      if ((bInvited)||(bIncompleted))
        let sButton=TXTS[lg].participate;
        //let sButton=TXTS[lg].participatein.." "..mPars.sSpaceName;
    
      Wiki.Template("Template:@neilw/ShowForm", {
        fields: [
            { type: 'text', label: TXTS[lg].name..': ', field: 'name', default: sName },
            { type: 'text', label: TXTS[lg].surname..': ', field: 'surname', default: sSurname },
            { type: 'text', label: TXTS[lg].email..': ', field: 'email', default: sEmail },
            { field: sSinceVar, hidden: true, value: date.now }
        ],
        button: sButton,
        publish: sChannel
      });
    
      Wiki.Template("Template:@steveb/UpdateStore", {
        id: "TeamParticipate",
        subscribe: sChannel,
        spage: user.homepage,
        msg: 10
      });
    
      if (bUserInGroup)
        Web.Link(sSpaceUrl,sGoToSpaceMsg);
    
    }
    var sOperAT=String.Trim(Wiki.Template("Template:@himikel/GetOperAT"));
    
    <script type="text/jem">"
    var ingroup="..bUserInGroup..";
    var siteapi='"..site.api.."';
    var userid='"..user.id.."';
    var user='"..user.name.."';
    var useratok='"..user.authtoken.."';
    var group='"..sTeam.."';
    var msgmode=10;
    var channel='"..sChannel.."';
    var teamwelcome='"..sTeamWelcomeMsg.."';
    var spaceurl='"..sSpaceUrl.."';
    var namereqfld='"..sNameReqFldMsg.."';
    var emailreqfld='"..sEmailReqFldMsg.."';
    var emailvalfld='"..sEmailValFldMsg.."';
    var operatok='"..sOperAT.."';
    var name='';
    var email='';
    
    Deki.subscribe('Msg_UpdateStore', null, function(c, m, d) {
      //alert('event::@Msg_UpdateStore');
      var rsl=m.msgrsl;
      var msg=m.msgtxt;
      var data=m.msgdata;
      //var data=YAHOO.lang.JSON.parse(m.msgdata);
      //alert('rsl: '+rsl+' msg: '+msg+' data: '+data);
    
      //Field Validations
      name=data[data.length-1]['name'];
      if (name.length<=0)
      {
        alert(namereqfld);
        return;
      }
      email=data[data.length-1]['email'];
      //alert('email: '+email);  
      if (email.length<=0)
      {
        alert(emailreqfld);
        return;
      }
    /*
      //Not the best email validation pattern but works for the most part.
      var pattern = new RegExp(/^([a-zA-Z0-9_.\-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/);
      if (pattern.test(email)==0) 
      {
        alert(emailvalfld);
        return;
      }
    */
    /*
      var props='';
      for (var prop in data)
      {
        props+=' '+prop+'(#'+data[prop].length+'): '+data[prop]['email'];
        //props+=' '+prop+'<'+typeof(prop)+'>';
      }//fo
      alert('props: '+props);  
    */
    
      if ((rsl>0)&&(!ingroup))
        SetUserGroup(siteapi, userid, user, group, operatok, msgmode);
        //SetUserGroup(siteapi, userid, user, group, useratok, msgmode);
    
    }, null);
    
    Deki.subscribe('Msg_SetUserGroup', null, function(c, m, d) {
      //alert('event::@Msg_SetUserGroup');
      var rsl=m.msgrsl;
      var msg=m.msgtxt;
      var data=m.msgdata;
      //alert('rsl: '+rsl+' msg: '+msg+' data: '+data);
      if (rsl>0)
      {
        SetUserEmail(siteapi, userid, user, email, msgmode);
      }
    }, null);
    
    Deki.subscribe('Msg_UpdateProperty_email', null, function(c, m, d) {
      //alert('event::@Msg_UpdateProperty_email');
      var rsl=m.msgrsl;
      var msg=m.msgtxt;
      var data=m.msgdata;
      //alert('rsl: '+rsl+' msg: '+msg+' data: '+data);
      if (rsl>0)
      {
        alert(teamwelcome);
        window.location=spaceurl;
      }//if
    }, null);
    
    /*
    when (@msg_updatestore)
    {
      alert('event::@msg_updatestore2');
      //@msg_updatestore({msgrsl: msgrsl, msgtxt: msgtxt});      
    });//wh
    */
    
    function SetUserGroup(siteapi, userid, user, group, atok, msgmode) {  
      var msg='user: '+user+' group: '+group;
      //alert(msg);
      //POST:groups/{groupid}/users
      var postdata='<users><user id=\"'+userid+'\"/></users>';
      //alert('postdata: '+postdata);
      MindTouch.Web.Post(siteapi+'/groups/='+group+'/users'+'?authtoken='+atok, postdata, 'text/xml; charset=utf-8', null, function(res) {
        if (MindTouch.Web.IsSuccessful(res)) {
          PostMessage('SetUserGroup',msgmode,1,'SetUserGroup() > Ok\\n'+msg,postdata);
        } else {
          PostMessage('SetUserGroup',msgmode,-1,'SetUserGroup() > Res:'+res.status+'!\\n'+msg,null);
        };
      });
    };
    
    function SetUserEmail(siteapi, userid, user, email, msgmode) {
      var msginfo='user: '+user+' email: '+email;
      //alert(msginfo);
      //PUT:users/{userid}
      var prop='email';
      var propapi=siteapi+'/users/'+userid; // '/properties/'+encodeURIComponent(encodeURIComponent(prop))
      var postdata='<user><email>'+email+'</email></user>';
      var datatype='text/xml; charset=utf-8';
      //var propapi=siteapi+'/groups/='+group+'/users'+'?authtoken='+atok;
      //var postdata='<users><user id=\"'+userid+'\"/></users>';
      //alert('postdata: '+postdata);
      UpdateProperty(propapi, prop, postdata, datatype, msginfo, msgmode);
    };
    
    //Update Property
    function UpdateProperty(propapi, prop, data, datatype, msginfo, msgmode) {
      var msgproc='UpdateProperty'+'_'+prop;
      //alert('UpdateProperty: '+msgproc);  
      var msgtxt='';
      MindTouch.Web.Get(propapi, null, function(result) {
        //alert('UpdateProperty::Get ');  
        if(MindTouch.Web.IsSuccessful(result)) {				
          //alert('UpdateProperty::Put');
          MindTouch.Web.Put(propapi, data, datatype, { ETag: result.etag}, function(xhr) {                
            //YAHOO.lang.JSON.stringify(
            if(MindTouch.Web.IsSuccessful(xhr)) {
              PostMessage(msgproc,msgmode,1,'Put Ok',data);
            }                
            else {
              msgtxt='Error with Put: (status: ' + xhr.status + ' - ' + MindTouch.Web.GetStatusText(xhr.status) + ')'+'\\r\\nProc: '+msgproc+'\\r\\nInfo: '+msginfo;
              PostMessage(msgproc,msgmode,-2,msgtxt,null);
            }        
          });
        }//if    
        else {
          //alert('UpdateProperty::Post');
          var propurn = 'urn:custom.mindtouch.com#'  + prop;
          /*
          MindTouch.Web.Post(propapi, YAHOO.lang.JSON.stringify(data), datatype, { Slug: propurn }, function(xhr) {
            if(MindTouch.Web.IsSuccessful(xhr)) {
              PostMessage(msgproc,msgmode,1,'Post Ok',data);
            } 
            else {
              msgtxt='Error with Post: (status: ' + xhr.status + ' - ' + MindTouch.Web.GetStatusText(xhr.status) + ')'+'\\r\\nProc: '+msgproc+'\\r\\nInfo: '+msginfo;
              PostMessage(msgproc,msgmode,-3,msgtxt,null);
            }
          });
          */
        }//el    
      });
    };
    
    //@himikel #add 2010-07-05
    function PostMessage(msgproc, msgmode, msgrsl, msgtxt, msgdata) {
        msgproc='Msg_'+msgproc;
        if (msgmode==1)
          alert(msgtxt+' ('+msgrsl+')');
        else if (msgmode==10)
          Deki.publish(msgproc, {msgrsl: msgrsl, msgtxt: msgtxt, msgdata: msgdata});
          //@msg_updatestore({msgrsl: msgrsl, msgtxt: msgtxt});
    };
    
    "</script>
    
    
    
    
    
    


     

    Powered by MindTouch Core (Expired)