• Installing WordPress via shell script(BASH)

    We have been using a provisioning script that downloads the latest wordpress zip file, extracts into the right location it and sets up the DB connection. I wanted to take it a step further and eliminate the install.php page. The one that looks like this:Screen_Shot_2013-03-06_at_3.54.19_PM-2

     

    So i sat down to figure out how to “Install WordPress” via shell script. Here is that command:

    SITENAME="blog"
    DOMAINNAME="company.com"
    PASSWORD="MySecurePassword"
    wp_install_result=$(php -r 'define("WP_SITEURL", "http://'$SITENAME.$DOMAINNAME'");define("WP_INSTALLING", true);require_once("./wp-load.php");require_once("wp-admin/includes/upgrade.php");$response=wp_install("TITLE", admin, "[email protected]", false, null, "'$PASSWORD'");echo $response;')
    

     
    After WordPress is “installed”, we can now activate plugins.


  • Activating and deactivating WordPress plugins from a shell script (BASH)

    I needed to update my WordPress site provisioning script to download, install and activate a WordPress plugin. The download is the easy part (I just use wget). But how do I activate the plugin. This is what I cam up with:

    result=$(php -r 'require_once("./wp-load.php");require_once("wp-admin/includes/admin.php");activate_plugin("hello.php");')
    

    And to be complete, to deactivate:

    result=$(php -r 'require_once("./wp-load.php");require_once("wp-admin/includes/admin.php");deactivate_plugins("hello.php");')
    

  • A simple javascript/AJAX function to post a SOAP request to CRM 2011

    This is a simple function that I use to post a SOAP envelope to CRM 2011. Just pass the URL and the xml (you can create that with this function) and you should be good to go

        function soapToCRM(URL, data) {
            var returnValue
            $.ajax({
                type: "POST",
                contentType: "text/xml; charset=utf-8",
                datatype: "xml",
                async: false,
                url: URL,
                data: data,
                beforeSend: function (XMLHttpRequest) {
                    XMLHttpRequest.setRequestHeader("Accept", "application/xml, text/xml, */*");
                    XMLHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
                    XMLHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");
                },
                success: function (data, textStatus, XmlHttpRequest) {
                    //alert("success");
                    var NewCRMRecordCreated = data["d"];
                    returnValue = true
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    alert("failure " + errorThrown);
                    returnValue = false;
                }
            });
            return returnValue;
        }
    

  • Using AJAX and SOAP to create a CRM 2011 activity

    I have posted a bunch of PowerShell scripts to interact with CRM 2011, now I am going to put up similar javascript versions. I feel that there is a lot of javascript content out there for CRM 2011, but most of it is javascript inside the actual CRM interface. I don’t see a lot of content about using javascript from a different webpage/site with ajax, so I thought I would post some of the code I put together.

    This is a function that I put together to build a SOAP envelope for creating an activity in CRM 2011. Credit for the template goes to Jamie Miley and this post. I took his template a little further and created a function for either email,Phone call or appointment. In addition this function allows for multiple contacts in an phone call’s to and multiple required contacts in a meeting.

    (more…)


  • SharePoint 2010: How to access check permissions if site was not mounted with UpdateUserExperience

    I am working with a site where we could not UpdateUserExperience when moving to 2010. I wanted to check a users permissions, but the icon was missing. To check a users permissions in 2010 with out an updated user experience, you visit : /_layouts/chkperm.aspx


  • I finally did it! 10K+ visits in a month!

    Not bad seeing as I was at 2K last year this time!

    		 Visits
    Today		 373
    Yesterday	 504
    This month	 10183
    December	 9085
    November	 9827
    October		 9427
    September	 9010
    August		 9440
    July		 9151
    June		 8171
    May 		 7352
    April		 5027
    March		 3966
    February	 3160
    January		 2741
    

  • PowerShell 3: Using Invoke-RestMethod to refresh a new oAuth 2 token

    I wanted to translate this code into powershell. Below is the Powershell code to request a refresh token from Google using oAtuh 2.

    $CLEINTID="1234567890.apps.googleusercontent.com"
    $CLIENTSECRET="aBcDeFgHiJkLmNoPqRsTuVwXyZ"
    $REFRESHTOKEN="1/551G1yXUqgkDGnkfFk6ZbjMLMDIMxo3JFc8lY8CAR-Q"
    
    $URL = "https://accounts.google.com/o/oauth2/token"
    $Body= 'client_secret={0}&grant_type=refresh_token&refresh_token={1}&client_id={2}' -f $CLIENTSECRET,$REFRESH_TOKEN,$CLEINTID
    Invoke-RestMethod -URI $URL -Method Post -Body $Body
    

    Hope that helps someone.


  • Using cURL, BASH and Google oAuth to access Google Analytics

    In this previous post, I used cURL (the command line version) to interact with Google Analytics. I wanted to do the same thing but using oAuth. I took a lot from this page, but there were a few things that I couldn’t get working, and a few things I didn’t know.

    Follow Steps 1-6 on this page. These are steps that you need to follow to get your app registered with Google

    In step 6, copy down the code, and keep track of it. It needs to be reused every time you need to get a new token. If you loose it, then you need to run step 6 over again. I didn’t know that.

    Here is my script. I will jump through the code below it.

    #!/bin/bash
    CODE="4/v6xr77ewYqhvHSyW6UJ1w7jKwAzu&amp"
    CLEINTID="1234567890.apps.googleusercontent.com"
    HEADER="Content-Type: application/x-www-form-urlencoded"
    CLIENTSECRET="aBcDeFgHiJkLmNoPqRsTuVwXyZ"
    REDIRECTURI="urn:ietf:wg:oauth:2.0:oob"
    
    # I keep the ACCESS_TOKEN and the REFRESH_TOKEN in a file.
    if [ -s ~/.google ];then
    	ACCESS_TOKEN=$(cat ~/.gauth | grep access_token | awk -F"," '{print $2}' | tr -d ' ')
    	REFRESH_TOKEN=$(cat ~/.gauth | grep refresh_token | awk -F"," '{print $2}' | tr -d ' ')
    else
    	# not used before
    	NEWTOKEN=$(curl -s -d "code=$CODE&redirect_uri=$REDIRECTURI&client_id=$CLEINTID&scope=&client_secret=$CLIENTSECRET&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token)
    	ACCESS_TOKEN=$(echo $NEWTOKEN | awk -F"," '{print $1}' | awk -F":" '{print $2}' | sed s/\"//g | tr -d ' ')
    	REFRESH_TOKEN=$(echo $NEWTOKEN | awk -F"," '{print $4}' | awk -F":" '{print $2}' | sed s/\"//g | sed s/}// | tr -d ' ')
    	echo access_token , $ACCESS_TOKEN > .google
    	echo refresh_token , $REFRESH_TOKEN >> .google
    fi
    EXPIRED=$(curl -s https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=$ACCESS_TOKEN | grep 'invalid_token')
    if [ "$EXPIRED" ]       
    then
    	echo "EXPIRED"
    	REFRESHRETURN=$(curl -s -d "client_secret=$CLIENTSECRET&grant_type=refresh_token&refresh_token=$REFRESH_TOKEN&client_id=$CLEINTID" https://accounts.google.com/o/oauth2/token)
    	ACCESS_TOKEN=$(echo $REFRESHRETURN | awk -F"," '{print $1}' | awk -F":" '{print $2}' | sed s/\"//g | tr -d ' ')
    	echo access_token , $ACCESS_TOKEN > .gauth
    	echo refresh_token , $REFRESH_TOKEN >> .gauth
    fi 
    AUTH=$ACCESS_TOKEN
    # now in your curl code to retrieve the google analytics data, you use --header "Authorization: OAuth $AUTH"
    

    Lines 1-6: I am setting up my variables with data as described in the linked post.
    Lines 8-11: I keep track of the current access token and the refresh token in a config file. If the file exists then parse out the values
    Lines 12-19: This is the first time this has been run, so I need to create the file, and put in it a new token and the refresh token. Note the refresh token needs to be saved, and is only given to you once. I did not know that.
    Line 20: checks to see if the access token is expired.
    Lines 21-28: if the access token is expired, use the refresh token to get a new access token and then save it to the file.

    That is it. I hope to translate into PowerShell next – I am sure this code exists, but this is how I learn.

    Hope this helps someone.