Ideas….

a blog for me to record thoughts and ideas

Browsing Posts tagged PHP

Moodle Enrollment: Flat Files

1 comment

Currently we are using the LMB Plugin for Moodle to enroll students into our courses.  This works swimmingly, until you have to enroll a large group into a class that really isn’t a class.  Let me explain…no let me sum up.

We have a bunch of placement tests and advising courses and that sort of thing we want our first year students to be enrolled in.  Moodle happens to have a flat file enrollment feature.  Below are the instructions from that enrollment feature:

This method will repeatedly check for and process a specially-formatted text file in the location that you specify. The file is a comma separated file assumed to have four or six fields per line:

*  operation, role, idnumber(user), idnumber(course) [, starttime, endtime]
where:
*  operation        = add | del
*  role             = student | teacher | teacheredit
*  idnumber(user)   = idnumber in the user table NB not id
*  idnumber(course) = idnumber in the course table NB not id
*  starttime        = start time (in seconds since epoch) - optional
*  endtime          = end time (in seconds since epoch) - optional

It could look something like this:

   add, student, 5, CF101
   add, teacher, 6, CF101
   add, teacheredit, 7, CF101
   del, student, 8, CF101
   del, student, 17, CF101
   add, student, 21, CF101, 1091115000, 1091215000

So great, I need to pull a randomly generated number rather than a username in order to enroll students.  So now I need to figure out a way to take a list of usernames in banner and get their corresponding idnumbers in Moodle.

Now if this were a one time thing I would take the lazy man’s way out and I would create a table in the database and do a simple

select table.username, user.idnumber
from table, user
where table.username = user.username;

But I’m going to have to do this every year until we either get rid of Moodle or I leave Wheaton.  Since plans are not in the work for either, I’ll actually do something more substantive.

First I made the decision to use the MySQL select in clause.  For those of you who don’t know, you can do:

select username, idnumber
from user
where username in ('value1', 'value2', 'valueN');

Its pretty useful really.  I can’t really find a MySQL page that talks about the in() clause but I did find a good post in the MySQL lists.  The next thing I had to figure out was how to push a file into a php array.  Again I found a great post on using the file() command to do this.  The only drawback is that when i go to print it’ll just show:

value1 value2 valueN

When that’s not what I want.  I need quotes and commas and crap around it.  So I found another great post that talks about using the implode function to put a php array into an in() clause.  The implode function will allow me to put quotes and what not around each one of the values in the array so it will look like this:

'value1', 'value2', 'valueN'

So now that I have the component parts, all I need to do is create a php page that will let me upload a file, run the query, and retrieve the outfile.  Of course the idea of writing this code makes me tired and since its 5pm I shall just publish this post and write the code tomorrow (hopefully).

UPDATE

I was wrong.  The value is not a randomly generated number, well it is, but its randomly generated by Banner.  In the Banner XML the value is the <sourcedid> for a <person>.

Luckily this randomly generated value is something that we can pull out of Banner using our reporting system.  The value (in our Banner) is gobsrid_sourced_id.  Not sure if it will be the same in your Banner, but hopefully this will put someone on the right track.

My next step is to document how to do all of this in our Moodle Documentation Wiki.  I might do a Jing Video.

I’ve been a bit busy and unable to blog. Right now I’m waiting for other people to do stuff so I thought I would write.

Recently I’ve considered taking an in house app I’m working on and making it an open source app to share with the world. I was thinking this would help me in a couple of ways:

  1. it would improve my code.  admittedly it was the first php code i wrote since taking a 2 year hiatus from writing php code.  right now i go back and think to myself: “what the heck is that?”  hopefully opening up the app to the world would help me improve the code (and the app).  i’m one of those crazy people that believe my code shouldn’t be perfect before releasing it.
  2. it would help other libraries that don’t have a dedicated me to write programs that will collect statistics.  there is another app out there called libstats that does something similar, but not on the individual librarian scale.  i was even considering merging libstats with my app (of course i will need to speak to the owner of said project before actually doing anything of the kind).

All of this got me thinking about what services I should use to share the development of the app.  There are quite a few tools out there that can help me do this.  I’m actually considering doing an environmental scan of the different tools that can be used to develop apps via the cloud.  Maybe look at some of the big open source projects to see what they use while also keeping an eye out for how smaller projects do the same thing.  And just for clarifications sake, I’m not just talking about using AWS or Google App Engine to write the program.  I’m talking about BaseCamp, Google Code, github, etc.; you know, the tools that help you develop the app and organize the project.

The idea I have isn’t just born from my head (I’m not that smart).  I was reading The Tower and the Cloud and in it Ira H. Fuchs talks about the “Challenges and Opportunities of Open Source in Higher Education“.  It seems to me that the inclusion of this article in the book says that the cloud isn’t about just servers without actual hardware, but that its also about how we work together to use the different services available to build open source applications for higher education.

I’ll be sure to share more as I find time to review all the different tools out there.  Maybe one day I’ll have a “How to Develop your App in the Cloud” seminar or something (to go along with my fellowship).

Random Moodle

No comments

It’s been a while since I wrote, and its not that I forgot about my blog, it’s just that I’ve been busy.  Our Moodle installation is growing up and will be getting its own server soon.  I’m hoping that it’ll be a OSX 10.5 Server so I’ve been working out some of the kinks in my test installation:

  1. GD Library — By default the GD library’s aren’t part of the PHP package in Server 10.5.  I was poking around in this Step by Step Installation guide trying to upgrade my PHP library on my server.  Turns out I didn’t need to for various reasons (also the package recommended screwed with my Apache).  So instead i went into my php.ini file and uncommented the line:

    extension=php_gd2.dll

    This turned on the GD Library and Moodle looks much better now.

  2. MySQL — I was getting a weird error in Moodle under Admin > Server > Environment.

    It is required that you store all your data in Unicode format (UTF-8). New installations must be performed into databases that have their default character set as Unicode. If you are upgrading, you should perform the UTF-8 migration process (see the Admin page).

    I thought that was a bit weird cause I installed the database from scratch. But sometimes you just need to do what it tells you to. So I ran the following query:

    alter database moodle collate = utf8_unicode_ci;

    And voila the error went away.

So now my Moodle is a bit happier.  I am of course (like always) recording this so that when I get my new server and I run into these problems again, I can remember what the heck I did.