vendredi 14 septembre 2012

Comment cacher les actions dans un site SharePoint grâce au Javascript(Session, Site, Liste, Bibliothèques de documents)


L'utilisation du JavaScript est un moyen efficace et peut coûteux en développement pour cacher les différentes actions qui peuvent apparaître sur une page SharePoint.

 


Il est en effet possible grâce à une simple fonction Javascript insérable dans la masterpage, de cacher les différentes actions :
  • Mes paramètres
  • Se connecter en tant qu'utilisateur différent
  • Demander l'accès
  • Se déconnecter
  • Personnaliser cette page
  • Créer
  • Modifier la page
  • Paramètres du site
  • Nouvel élément
  • M'avertir
  • Créer une colonne
  • Créer un affichage
  • Paramètres - Liste
  • Tous les éléments
  • Modifier cet affichage
  • Créer un affichage
  • Télécharger un document
  • Télécharger plusieurs documents  
  • Modifier dans la feuille de données
  • Ouvrir avec l'Explorateur Windows
  • Exporter vers une feuille de calcul
  • Afficher le flux RSS

La fonction javascript est la suivante :

<script type="text/javascript" language="javascript">
function cacherActionPortail()
{
var menuItem;
var menuItemName;
var menuItemIndex=-1;
var menuItemNames=new Array("Mes paramètres",
 "Se connecter en tant qu'utilisateur différent",
 "Demander l'accès",'se déconnecter','Personnaliser cette page','Créer'
 ,"Modifier la page","Paramètres du site","Nouvel élément",
 "M'avertir","Créer une colonne","Créer un affichage",
 "Paramètres - Liste","Tous les éléments",
 "Modifier cet affichage","Créer un affichage",
 "Télécharger un document","Télécharger plusieurs documents","Modifier dans la feuille de données",
 "Ouvrir avec l'Explorateur Windows","undefined","Exporter vers une feuille de calcul","Afficher le flux RSS");

var menuItems = new Array("PersonalInformation",
 "LoginAsDifferentUser","RequestAccess",
 "Logout","PersonalizePage",
 "MenuItem_Create","MenuItem_EditPage",
 "MenuItem_Settings","New0","SubsribeButton",
 "AddColumn","AddView",
 "ListSettings","DefaultView","ModifyView",
 "CreateView","Upload",
 "MultipleUpload","EditInGridButton","OpenInExplorer","OfflineButton",
          "ExportToSpreadsheet","ViewRSS");

var allMenuItems = document.getElementsByTagName('ie:menuitem');

for(var i = 0; i < cacherActionPortail .arguments.length; i++ )
{
menuItemName= cacherActionPortail .arguments[i].toLowerCase();
for (j=0; j < menuItemNames.length; j++)
{
if(menuItemNames[j].toLowerCase()==menuItemName)
{
menuItemIndex = j;
break;
}
}

menuItem=menuItems[menuItemIndex];

for (var l = 0; l < allMenuItems.length; l++)
{
if(menuItemName.indexOf(":")!=-1)
{
menuItemName = menuItemName.split(":")[1];
}
if (allMenuItems[l].id.indexOf(menuItem)!=-1
       && allMenuItems[l].text.toLowerCase() == menuItemName)
{
// For FireFox Compatibility
var parentNodeOfMenuItem = allMenuItems[l].parentNode;
parentNodeOfMenuItem.removeChild(allMenuItems[l]);
break;
}
}
}
}
</script>

Ainsi que l'appel de la fonction depuis le 'Page_Load' de la master page :

protected void Page_Load(object sender, EventArgs e)
{       

   Page.ClientScript.RegisterStartupScript(this.GetType(), "click","cacherActionPortail (\"Afficher le flux RSS\",\"Modifier dans la feuille de données\",\"Exporter vers une feuille de calcul\");", true);
}




3 commentaires :

  1. Faut entrer toutes les langues donc =). Ya pas moyen de recuperer l'id ou le name de la balise html pour faire ca pour toutes les langues ?

    RépondreSupprimer
  2. La fonction peut aussi se simplifier comme :


    function cacherActionPortail()
    {
    var allMenuItems = document.getElementsByTagName('ie:menuitem');

    for(var i = 0; i < cacherActionPortail.arguments.length; i++ )
    {
    for (var l = 0; l < allMenuItems.length; l++)
    {
    if (allMenuItems[l].id.toLowerCase().indexOf(cacherActionPortail.arguments[i].toLowerCase())!=-1)
    {
    // For FireFox Compatibility
    var parentNodeOfMenuItem = allMenuItems[l].parentNode;
    parentNodeOfMenuItem.removeChild(allMenuItems[l]);
    break;
    }
    }
    }
    }


    Et pour l'appel de la fonction :


    Page.ClientScript.RegisterStartupScript(this.GetType(), "click",
    "cacherActionPortail('ViewRSS','ExportToSpreadsheet','OpenInExplorer','OfflineButton','EditInGridButton','SubscribeButton');", true);

    RépondreSupprimer
  3. Hello,
    ça marche que pour MOSS 2007

    Pour 2010 :


    var itemsToDelete = new Array("TakeOfflineToClient", "OfflineButton", "ViewRSS", "SubscribeButton", "ModifyView", "CreateView");

    var doc = document.getElementsByTagName('ie:menuitem');

    for(var k = 0; k < itemsToDelete.length; k++)
    {
    for (var i = 0; i < doc.length; i++)
    {
    itm = doc[i];
    if (itm.id.match(itemsToDelete[k]) != null)
    {
    itm.hidden=true;
    break;
    }
    }
    }

    RépondreSupprimer