Dans l’article précédent, je vous expliquais comment créer un menu déroulant contenant les sites suivis par l’utilisateur courant.

Il est possible d’ajouter facilement une fonctionnalité pour arrêter de suivre un site.

FollowedSites2

 

Astuce :

Pour identifier la div du site suivi à supprimer, rien ne vaut l’ID de l’objet qu’elle représente. Sauf que actor.get_id() renvoi des chiffres et des points ce qui rend le sélecteur jQuery inefficace. actor.get_id().split(« . »).join(«  ») permet de supprimer tous les points de la chaine.

Point surprenant :

Pour arrêter le suivi d’un site à partir de son ID, il faut créer un objet SocialActorInfo et lui donner l’ID. Pas besoin de passer plus d’informations (source : MSDN) :

var socialActor = new SP.Social.SocialActorInfo();
socialActor.set_id(siteid);
socialManager.stopFollowing(socialActor);

 Par contre pour arrêter le suivi d’un site à partir de son URL, il faut créer un SocialActorInfo dont le type est documents.

var socialActor = new SP.Social.SocialActorInfo();
socialActor.set_actorType(SP.Social.SocialActorTypes.documents);
socialActor.set_contentUri(siteUrl);
socialManager.stopFollowing(socialActor);

Ci-dessous le code modifié :

function getFollowedSitesSucceeded() {
    // add Communautés link in SuiteLinks section
    var navU = jQuery("#suiteLinksBox > ul.ms-core-suiteLinkList");
    var addNode = jQuery("<a id='Suite_CustomSites_ShellAddNew' href='#' class='ms-core-suiteLink-a' />")
    .append(jQuery("<span/>")
        .text("Communaut351s")
        .append(jQuery("<span class='ms-suitenav-downarrowBox'/>")
                .append(jQuery("<img class='ms-suitenav-downarrowIcon' src='/_layouts/15/images/spcommon.png?rev=23' />"))
        )
    );
    
    // create drop down menu
    var menu = jQuery("<ul class='ms-core-menu-list' id='custom-sites-menu'/>");
    var subli = jQuery("<li/>");
    var innerDiv;
    for (var i = 0; i < this.result.length; i++) {
        var actor = this.result[i];
        // split sites into columns of 5 elements
        if (i % 5 == 0) {
            subli.append(innerDiv);
            innerDiv = jQuery("<div/>").attr("class", "subcontainer");
        }

        innerDiv.append(jQuery("<div/>").attr("id", actor.get_id().split(".").join(""))
                .append(jQuery("<span/>").attr("class", "ms-core-menu-link")
                    .append(
                        jQuery("<a/>")
                            .attr("href", actor.get_uri())
                            .text(actor.get_name()))
                    .append(
                        jQuery("<a/>")
                        .attr("href","javascript:stopFollowingSite('"+ actor.get_id() + "');")
                        .append(jQuery("<img/>").attr("src", "/_layouts/15/images/monProjet/UnfollowWhite.png"))
                    )
        ));
    }

    // build everything
    subli.append(innerDiv);
    menu.append(subli);

    var menuNode = jQuery("<div/>")
        .attr("class", "ms-core-menu-box ms-core-suitemenu")
        .append(menu);

    newLi = jQuery("<li/>").attr("class", "ms-core-suiteLink")
        .append(addNode)
        .append(menu);

    navU.prepend(newLi);
    
    getUserProperties();
}

function onStopFollowingSiteSucceeded() {
    $("#" + this.siteUrl.split(".").join("")).remove();
}

function stopFollowingSite(siteid) {
    var clientContext = SP.ClientContext.get_current();
    var socialManager = new SP.Social.SocialFollowingManager(clientContext);
    var socialActor = new SP.Social.SocialActorInfo();
    socialActor.set_id(siteid);
    socialManager.stopFollowing(socialActor);
    clientContext.executeQueryAsync(Function.createDelegate(this, this.onStopFollowingSiteSucceeded), Function.createDelegate(this, this.onQueryFailed));
}

Etonnant, non ?