This project is a work-in-progress. These notes may reflect aspects of the project which have yet to be fully realized. As the project progresses, these notes may be amended at any time.

Student Portfolio is a project designed for the Information Technology and Management Department (ITM) of the Illinois Institute of Technology (IIT). The goal is to enable students to upload resumes, screenshots and relevant hyperlinks (such as links to projects as well as LinkedIn profiles) to a server and thus help students promote themselves with a link to their portfolios.

The Portfolio Database

For those who hold the proper credentials, the database can be found at Upon successfully logging in, look for a database called ΓÇ£pmdbΓÇ¥ (all lower-case).

The ΓÇ£pmdbΓÇ¥ database consists of three tables:

  • ΓÇ£profileΓÇ¥ is a ΓÇ£parentΓÇ¥ table which consists of general information about the portfolio user.
    • ΓÇ£idprofileΓÇ¥ ΓÇô Populated automatically, this is a unique key field which identifies a profile; it also ties to the ΓÇ£projectΓÇ¥ table.
    • ΓÇ£usernameΓÇ¥ ΓÇô the LDAP username of the portfolio user.
    • ΓÇ£namefirstΓÇ¥ ΓÇô the portfolio userΓÇÖs first name.
    • ΓÇ£namelastΓÇ¥ ΓÇô the portfolio userΓÇÖs last name.
    • ΓÇ£urllinkedinΓÇ¥ ΓÇô the portfolio userΓÇÖs link to the LinkedIn profile.
    • ΓÇ£fileresumeΓÇ¥ ΓÇô the filename, including extension, of the userΓÇÖs resume.
    • ΓÇ£contactemailΓÇ¥ ΓÇô the userΓÇÖs contact e-mail address; the portfolioΓÇÖs ΓÇ£Contact MeΓÇ¥ form would not appear without it.
    • ΓÇ£contactmessageΓÇ¥ ΓÇô a custom message which the user could create for the portfolioΓÇÖs ΓÇ£Contact MeΓÇ¥ form.

      (I am open to hard-coding a brief, generic message explaining the contact form and then eliminating this field and the data-entry option on the site for this field.)
    • </p>
    • The remaining fields (ΓÇ£datecreatedΓÇ¥, ΓÇ£dateupdatedΓÇ¥) are populated automatically.

  • </p>
  • ΓÇ£projectΓÇ¥ is a ΓÇ£childΓÇ¥ table which consists of information about the portfolio userΓÇÖs projects.
    • ΓÇ£idprojectΓÇ¥ ΓÇô Populated automatically, this is a unique key field which identifies a project.
    • ΓÇ£titleΓÇ¥ ΓÇô the title of the project.
    • ΓÇ£descriptionΓÇ¥ ΓÇô the description of the project.
    • ΓÇ£urlworkΓÇ¥ ΓÇô the link to the live project.
    • ΓÇ£imgleftΓÇ¥ ΓÇô the filename, including extension, of the large screenshot to the left of the portfolio.
    • ΓÇ£altleftΓÇ¥ ΓÇô a description of ΓÇ£imglectΓÇ¥, a caption of a sort which appears upon mouseover of the image.
    • ΓÇ£imgrighttopΓÇ¥ ΓÇô the filename, including extension, of the large screenshot to the top-right of the portfolio.
    • ΓÇ£altrighttopΓÇ¥ ΓÇô a description of ΓÇ£imgrighttopΓÇ¥, a caption of a sort which appears upon mouseover of the image.
    • ΓÇ£imgrightbottomΓÇ¥ ΓÇô the filename, including extension, of the large screenshot to the bottom-right of the portfolio.
    • ΓÇ£altrightbottomΓÇ¥ ΓÇô a description of ΓÇ£imgrightbottomΓÇ¥, a caption of a sort which appears upon mouseover of the image.
    • The remaining fields (ΓÇ£datecreatedΓÇ¥, ΓÇ£dateupdatedΓÇ¥) are populated automatically.

  • </p>
  • ΓÇ£usersΓÇ¥ ΓÇô a temporary login system, ΓÇ£temporaryΓÇ¥ meaning that we ultimately remove this table and replace it with an LDAP-based login system. For now it must remain in place to maintain functionality during development.
    • ΓÇ£iduserΓÇ¥ ΓÇô Populated automatically. [Note: Review code to see whether it is in use; it ought not to be.]
    • ΓÇ£usernameΓÇ¥ ΓÇô LDAP username
    • ΓÇ£passwordΓÇ¥ ΓÇô MD5-encrypted LDAP password; during the development process a password would be created and then run through an online MD5-conversion website; the resulting MD5-encrypted version of the password would be pasted here.
    • The remaining fields (ΓÇ£datecreatedΓÇ¥, ΓÇ£dateupdatedΓÇ¥) are populated automatically.

The Portfolio Itself</p>

[Documentation in Progress]

The URL for the Portfolio is[student's LDAP username]/.

The portfolio is based on a template which at first consisted of HTML and jQuery. PHP and MySQL were applied so that data for the studentΓÇÖs profile and projects could be retrieved quickly instead of manually added to the HTML code, especially per project. The programming is procedural, without additional frameworks involved (unlike the supporting CMS System, which uses CodeIgniter).

The portfolio is available to the public, with no login.

Without data in the database for the student, the Portfolio begins blank. The students would add the data themselves via the Portfolio CMS System.

Data retrieval is based in no small part on the portion of the URL which holds the studentΓÇÖs LDAP username.

The Portfolio CMS System

[Documentation in Progress]

The URL for the Portfolio CMS System is[student's LDAP username]/cms/. The portfolio owner simply adds "cms/" to the Portfolio URL and login.

The CMS is a PHP/MySQL-based project built via CodeIgniter ( The version used is 2.0.3; as of this writing CodeIgniter may be up to Version 2.1.2. Portions of the CMS are based in turn on a CodeIgniter 1.6.2 tutorial readapted for 2.0.3:

In CodeIgniter, traditional file management does not apply. CodeIgniter is a PHP framework based on the MVC (Model-View-Controller) design pattern. Rather than calling an actual file by name and extension via a URL, a call to the name of a function in a Controller generates a URL which retrieves files related to the View (HTML, CSS, etc) while, as needed, retrieving data based on a given Model. CodeIgniter has very strict, case-sensitive, file-naming and function-naming conventions.

File Management and Troubleshooting

[Documentation in Progress]

Many files and folders common to both the Portfolio and its CMS are in "/var/www/portfolio". This was done to reduce the "footprint" of each student's portfolio to be added to the server. If errors occur which are common across all portfolios, this directory is a good place to start your troubleshooting.

Each student portolio directory is referenced by the student's LDAP username. Thus each student's portfolio shall be found at "/var/www/[student's LDAP username]/".

The "cms" directory in each student portfolio folder is a CodeIgniter package, consisting of all the folders and files which drive CodeIgniter. Being a CodeIgniter package, most of the files and directories within "cms" need not and ought not to be touched. That said, the files which were created for the CMS can be found in the following directories within ".../cms/application/":

  • models (where you find the SQL statements and calls to the MySQL database)
  • views (the html files which comprise the visual aspects of the CMS, which in turn summon CSS files -- many of which are in the common ".../portfolio/" directory)
  • controllers
    • login.php and verifylogin.php
      (The conversion from a database-based login system to an LDAP-based login system might be applied in one or both of these files.)
    • </p>
    • project.php
    • profile.php

  • </p>
  • config
    • config.php
    • routes.php
    • database.php
    • autoload.php

Besides “…/application/”, “…/system/” is also a directory which comes with CodeIgniter. This directory rarely needs to be touched.</p>

Added to the CodeIgniter package are directories intended to be unique to each student. In an unused portfolio, especially a source from which copies would be made, these directories would exist as empty folders.

  • docs -- the resumes go here.
  • imgs -- the screenshots go here.(In the event that we further enhance the project to allow the public to click on the screenshots and see a larger image, I would recommend that the original, unresized images either go in this directory under similar names with a common prefix or in a separate directory within "cms"; jQuery-style gallery options may be explored as well.)

Goals for Deployment</p>

[Documentation in Progress]

Presumably a Bash script run on the Apache server would read  from a list of student LDAP usernames (and related information?), create directories named after the usernames, and insert files and folders from an unused portfolio.

If the temporary database-based login system currently in use during development is retained, the script must also add student records to the "users" table. A purely LDAP-based login system would eliminate this step.

Remaining Issues and Enhancements

Lest we add any enhancements or correct issues for each of many student portfolios, the following issues and enhancements should be addressed before deployment so that we have a relatively ideal if not perfect portfolio from which to make copies.

  • Part of the original goals for the portfolio project include a jQuery Mobile version of the public portfolio pages. Code is already in place to determine whether a mobile device is calling the portfolio and, if so, redirect to another page which would display a mobile version. Said mobile version has yet to be built.
  • A version of the student portfolio is currently serving as a live "guinea pig", linked on the original developer's own LinkedIn profile for all LinkedIn members to see. Via LinkedIn, the developer has received at least one suggestion, particularly the option of viewers "zooming" onto larger versions of the screenshots.
  • Conversion from a database-based login sytem to an LDAP-based login system is in progress.