Monday, March 14, 2016

Bootstrap DateTime Picker with AngularJS Directive



Problem: I wanted to use the eonasdan’s Boostrap Datetime picker in my Share Point hosted App.

Solution: I have wrapped the eonasdan’s Bootstrap DateTime picker by creating a directive in my controller.



AngularMain.controller("MyController", function() {})
    .directive('bootdatepicker', ['$timeout', renderBootStrapDatePicker]);

function renderBootStrapDatePicker($timeout) {
    var format = "DD/MM/YYYY";
    return {
        restrict: 'EA',
        require: 'ngModel',
        link: function(scope, element, attributes, ngModelCtrl) {
            // Initialize the DateTime Picker with a format
            element.datetimepicker({
                format: format
                    /*,
                                                defaultDate: function () { return moment().format(format); }*/
            });

            // Get the DateTime Picker
            var datePicker = element.data('DateTimePicker');

            element.on('dp.change', function() {
                $timeout(function() {

                    var selectedDate = moment(datePicker.date()).format("DD/MM/YYYY");
                    ngModelCtrl.$setViewValue(selectedDate);
                });
            });

        }
    };

The following is 'RenderBootStrap' directive is bound to the view.
I hope, this may help someone.. :)

Thursday, January 21, 2016

SharePoint 2013: Users Permissions Detail Report in a SharePoint Farm


PowerShell Script Details

1. Gets all the lists with users with broken permissions.
2. Gets the all users added on the root with specific permission level.
3. Gets all the users added in a SharePoint Permission Group.





# Script Written By: Muhammad Salman Malik.
clear

if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq $null)
{
    Add-PSSnapin "Microsoft.SharePoint.PowerShell"
}


$permissionsArray = @()
$path = "C:\UsersPermissionsOverView.csv"
$siteCounter = 0;

function getUserName($oUser){
    $userName = "";

    if($oUser.UserLogin.StartsWith("c:"))
    {
        $userName = $oUser.DisplayName
    }
    else
    {
        $userName = $oUser.LoginName;
    }

    return $userName;
}

# get all the webapplication
$weApplications= get-spwebapplication 
$incrementProgress = 100/$weApplications.Count
$progressComplete = 0;

# iterate all the webapplication
foreach($webApp in $weApplications)
{ 
 foreach ($site in $webApp.sites)
 {
        $siteCounter++;
  write-host "Site Collection: " $site.Url -f Cyan  
        write-progress -Activity "Site Collection: " $site.Url -PercentComplete $progressComplete 
        $web = $site.RootWeb 
         
        if ($web.Lists.Count -gt 0)
        {                       
        foreach($list in $web.Lists)
        {
            # Find Lists in Site with Unique Permissions (Break inheritance)
            if($list.HasUniqueRoleAssignments -eq $True -and ($List.Hidden -eq $false))
            {  
                write-progress -Activity "List: " $list.Title -PercentComplete $progressComplete
                foreach ($user in $web.SiteUsers)
       {                                                                                                                                

                    foreach($listRoleAssignment in $list.RoleAssignments )
                    {
                        
                        if($listRoleAssignment.Member.userlogin -eq $user.UserLogin)  
                        {
                            #Write-Host "User: " $user.LoginName -f Yellow
                            $listUserPermissions=""
                            foreach ($RoleDefinition  in $ListRoleAssignment.RoleDefinitionBindings)
                            {
                                $listUserPermissions += $RoleDefinition.Name +";"
                            }                            

                            
                            $permissionObject = New-Object PSObject -Property @{
                            "Type" = "List User"
                            "Web Url" = $web.Url
                            "Web Name"= $web.Title
                            "List/DocumentLibrary" = $list.Title
                            "User" = getUserName -oUser $user
                            "Group" = "-"
                            "Permissions" = $listUserPermissions
                            }

                            $permissionsArray += $permissionObject
                        }
                    }
                }
                
             }
         }
        }

        # Find users added to the root with own Permission level (Without any Group)
        foreach ($user in $web.users)
  {
              $listUserPermissions=""
        foreach($listRoleAssignment in $web.RoleAssignments )
              {
                    #Is it a User Account?
                    if($listRoleAssignment.Member.userlogin -eq $user.UserLogin)  
                    {
                            $listUserPermissions=""
                            foreach ($RoleDefinition  in $ListRoleAssignment.RoleDefinitionBindings)
                            {
                                $listUserPermissions += $RoleDefinition.Name +";"
                            }
                    }
              }

      $permissionObject = New-Object PSObject -Property @{
                "Type" = "Root User"
                "Web Url" = $web.Url
                "Web Name"= $web.Title
                "List/DocumentLibrary" = "-"
                "User" = getUserName -oUser $user
                "Group" = "-"
                "Permissions" = $listUserPermissions
            } 
            $permissionsArray += $permissionObject       
     }

        # Find users added to a group
        foreach ($group in $web.Groups)
  {
              $groupUserPermissions=""
        foreach($groupRoleAssignment in $group.ParentWeb.RoleAssignments.GetAssignmentByPrincipal($group) )
              {                                      
                    foreach ($roleDefinition  in $groupRoleAssignment.RoleDefinitionBindings)
                    {
                        $groupUserPermissions += $roleDefinition.Name +";"
                    }                   
              }

      
    foreach ($user in $group.users)
    { 
       $permissionObject = New-Object PSObject -Property @{
                    "Type" = "Group User"
                    "Web Url" = $web.Url
                    "Web Name"= $web.Title
                    "List/DocumentLibrary" = "-"
                    "User" = getUserName -oUser $user
                    "Group" = $group.name
                    "Permissions" = $groupUserPermissions
                }
                $permissionsArray += $permissionObject                      
     
       }
     } 

    }
    $progressComplete = $progressComplete + $incrementProgress;
    write-progress -Activity "Processed Web Application: " $webApp.Url -PercentComplete $progressComplete
}

# Total Count of the site collection
Write-Host "Total Site Collections Count: " $siteCounter -f Yellow
$permissionsArray | Export-Csv -path $path -Delimiter ";"