Monday, September 19, 2011

Permanent Redirects in ActiveCampus CMS

I recently received a request on how to handle Permanent Redirects (301 Redirects) in Datatel's Active Campus... So without further ado, here is my solution to that problem.

First thing I did was create a new Template, in my case titled Template404.aspx. Be sure to include any .NET Controls specific to your implementation...

<%@ OutputCache NoStore="true" Duration="1" VaryByParam="none" %>
<%@ Page Language="C#" AutoEventWireup="true" Inherits="ActiveCampus.Websites.Controls.CMSPage" StyleSheets="/Website Resources/css/SiteStyle.css:all|/Website Resources/css/SiteStylePrint.css:print" Async="true" %>
<%@ Register Src="/Templates/controls/404control.ascx" tagName="control404" TagPrefix="control404" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head id="Head1" runat="server">
    <title>Central Wyoming College - Page Not Found Error</title>
    <script language="javascript" src="/Media/Website%20Resources/scripts/mootools.js" type="text/javascript"></script>
    <script language="javascript" src="/Media/Website%20Resources/scripts/AC-Core.js" type="text/javascript"></script>
    <script language="javascript" src="/Media/Website%20Resources/scripts/AC-LightBox.js" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<!--[if lte IE 6]>
    <link rel="stylesheet" type="text/css" href="/Media/Website%20Resources/css/SiteStyleIE6.css" />
    <![endif]-->
<link rel="icon" type="image/vnd.microsoft.icon" href="/Media/Website Resources/Favicon.ico" />
</head>
<body id="body" runat="server">
<div id="pageCt" class="search">
    <form id="form1" action="/" runat="server">
        <div id="pageCtInner">
            <div id="pageCtBG">
                <div id="zoneCt">
                    <div id="gridCt">                                             
                        <div id="zone2">
                            <div id="centerContent">
                                <control404:control404 id="control404" runat="server" />
                            </div>
                        </div>
                        <div id="zone1">
                 
                        </div>
                        <div class="spacer"> </div>    
                    </div>
                    <div class="spacer"> </div>
                </div>
                <div class="spacer"> </div>
            </div>
            <div class="spacer"> </div>
            <div class="spacer"> </div>
        </div>
        <div class="spacer"> </div>
    </form>
    </div>
</body>
</html>
Next, I needed to create the .NET control that actually handles all of my redirects. Now mind, you my method is to have all redirects in a central location. This is also useful for those short hand URL's that you want to go somewhere deep into the site. Like perhaps, www.cwc.edu/library will actually take you to www.cwc.edu/resources/library. This way our library, has a short link they can advertise on their materials. Also, much easier for users to remember the shorter version, then trying to remember to add in resources. So for my example, I'm going to handle some Library Page redirections we used. To add additional, pages, you simply add additional case statements. Additionally, the last part of this script, also takes care of the case when somebody enters cwc.edu (I then want to push them automatically to the www.).

<%@ Language=VBScript %>

<%
' Permanent redirection
Dim str = Request.RawUrl.Replace("/404error.aspx?404;http://www.cwc.edu:80","")
str = str.Replace("/404error.aspx?404;http://cwc.edu:80","")
str = str.tolower
If Request.QueryString("aspxerrorpath") <> String.Empty Then
   str = Request.QueryString("aspxerrorpath").tolower
End If
'Handle Academic Program URLs
If str.indexOf("/academics/programs-of-study/") >=0 or str.indexOf("/Academics/Programs-of-Study/") >=0 Then
      Response.Status = "301 Moved Permanently"
      Response.AddHeader ("Location", "http://www.cwc.edu/academics/programs/")
else
Select Case str.tolower
   Case "/resouces/library/testingcenter/testcenterrec.aspx"
      Response.Status = "301 Moved Permanently"
      Response.AddHeader("Location","http://www.cwc.edu/resources/Library/testingcenter/testcenterrec.html")
   Case "/resources/library/testingcenter/fees.aspx"
      Response.Status = "301 Moved Permanently"
      Response.AddHeader("Location","http://www.cwc.edu/resources/Library/testingcenter/Fees.htm")
   Case "/resources/library/testingcenter/clep.aspx"
      Response.Status = "301 Moved Permanently"
      Response.AddHeader("Location","http://www.cwc.edu/resources/Library/testingcenter/Clep.htm")
   Case "/resources/library/testingcenter/default.aspx"
      Response.Status = "301 Moved Permanently"
      Response.AddHeader("Location","http://www.cwc.edu/resources/Library/testingcenter/default.htm")
   Case "/resources/library/librarydistance.aspx"
      Response.Status = "301 Moved Permanently"
      Response.AddHeader("Location","http://www.cwc.edu/resources/Library/librarydistance.htm")



   Case Else
      Response.write ("<p>Oops... This page can't be found. Please visit the <a href='http://www.cwc.edu/azindex.aspx'>Site Map</a> for a listing of pages.<br />Error Page: " & str & "<br />Also try search at the top of the website to find the page you are looking for.")
Dim strRootURL = Request.URL.ToString.Replace("http://cwc.edu/Cache/Templates/Template404.aspx?=404;","")
'Response.write("<p>URL: " & strRootURL)
if strRootURL.startswith("http://cwc.edu") Then
strRootURL = strRootURL.Replace("http://cwc.edu","http://www.cwc.edu")
Response.Redirect(strRootURL)
End If
End Select
End If
Response.End
%>
Next you'll add this template to the Website Workflow. You do that by going to Website, Right clicking the top "Website" folder and selecting Workflow Properties. Click the Template Groups Tab then select your template bundle. Now click the Templates tab in the bottom section. Goto the bottom, and click the add button to add your template. Click Ok, and exit the workflow.

Now you should be able to create a page with this template. It is not necessary to enter the template designer. Just make sure the page is published. Make sure the page loads up in your browser by pointing directly to it.

This next part, will cause a short pause and delay, so I recommend that you do it during non-peak hours. Also, create a backup of your web.config file before making any changes.

On the public website instance, open the web.config file. And search for <customerrors. Assuming you have not modified it at all, you can change it to:

<customErrors mode="On" defaultRedirect="ErrorPages/ErrorPage.aspx" />
Modify the defaultRedirect location to be the location of your error. In our case, we want users to always just think it is a page not found error, even if there is a programming error in a form. But you can also modify it to handle just 404 error types.

That should do it.

Hopefully this helps you out down the road!

Paul

Wednesday, November 3, 2010

Part 1: Lets Talk Analytics... Social Media Driven Traffic

Recently there has been a lot of traffic going around regarding Analytics. I believe a big part of it, was Simtech's keynote presentation last month. So it got me thinking on what should I be reporting to our administrators.

One of my many duties includes reporting analytics. The most difficult part about this, is getting the necessary information from the stakeholders. For instance, I'm rarely made aware of any online advertising campaigns, and at times, I have issues getting information from various stakeholders to help me crunch the data.

Sure I can post the numbers, but they have no meaning. I realize this. Instead I try and focus on the results.

Last summer though, one of our departments had extra end of year money, and decided to take a flyer and do three ads in Facebook targeted to 3 different groups of people. They represented 3 of our best programs in the state that have significant room available for enrollments.
  • Radio/TV Broadcasting
  • Equine Studies
  • Criminal Justice
We ran these ads for roughly a week. During that time period, the ads generated 200 visits to our site, produced a dozen admissions applications, and roughly two dozen inquiries for more information. I'd call that a fairly successful campaign.
While I consider the ads successful, it was a qualified success. Those who visited the pages we setup for those ads did not share those pages out via Facebook, Twitter, or any other means. So we weren't successful in getting those who saw the ad to show it to their friends and followers.

Lastly, the ads did not generate many new followers to our official Facebook Page. So again, it failed on this front.

So now, I have an example of one time ad campaign that was fairly successful. I have plenty of stats to show that our current current "plan" for social media isn't working

So now I have the problem, the information. Next up I need to formulate a solution. Here is how I plan on improving our Social Media platform.
  1. Revitalize our campus' Twitter Account.
  2. Include updates on our Facebook page (and Twitter account) that show where our recruiters are for the day, especially when travelling.).
  3. Attempt to build conversations on our Facebook pages, not just announcements.
  4. Propose a budgeted advertising campaign for Facebook targeted for specific programs, especially new programs, and programs unique to location. (For instance, Native American Studies, outdoor studies with our partnership to NOLS, equine Studies).
  5. Include Sports updates. Our Rodeo team is among one of the best in the nation. Yet we rarely report on it. We routinely finish in the top 5 of the nation, and last year, had a national champion for bareback horse. 
  6. This year, our basketball team will be posting timely recaps on their games. We need to get those out on our social media platforms as well to engage our followers and build team spirit for our teams.
What other suggestions would you make to improving our campus presence in social media environments?

Part 2 will focus on relationships with other entities.

Cya,
Paul

P.S. This post was edited to make it less controversial. I guess we all step over that line at some point...

Thursday, October 21, 2010

Net Neutrality... Cablevision versus Fox

So it has been briefly mentioned in news articles, but nobody has talked about the underlying consequences of what Fox forced Hulu to do briefly this past weekend. For those of you unaware, Cablevision's agreement to carry Fox channels officially expired this weekend. As a result, subscribers were flocking to catch their favorite shows via online means, many going to Hulu.

Fox briefly decided to have Hulu block visitors to from viewing the show if they were from Cablevision. They were forced to relent because some Cablevision Internet users may not have Cablevision as their cable provider. They could be on DirecTV or DishNetwork for instance. As a result, they removed that restriction.

Let's think about that though. Should content on the Internet be restricted from certain groups of people like this?  We've had plenty of arguments on how ISP's should be able to restrict speeds and content to users. Should content providers, such as CNN, Google, Microsoft, MSNBC have the reverse capability and block users from visiting their website if they happen to come from an ISP they aren't on good terms with?

Assuming we can't keep the net neutral, in my opinion not likely, we could just as easily see websites blocked from a certain ISP because they want them to pay to much. Ala the entire Fox versus Cablevision and Dishnetwork thing going on right now. Is that the new reality? Imagine having a Google TV, and Youtube is blocked because your ISP throttles your speed there because Google didn't want to pay them.

It can certainly become an interesting issue. What do you think will happen in this arena?

Tuesday, October 19, 2010

Looking Past Angel 7.4

So Angel 7.4 will have full support until October 2012, and then goto operational support until October 2014. If you institution is in this situation, you have a full options, and depending on your plans, some of these may make sense.

Here are the options:

  • Stick with Angel 7.4 until October 2014.
  • Stick with Angel 7.4 until October 2012.
  • Move to Angel 8.0 when released in 2011, then move to another platform in 2014.
  • Move to Angel 8.0 when released, then move to Blackboard NG in 2014.
Stick with Angel 7.4 until October 2014
The way I see it, the first option isn't very good. If a major issue is discovered during that time period, there is no guarantee that Blackboard will correct it. While it may not be an issue, it is a very large risk for any institution to make.

Stick with Angel 7.4 until October 2012
My assumption is most schools will run with this option for now, and potentially goto 8, Blackboard, or another company. However, it is hard to say for sure.

Move to Angel 8.0 then move to another platform in 2014
I believe many schools will make this move simply to buy them more time in evaluating what LMS to move to next. Moodle is young, but each year is gaining more users and gaining better support. I wouldn't be surprised that come 2014, many schools will be on some implementation of Moodle, Many schools are already using it, since it is open source for some of their "experimental" classes.

Move to Angel 8.0 then to Blackboard NG
As the above option, I believe many schools will follow this option. Partially because Blackboard is one of the few Enterprise level LMS companies currently out there. When we went through our review process two years ago, Moodle and Sekai just didn't have the enterprise level support yet that made us comfortable. I think that 4 years from now, that it is very likely that this game as changed. Datatel has already come out with their own implementation of Moodle. CampusEAI is currently working on their own version of Moodle. With Angel leaving the game, there is great opportunity for somebody to step forward and become the main competitor to Blackboard.

So is your school in this situation? What will your school do?

Paul

Friday, October 15, 2010

Social Media Policies in Academia

Recently my employer put out a proposed policy on Social Media. The policy itself it pretty standard affair, and the same policy put out by other colleges and universities across the nation. However, it made me think more about how this policy actually affects people, and why it only applies to social media, and not other forms of media. For instance, our college does not have an official policy for editorials or TV interviews. Granted, I wouldn't go out and say that my school supports Joe Smith to become the next president of Elbonia (A mythical land in Dilbert.)

However, it can lead to an interesting situation. This fall there are three ballot issues for a property tax levy to provide funding.  This example is purely for illustrative purposes only.

I often wear a shirt that states that I am an employee of my school. Sometimes I wear my name badge. Now lets say, that after work, I head to the grocery store. While there, a local TV news reporter stops me and asks me my opinion and if I will vote for any of the proposed tax initiatives. Not thinking that I'm wearing my work shirt, I state, that I am only going to vote for one, the one that I believe is most beneficial to the community. In my response, I say that I'm going to vote for Elbonia's get Land tax and vote no for the other two. Now said item airs on the TV, my school's logo blaring across the TV Screen in Hi definition (well sorta... I think we have a half news program in HD). Is that not just as damaging (or argubably even more damaging)? Yet, no policy is in place.

However, if I were to say the same thing on a social media site (including this blog) I could be violating the policy and subject to disciplinary action from the college. Especially if I said it in a manner that somehow portrays that my opinion is an endorsement by the college.

Granted, I also understand the purpose and even the need for this policy. We have had incidents in the past where staff members have posted content on social media pages that do represent the college.

Ultimately, I believe that this policy is ultimately covered under other college policies that state how we act as an official to the college. Furthermore I believe that anyone who has access and the ability to post on the college's behalf in Facebook, Twitter, or blogs should undergo training to avoid the situation that occurred above.

So what are your thoughts?

Thursday, September 23, 2010

CampusEAI myCampus Portal

A recent thread on UWEBD started about CampusEAI, and instead of my response being buried to one lonely programmer at a school, I decided that I should post my thoughts here about CampusEAI and my experiences.

Initially we went with CampusEAI’s Oracle Portal solution. This is because a couple of us have Oracle programming experience. However,  once this product was released, we converted over to mycampus after one semester, because it was easier for our department users to work with than Oracle Portal. So Oracle Portal is another item we looked at. We have an Oracle license due to some other products, so we didn’t have to pay for a new Oracle license. CampusEAI’s Mycampus portal is actually a custom implementation of Liferay.

Here are some of my experiences with CampusEAI’s mycampus product. Availability is very high for us. We do not have the High Availability option (multiple servers) and we do experience downtimes each month when they do maintenance. We do work with them to ensure that the outage is during an acceptable timeframe though.

With that being said, however, some of their maintenance windows can cause us headaches. They’ve often done Rack maintenance during critical times, which makes life difficult at times. For instance, during the summer they forgot to send us a maintenance item and took our portal offline the last night of classes. Needless to say, that caused a lot of grief and a phone call from our CIO.

The things that we like about it, is that it can integrate with our AD groups to give users various rights. For instance, by adding a user to our IT group policy in AD, they gain additional access to test beds we’ve setup in our portal.

Single Sign On was a requirement for us, and works relatively well. The most recent release has a small bug, but supposedly a patch that is going in for us this weekend will stop the problem. Basically after 30 minutes, even though your portal credentials are not expired, you cannot log into a SSO application until you refresh the Portal Home page. Their SSO can be setup to go into virtually any login page. We use it for our own homegrown solutions where users login via LDAP. Additionally, if an application is not LDAP aware, you can setup the SSO to ask the user for their credentials the first time. From that point on, it will store the information enabling them to just click the button and access their account.

If you want to have things setup in a workflow environment they do provide that capability and recent releases have made that far easier to use. Additionally, you can have multiple web items, and simply click the title of the one that you want to switch to. This is great for when we perform maintenance on our ERP for instance. We simply turn off SSO access to that application, and activate a message that says the system is undergoing maintenance.

CampusEAI does quite well in the Social Media realm for Facebook and meebo. However, they currently do not have any portlets for Twitter.  Just this semester we activated the Meebo option. We had it turned off before, because their used to not be a way to auto-hide students, which violated their non-directory request. The new version is off by default, and the student has to manually Sign on to it. For Meebo, we’ve had a few instructors jump on board with it, to provide virtual office hours to their students. Facebook implementation is basically the standard FB widget that you can drop on pages.

One of the best things about CampusEAI is how quickly they can get you up and running. Most schools I know of, have their portal ready to go within 1-2 months.

Support wise they are great. As a member, you have the ability to interact with them using Spark, which is an IM utility. So if I am having an issue, I can just chat up our account manager, or if I’m working a ticket, I can chat with him. This can be useful for those non-critical issues that you want them to work on, but don’t want to spend the entire time on the phone with them. I like their support, and as a person in IT, they are one of the easiest vendors to get in touch with for an issue.

Their datacenter is very robust, and the one major outage we experienced from them was due to both of their Internet providers failing at the same time. The next day they added a 3rd Internet provider to their datacenter.

Thursday, May 20, 2010

Custom Programming in ActiveCampus

So, your school uses ActiveCampus? Perhaps your school needs to list a staff directory and you want to be able to have it updated automagically instead of hand updating a content type for each user as they come and go with their employment. Well I'm hear to say that it appears to be fairly straight forward process. You can even embed the component into the CMS and your templates. Unfortunately, I haven't found a way to make it so that you can drop your custom program into a dropzone. Perhaps I'll get that figured out as well? I don't know if it's possible, but Test servers are meant to be borked and re-imaged right?!

ActiveCampus is developed in ASP.NET, so therefore, I created my app in ASP.NET as well. For my personal preference I am using C#. I created a new Web Application in Visual Studio. For my first run through, I created a test control that is basically Hello World. I created my control, and compiled the code to create an ASP.NET Assembly. I then copied the assembly into the bin directory of both the console and the public site. For my instance, I named my assembly myschool_CustomProgramming.dll.

Next up copied the code on the ASCX control into a new template under Website->Templates. I put it in a new folder called customControls. I then edited a Template to reference and use this control.

The result is that i get a functioning template that I can still add items to the drop zone in, and yet still have the capability to have my custom programming. I created a page using this template, and the result was a functioning page that uses both the ActiveCampus processes and my own assembly as well.

On a side note, I highly suggest that you put all of your custom programming into a safe and unique class structure to ensure that you cannot interfere with their programming. In my case, I just used myschool_CustomProgramming.

Right now, I'm working on building our Staff Directory and online email form so that it is embedded directly into our site.

Please note that most likely anytime you upgrade the system, you will probably need to re-add your custom components. I will be testing that in the near future when I update our test environment to the latest version from Datatel. In any case, this method allows your code to run independently of their programming. If you wished, you may be able to bring in their components and link to some of their classes, but I haven't gone down that road yet. (Might be useful for database connectivity). In the meantime, I'm just using my own custom components for accessing the database, using the same connection methodology that they have setup.

So far this is just a proof of concept. Hopefully by mid-June I'll have something in production to show everyone.

Paul