Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Faculty of Science
Project Databasetoepassingen
Coordinator: Dr. Hamideh Afsarmanesh Course Lecturer: Jos de Bruin
Course Assistant: Anton Bossenbroek
June 28th, 2006
Team 4:
Nick Botter 0359572 [email protected] Dominic Settels 0062375 [email protected] Rienk Su 0469785 [email protected] Deepak Sharma 0367907 [email protected]
2
Table of contents
1. INTRODUCTION 2. LITERATURE REVIEW 3. SYSTEM DESIGN
3.1 User Requirements 3.2 Scenarios
4. SYSTEM ARCHITECTURE 4.1 Data storage
4.1.1 MySQL Table schemas 4.1.2 ERdiagram
4.2 Logic 4.2.1 PHP 4.2.2 Security 4.2.3 Error Handling
4.3 Implementation 4.4 GUIdesign
5. EVALUATION 5.1. Traceability 5.2 Issues & Solutions
5.2.1 System Design 5.2.2 Database 5.2.3 GUI 5.2.4 Compatibility
5.3 Literature Evaluation 5.4 Discussion
6. CONCLUSION 7. REFERENCES
APPENDIX: A User Manual APPENDIX: B ERdiagram APPENDIX: C User Requirements APPENDIX: D Browser Comparison APPENDIX: E MySQL Tables APPENDIX: F – PHP code
3
PROJECT DATABASETOEPASSINGEN
Nick Botter (0359572) [email protected]
Dominic Settels (0062375) [email protected]
Rienk Su (0469785) [email protected]
Deepak Sharma (0367907) [email protected]
This document presents the development and implementation of a database system as part of the course ‘Project Databasetoepassingen’ at the University of Amsterdam. The aim of this course is constructing a centralized relational database system. The purpose of this database is to administrate information about employees and to make it possible for other employees to search for and look at other employees profile pages to aid in formal and informal contact. First a literature review is presented showing related work on ‘friends networks’. Then, based on requirements analysis, the design of the database and Graphical User Interface coded in PHP will be presented. Followed by a presentation of the results and the implementation. At the end of the document conclusions will be drawn and the project will be evaluated.
1. INTRODUCTION
This document is part of the course 'Project Databasetoepassingen' at the University of Amsterdam for the year 20052006. In this document the process of designing and implementing a database and graphical user interface for a friends network will be described. The aim is to design and implement a functionally correct database and graphical user interface (GUI) with adequate functionality for employees of a large multinational to improve both formal and informal contact among these employees. A profile page for each member with both formal and informal information about that person and search engine to find other users, are designed and implemented. The members can form ‘communities’ by filling in their profile pages and/or becoming members of special community pages. This document is divided into three main sections: system design, system architecture and implementation and traceability. In this last section the steps that were taken will be described, and an explanation will be given on why certain decisions were made during the entire process.
04
4
2. LITERATURE REVIEW
In this part of the paper we shall discuss some work that we found from our literature study. The main purpose of this part is to show the relation between this project and the subjects that are being researched in the field about communities.
A small study of Homans (Homans, 1954) about informal networks in an office department proves that informal communication is not always contra productive. Homans studied several employees of a department and concluded that the informal environment had positive effect on them. The employees delivered more work than expected by the department managers. A study of Flap about informal networks inside companies describes some positive effects of informal networking inside companies. In his study he marks that informal communication between colleagues improves the cooperation between them, what results in better work and improves happiness of the employees. Flap describes that time investment in work is better when a company has a good social network. Colleagues will do more for each other when they know each other in a positive way, in other words employees will help each other faster when they know each other. A social network in a company improves the friends network inside a company, if there is a informal environment in a company colleagues with same interests, hobbies etc. can meet each other easily. (Flap, 2001)
As mentioned above our main goal in our project is to build a community page. To build a community page, you have to know the user needs. After a quick start on the project, we considered some interface designs. After a literature search we found that community’s experience many tensions on daily base, these tensions are often mediated supported or enhanced by technology. Wenger describes, in his paper, these tensions as: Interaction, Publishing and Tending.
Nowadays there are many tools on the market to build communities and to give current communities more functionality. Not all of these tools are useful for communities; therefore we are forced to look carefully at these tools. Generally many tools are needed to build and keep a community running. Most of these tools are made to design communities. Unfortunately not all these tools provide good design functionality which often results in bad community page design. Literature research brought us at Wenger, who wrote an article about technology for communities.
Wenger describes in his paper some essential design principles for communities. These principles are listed below. Design for ease of use and learning. Because communities are rarely their members’ highest priority, the general principle of simplicity is doubly important. A team that will spend extensive time working together may be ready to invest in learning a complex system, but community members rarely have such luxury. Difficulties in learning to use the technology will quickly discourage participation. Design for evolution. It is always a good idea to design technology that can evolve, but with
5
communities, the need to design for evolution is paramount. The community’s needs at the beginning of its life will evolve over time—a challenge for technology providers. Unlike the trajectory of a team, which can often be fairly well planned from the start, the life of a community is a voyage of discovery. Design for “closeness at hand”. Community members often do not work together on a daytoday basis, but what they interact about is often related to their main occupations. Solutions that are “one click away” from the tools that members use daytoday are preferable to those that seem “farther away” from their working environment and require effort to switch context. Providing “close at hand” access to a community of practice can be complicated by the fact that members may want to participate from home, office, or on the road. This is one reason email is still a very successful community tool in spite of all the recent developments: it integrates community interactions in the tool where people spend a large portion of their working and social lives. Design from a user ’s per spective. Like most users of technology, communities come together for a purpose, which is rarely a fascination with technology for its own sake. As in any technology design, the user perspective has to be the focus. However, because community technology is designed for communities but experienced by individuals, the process has to balance community and individual perspectives. Individual participation is shaped by many forces, including different needs and preferences, personal learning goals in the community context, as well as familiarity with the technology. (Wenger, 2005)
In the article “Input – friendliness: motivating knowledge sharing across intranets” by Hall we found one of the best way to let users participate in a online community, implement a reward system in the community. The interview, in the article, already showed that users are not willing to participate active to a community if their work is not rewarded. Hall describes a coloured profile, the colour of a members profile reflects the status of the member. The systems works with different grades for users, active users will get a higher grade what results in a different profile colour. Users who contribute much to the community will be rewarded as experts by the system.(Hall, 2003)
Concluding we can note that there are a lot of aspects worth considering when developing a online community. Wenger gives a clear boundary about design principles for communities. We used these principles in our interface design and tried to come up with an “easy” user interface. The reward system of Hall is an option to be considered because it has many advantages to get users interested in a community.
3. SYSTEM DESIGN
3.1 User Requirements The application aims to enable more informal contact between its users. The users in this case are the employees of a multinational organization. It is often stated that informal contact and more accessible knowledge about colleagues’ skills and know
6
how will greatly improve cooperation among employees and thus company proceeds. The administrator creates accounts for all users using their company ID. In that area some information is put in by the administrator and some by the user himself. By setting up a profile page that way with both formal and informal information about that particular user, and allowing for users to search for and connect to others by adding them to their ‘friend list’ or form ‘communities’ with others that have the same interests or project membership, will make it easier for employees of that company to find other users or browse through other user’s profile pages within the company or within a certain project. This application shall thereby make it easier for the users to find inhouse expertise among the company’s employees and to learn a little about their colleagues’ preferences and interests outside the company scope to help improve social contact.
In order to reach these goals this application shall offer certain options to users and to one different user called the administrator. These options shall consist of a possibility to search for other employees by their skills, interests, education level, hobbies, department, branch, project membership, community membership and current function within the company of project. There will be a special account for the administrator. This is the account of the person who has all the rights to access every part of the application. Safety reasons and to prevent every user adjusting their information ad hoc, there’s one person who changes the vital information in the database or the application structure. The administrator shall have these rights. He shall have the option to create, modify and delete member accounts, whereas the users shan’t. This application shall offer the options for the administrator to create, modify and delete all attributes and entities within the database. Also this application shall offer the option for the administrator to assign and remove user’s skills and change function descriptions. The essential information about a user that won’t change or will change only sporadically, such as user name, real name and work address are taken from the general company database. That way the information about a user will be known and can be updated by the administrator using the company’s primary user information database. The application shall offer the option for a user to create and modify a community page. That can be a community for people with the same interests, skills, hobbies or project membership. The application shall offer the option for the administrator to create and modify but also delete such community page. This application shall offer the option to a user to assign or delete other users to their contact list. For now, it’s not thought necessary for one user to allow the other to add them as a contact on the contact list by okaying a request to become some other user’s ‘friend’.
This application shall have a search engine to facilitate searching for another user or employee within the company. It shall be possible to search by real name, function description, department, branch, project, skill, interest education level and community. Users shall be able to modify their profile page by creating or adjusting their profile picture, hobbies, interests, skills and work experience. In addition to those functions a profile page shall have a user name, a home or work address, current function description, department, branch, email address and sex. These attributes shall be listed on the profile page but shall not be adjustable by the user.
7
These are taken from the company database and can only be adjusted by the administrator.
In addition to having an email address present on the profile page, it shall be possible to send an email to a user, using a separate text box on the page of a user. To improve the informal contact information and communication between the users, this application shall also have a function that shows three or less other users within the company that have the same project, hobby, skill or interest. That way, users can quickly see other employees working on the same project or have the same hobby and thus will improve both formal and informal contact by making it easier to get into contact with others by not having to actually make the effort to deliberately search for them. On the user page an event list is shown. It shall be possible for users to create on that list upcoming events that might be of interest to other users. These events shall be visible for all users and every user can create an event on this list. The events shall be ordered by date. The application shall offer a user the option to assign or compliment another user’s skill by clicking on that person’s skill in a separate compliment area. This will serve as a feedback system that allows users to show how much they agree with another employee’s skills that that particular employee has listed himself. As a functional extra, it shall also be made possible for a user to assign a skill not listed by that employee himself from the same predefined list of skills. Thereby complimenting that skill for that particular user and incrementing the cumulative rating by one. The skills that have received compliments shall have a number next to the skill that shows how many others have complimented that skill. This 'rating' will make it possible to indicate an employee's degree of skill by showing users much other users agree with that. And last but not least, the application shall offer the option to leave a personal note (‘krabbel’) on another user’s page. It shall be possible for users to edit or delete the ones written by themselves.
3.2 Scenar ios
3.2.1 Logon, change password and logout:
The first thing a user has to do is log on. Logging on is done through entering your user name and password in the respective text boxes on the logon page, followed by an 'enter' or mouse click on the enter button. When this is done, the profile page of that user is loaded and shown on the screen. Once inside the user can change his or her password by clicking on the link 'Change password' near the user information on the top left of the screen. By doing so, a screen will appear with three text boxes. One for the old password, one for the new password and one to confirm the new password. When these are filled in, the user can make these changes permanent by clicking on the 'Save' button below the three text fields. When on the profile page, a user can log out by pressing the button on the top right corner that says 'Logout'. When this button is pressed the user will be logged out and the user shall be returned to the logon page of the application.
3.2.2 Edit profile page:
8
If the profile page has not been filled in yet, the profile page will be empty, showing just the elementary information that is provided by the company. These include items that are not likely to change or are part of the general company database, such as real name, address, department, date of birth, etc. The next thing a user has to do is fill in their profile page. This is done by clicking on the 'edit me!!'buttons next to the items that the users are allowed to edit. When this is done a small window is loaded showing three options with radiobuttons and an 'edit'button. The first option is 'add', the second 'change' and the third 'delete'. When a radiobutton for one of these options is selected and the editbutton is pressed, the items that are associated with that item can be edited. For instance, when the 'edit me!'button of the work experience section is selected, the three above mentioned options are shown. When the 'add'button is selected and the 'edit!'button is pressed, a list of items of work experience that can be added is listed with respective text fields next to it. The user fills in the text fields and presses the 'add!'button. A screen appears that the addition was successful, along with a 'go back!'button to go back to the edit window. And of course the option to go back to the main editwindow is present in every step of the process, by simply clicking on the 'back!'button. When the 'change'option is selected a list of all the workexperience for that user is listed with radiobuttons next to them. The user selects one of the items by clicking on the radiobutton of that item and presses the 'update!'button. When this is done all the fields of that work experience that can be updated are shown with radiobuttons next to each name. When one is selected and the 'update!'button is pressed a text field is shown with the 'update!'button once again. The value of that can be updated by filling in the text field and pressing the 'update!'button. Afterwards a message will appear that say the operation was successful and a 'Go back!'button to go back to the main editwindow. When the 'delete'option is selected again a list of all the work experience for that user is listed with radiobuttons next to them. When the user wishes to delete one of the items, the respective radiobutton is selected and the 'delete!'button is pressed. An extra safety window is shown asking the user if he's sure. The user can then press the 'sure!'button or go back. When the 'sure'button is pressed the user is told the operation was successfully carried out and the user can go back to the main editwindow via the 'Go back'button.
3.2.3 Searching for and adding a friend:
For a user to search for a user and then add him or her to their contact list is done quite straight forward. When in the profile page, the user selects the tab called 'Search'. The search page will then be displayed on the screen. On this page there will be three search options. The user can search by name, project or both. If for example the user wishes to select someone working on a certain project, he selects the radiobutton called 'projects' and writes the name of the project in the text field above. If, for instance, the user wishes to search for an employee via his or her real name, he or she can fill in that name in the text field and click the ‘search’ button. It is also possible to search on both these items by writing AND or OR between the search items and clicking the ‘both’ radiobutton before pressing the ‘search’button. This means the search engine will search and return the users that have both items selected in the fields above. Should a user wish to find a user with either a
9
membership to a certain project or by his real name he or she can write ‘OR’. Should the user wish to find a user with both a membership to a certain project and his real name, he or she can write ‘AND’, which will return the users that have either or both the items selected.
The real names and profile pictures of the users that form the search result are shown. From this list of search results the user can click on the link ‘Go to this user’. Then the profile page of that user is shown on screen. To add the user to whose profile the user is currently watching to their friend list, all he or she has to do is press the button called 'add as friend' near the user information in the top left corner of the profile page. When this is done, a small window opens that asks the user if he's sure. When this is so, the 'yes'button can be pressed and the contact is added to the user's contact list. When the user whom the logged on user is currently watching is already in his or her contact list, a message will indicate this after the 'yes'button is pressed.
4. SYSTEM ARCHITECTURE
4.1 Data Storage
MySQL causes a lot of trouble creating and using the database. The default engine is MyISAM, but MyISAM tables are not transaction safe and do not support foreign keys. We looked at other storage engines and the options were ISAM, MEMORY, MERGE, BDB and InnoDB. Since foreign keys are only possible in the engine InnoDB we chose for this engine, however InnoDB does not support full text searching. This brought us into a dilemma, because our application requires both possibilities we could not choose between the engines. This resulted in the search function to have an option to choose between engines. For the MyISAM full text search we created a virtual table to demonstrate the possibility to search.
4.1.1 MySQL Table schemas
We have defined thirty three tables in MySQL for our database, listed below:
• USER(user_name, real_name, work_address, work_phone, mobile_phone, sex, date_of_birth, email_address, user_description, password, profile_picture)
• HAS_CONTACT(user_name, colleague_name) • FUNCTION_LIST(function_name, function_description) • HAS_FUNCTION(user_name, function_name) • BRANCH(branch_name, branch_address) • HAS_BRANCH(user_name, branch_name) • DEPARTMENT(department_name, department_description) • HAS_DEPARTMENT(user_name, department_name) • HOBBY(hobby_name, hobby_description) • HAS_HOBBY(user_name, hobby_name) • PROJECT(project_name, project_description, project_begin, project_end)
10
• HAS_PROJECT(user_name, project_name) • SKILL(skill_name, skill_description) • HAS_SKILL(user_name, skill_name) • HAS_COMPLIMENT(complimenter, complimentee, skill_name,
compliment_description, compliment_date) • COMMUNITY(community_name, community_description) • HAS_COMMUNITY(user_name, community_name) • WORK_EXPERIENCE(work_experience_id, past_function, company,
date_of_employment, date_of_departure, work_experience_description) • HAS_WORK_EXPERIENCE(user_name, work_experience_id) • NOTE(note_id, note_title, note_date, note_content) • HAS_NOTE(note_id, sender, receiver) • INTEREST(interest_name, interest_description) • HAS_INTEREST(user_name, interest_name) • EVENT_LIST(event_list_name, event_list_description) • EVENT(event_id, event_name, event_description, event_date) • HAS_EVENT(event_list_name, event_id) • POST_EVENT(event_poster, event_id) • HAS_EVENT_LIST(event_list_name, user_name) • EDUCATION(education_id, education_name, education_level) • HAS_EDUCATION(user_name, education_id) • IMAGE(image_id, image_title, image_url, image_timestamp,
image_description) • HAS_IMAGE(user_name, image_id) • USERMYISAM (user_name, real_name, work_address, user_description,
function_name,_name, department_name, hobby_name, project_name, skill_name, interest_name, past_function, past_company)
To explain how it works we will use three tables as an example. For this example we shall use the tables of ‘user’, ‘work_experience’ and ‘has_work_experience’.
CREATE TABLE user( user_name VARCHAR(64) NOT NULL, real_name VARCHAR(64) NOT NULL, work_address VARCHAR(64) NOT NULL, sex ENUM('male','female') NOT NULL, date_of_birth DATE NOT NULL, email_address VARCHAR(64) NOT NULL, user_description TEXT NOT NULL, password VARCHAR(40) NOT NULL, mobile_phone VARCHAR(15) NOT NULL, work_phone VARCHAR(15) NOT NULL, profile_picture TEXT NOT NULL DEFAULT
'http://websec.science.uva.nl/~rsu/templates/images/mannetje.png', PRIMARY KEY(user_name)) ENGINE=INNODB;
CREATE TABLE work_experience(
11
work_experience_id INT(11) NOT NULL AUTO_INCREMENT, past_function VARCHAR(64) NOT NULL, company VARCHAR(64) NOT NULL, date_of_employment DATE NOT NULL, date_of_departure DATE NOT NULL, work_experience_description TEXT NOT NULL, PRIMARY KEY(work_experience_id)) ENGINE=INNODB;
CREATE TABLE has_work_experience( user_name VARCHAR(64) NOT NULL, work_experience_id INT(11) NOT NULL, PRIMARY KEY(user_name, work_experience_id), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (work_experience_id) REFERENCES work_experience(work_experience_id) ON DELETE RESTRICT ON UPDATE RESTRICT) ENGINE=INNODB;
The user and work_experience entities are related via the relation HAS_WORK_EXPERIENCE. The user table consists of eleven attributes which have different data types. For instance, the first attribute ‘user_name’ is a VARCHAR(64) which means that this attribute can contain a maximum of 64 characters. In our view, an advantage of VARCHAR compared to CHAR is that it doesn’t store 64 characters regardless of how many are filled in by the user. Also we assigned a NOT NULL statement to this most attributes in the database, because this way they cannot be left empty. Another way to deal with empty fields is the use of the default value. The profile_picture for instance has an default value assigned to it. In this their will always be shown a profile_picture on the profile page, regardless if the user provided one or not.The primary key for this entity is ‘user_name’, because every user has a unique user name. The work_experience table consists of six attributes. The work_experience_id for instance, is an integer with a maximum of eleven integers. To make sure every work experience listing is unique we have assigned an auto_increment for the work_experience_id. The third table shows the relationship between user and work_experience. The HAS_WORK_EXPERIENCE relationship consists of two attributes. These attributes are the primary keys of the entities that are connected to this relationship. We already stated that we use the InnoDB database engine as opposed to the MyISAM to enable foreign keys. These foreign keys refer to the primary keys of the entities to which the relationship is connected. We also assigned extra restrictions to these foreign keys to make sure that the primary keys of the user or work experience tables cannot be deleted or updated so long as it is related to the other table of the relation.
12
4.1.2 ERdiagram
In this section we will show the architecture of the database. We will do this using the Entity Relationship Diagram (ERD) (Appendix B). The ERdiagram shows the structure of our database. As you can see the ERD describes the entities User, Community, Skill, Project, Education, Event, Event_list, , Interest, Hobby, Department, Image, Branch, Project, Function_list, Note and Work_experience. The name Function_list has been chosen over Function to indicate that this table holds a list of functions. The relationship HAS_FUNCTION indicates that one user can have a function, rather than a function list. Each entity has a primary key, the primary keys are underlined in the ER diagram. The discriminators for the weak entities are underlined with a dashed line to indicate that they are not primary keys but discriminators. HAS_CONTACT is a relationship between two users, therefore the relationship is connected in the diagram to the ‘user’diagram on both ends.
User
Work_experience
Community
Skill
Interest
Project
Hobby
Event
HAS_INTERES T
POST_EVENT HAS_WORK_E XPERIENCE
HAS_COMMU NITY
HAS_PROJEC T
HAS_COMPLI MENT
HAS_HOBBY
HAS_SKILL
HAS_CONTAC T
complim
entee
sender
complimen
ter HAS_BRANCH Branch
Function_list
HAS_FUNCTIO N
Department
HAS_DEPART MENT
work_phone
community_name community_descri ption company
event_description
event_name
event_id
event_date
skill_description
skill_name
sex
note_id
note_title
work_address
note_content
real_name
compliment_date interest_name interest_descriptio n hobby_name hobby_description department_descri
ption department_name
branch_name
branch_address
user_description
project_name
project_description
function_name
function_descriptio n
note_date
user
colleague
work_experience_ description
date_of_employme nt
date_of_departure
work_experience_i d
past_function
date_of_birth
email_address
password
user_name
mobile_phone
HAS_EDUCATI ON
Education
education_name
education_id
education_level
HAS_EVENT_L IST
Event_list
compliment_descri ption
HAS_EVENT
profile_picture
HAS_NOTE
receiver
HAS_IMAGE
Image
image_name image_description
project_begin
project_end
Note
event_list_name
event_list_descripti on
Figure 1: ERdiagram (For full view diagram, see appendix B)
Mapping cardinalities: • All relationship lines without black arrows are many to many relations • One user can post many events, one event has one poster (many to one) • One event has one event list, one event list has many events (one to many) • One user has many work experiences, one work experience has one user
(many to one) • One user has one branch, one branch has many users (one to many)
13
• One user has one department, one department has many users (one to many)
• One user has one function, one function has many users ( one to many)
As you can see in the ER diagram, most of the relations are many to many relationships. A few of the relations are related otherwise, the relation “event to user” is a many to one relationship. Each user can post more than one event, but every event is posted by only one user. The next relation “event to event list” is an rather clear one (one to many ), it is clear that a single event can be on only one event list, but that each event list can have more than one event. The relationship “work_experience to user” is a many to one relationship. That means each work experience is unique within the database. It is highly unlikely that two users will fill in the same exact work experience description. In other words it means that each work experience can be written by only one user. The relationship “user to branch” is a manytoone relationship. In other words it means that each user is limited to working in one branch of the company. The user is also limited to work at one department, the relationship “user to department” describes this. The relationship “user to function” describes that each user can have only one current function within the company.
4.2 Logic
In this section we will describe the logic we used for our application. First we will discuss the PHP functions and classes we used, followed by the security issues we have taken care of. In the last part we will discuss the used error handling.
4.2.1 PHP
We can distinguish two different PHP logics for our application. First, how pages are loaded, second, how PHP sets up a connection and communicates with the database and translates the results to HTML. To load a page, first of all index.php is called upon. This loads the necessary functions and starts a session. It loads the files with all the functions. Next, it checks which variables are given to the URL and assigns it to the array page. Then, the function ‘loadpage’ is called with the parameters page id, user id and the errors.
CODE The ‘loadpage’ function returns an array with a template and all the other variables to load the right page. Next a new class of template is created. The variables from the array are added to the class and the page is loaded.
CODE
14
The second logic we used is how PHP sets up a connection and communicates with the database. To create a connection and send queries between the database and PHP a class has been created called ‘database’. The constructor of the class connects to the MySQL database and selects the right database for the query.
CODE The database class consists of five functions not including the constructor. The first is ‘run_query’ and it has a string for a parameter and the string holds the query. The query is cleaned up, sent and the result is put in a variable that can be read by the entire class.
CODE The second function is ‘get_array’. Same as before, this function has a string for a parameter and the string holds the query. Next, the query is put in the ‘run_query’ function and the rows of the result are added to an array. Thus, the function ‘get_array’ returns this array.
CODE The third function, ‘num_rows’, counts the rows of the result and returns this count. The fourth function, ‘database_close’, closes the connection between the database and PHP. The fifth function, ‘mysql_error_redirect’, has a parameter that holds a string with the error message. When a query fails, or if the connection to the database fails, this query is called and redirects the browser to the error page.
CODE We can perform four actions on the database, ‘select’, ‘insert’, ‘delete’ and ‘update’. These actions have several functions for each specific query we want to send to the database. However, these actions have the same logic, so we will only discuss one of them, namely, ‘select’. For our example we will use the ‘get_work_experience’ function. The parameter is a string with the user name. First this it does is create a new database class, next, a string is created which holds the query. The result of this query is checked for having more than zero rows. If it is has more than zero rows, the result of these rows are added to an array. Then, the number of rows are added to the array. If there are zero rows, it returns a Boolean saying the result is false. The result is then returned and the database is closed.
CODE To convert the resulting array to HTML it is first put into a variable of a template. If the variable is false it returns a string containing a message saying there is no result. Else, for each row in the array, HTML code will be generated to put the result on the screen.
15
CODE 4.2.2 Security
We use authentication to prove that someone is actually who she claims to be. (Welling, Thomson, 2005) We use passwords that are encrypted and saved in the database. For encryption we used Secure Hash Algorithm 1 (SHA1)
CODE To screen user data before putting it into a database we used different techniques. We have used ‘magic_quotes_gpc’ to automatically add strip slashes. This formatting is for GET and POST variables. GET variables are used to get variables from the URL. POST variables are used to send variables to a file. The strip_tags() strips out the HTML and PHP tags from a string. This way we prevent that users plant malicious scripts in user data which can be echoed back to the browser. (Welling, Thomson, 2005) We used the htmlspecialchars() function to convert characters to their HTML entity equivalents.
CODE 4.2.3 Error Handling
If not all fields of a form are fully inserted, or, if an SQLfunction fails, an error_redirect is called. This function sends the browser to the error page.
CODE 4.3 Implementation
To explain how we implemented the SQL tables and the PHP code into an operational application, an example is used to clarify. The example we use is the work_experience table and code.
Function INSERT DELETE UPDATE SELECT get V edit F R F, V V, R Login F add colleague V V give compliment S, F V Change password F V search R, F Table 2: Implementation of the functions
S: Select list – List is retrieved from the Database V: PHP Variable values derived from php script
16
F: Text Field – Attributes number of attributes and field names are retrieved from database R: Radio Buttons – Values are retrieved from Database
In this section we provide an overview of how we implement the functions which are shown on the screen. The values can be retrieved from a php script or from a form. The form has to be filled in by the user and is further handled in the back end PHP script.
The get and edit function are general function which apply to all the get and functions handled in this application. All the get and edit functions are handled in the same way as these general functions.
4.4 GUIdesign
The logon page will consist of a logo of the company and two text fields. One for filling in a user_name and one for filling in a password. Next to the password text field there will be an enter button. (See figure 2: Login screenshot)
Figure 2: Login screenshot
The profile page consists of a few areas with different functions, located in such a way to help users quickly understand the various functions and thus attain high usability of the page and its information. A row of tabs is displayed at the top of the page. These will link to pages with special functions, such as 'Home', 'My_profile', and 'Search'.
All fields on the rest of the page have a name or text explaining the function of what comes below and within the indicated rectangle. The top left of the page contains the general user information, such as a profile picture, user name, real name, work address, department, branch, work phone number, mobile phone number, email address, age, sex, branch name and current function. That bit of the profile page shall also contain the formal and informal information attributed to that person. It holds lists of related work experience, skills, hobbies and interests.
In the top left corner there is a small list of functions. One link is called 'Change password'. By following this link a screen is shown that has three text boxes underneath one another and a 'Save'button. There is also a button that says 'Add as
17
friend' which, by clicking on it, will add that user to the currently logged on user as a contact. The same thing will apply to a community page where in this place there will be a button that will add the current user to the community currently viewed by that user. At the top right of the page there is a button called 'Log out'. Which by pressing shall log out the user and return to the logon page. (See figure 3: Profile page screenshot)
Below hobby on the right, there is an area called ‘This user has the following compliments’ where a list of compliments is shown. When hovering over it with the mouse, the entire information is shown. In the middle of the page, there is a small area containing thumbnails of pictures the user wishes to share with visitors of his or her page. When moving the mouse across the thumbnail, the whole picture is shown. To the right of that rectangle there is a small area containing upcoming events listed by users, ordered by date. Also showing time and name of the event and when hovering over it, the even description is shown. Beneath this area to the left there is one which holds the 'friends' or 'colleagues' area of that particular user. To the right one that holds the communities of which that user is a member. Both indicated by their (real) name and (profile) pictures. When hovering over these the total information of that user or community is shown. (See figure 3: Profile page screenshot)
At the bottom left there will be a bigger area that holds notes given to that user by other users. It has a subject or title, the profile picture and real name of the user that has given the comment and the date and time at which the comment was posted. Below that will be the message entered by the writer of the comment. At the bottom right there will be an area that lists 'interesting users' that have the same skill, project membership, hobby or interest as the user. Those interesting users shall be shown with their profile picture, name, function and the attribute that binds them, in our application we have taken the skill they possess as an example. (See figure 3: Profile page screenshot)
18
Figure 3: Profile page screenshot
The search page consists of three items you can search on. ‘User’, ‘project’ and ‘both’. They are situated on the left side of the screen. On the right all the search results are shown from the search query. When hovering over the resulting users the information of those users shall be displayed. When the hover screen is shown the user can click on the ‘Go to this user’ link at the bottom and the profile page of that user is shown. (See figure 4: Search page screenshot)
19
Figure 4: Search page screenshot
The edit window that pops up when the user presses the ‘edit me!’button has three options. Add, change and delete. The pane looks like Figure 5: Edit pane screenshot.
Figure 5: Edit pane screenshot
5. EVALUATION
This section describes the various aspects that have required our attention during the process of creating the database and the application. First a requirements traceability
20
matrix is presented, then some issues and their solutions are given, an evaluation of the literature is given and last but not least a discussion section is presented.
5.1. Traceability
5.1.1 Requirements Traceability Matrix
The following matrix shows whether or not the user requirements are satisfied. (See Appendix C: for the full list of requirements.)
Requirement Satisfied Explanation 1 Y Informal contacts between users by creating a sense of
belonging not only based on corporate properties, but also hobbies and interests.
2 Y It is possible to search users by skill. Users with similar skills will also be displayed on each other’s page.
3 Y The administrator holds all rights to create, modify and delete.
4 Y The administrator holds all rights to create, modify and delete.
5 Y The administrator holds all rights to create, modify and delete.
6 Y Users have to login with a unique user name and password.
7 Y A contact list is displayed on the page, which is constructed by the user.
8 Y, partially
It is possible to search for other users and projects.
9 Y An “edit” button will be displayed on the user’s own profile page to edit the page’s content.
10 Y Profile pages consist of all the described properties. 11 Y,
partially Users with similar skills will be displayed on each other’s page.
12 Y It is possible to write down past work experience which consists of the function, the date, the concerning company and a short description.
13 Y The user’s email address will be displayed on the profile page.
14 Y It is possible to post events on a event list, which will be visible for other users by retrieving the concerning event list.
15 Y By clicking on a user’s skill and give a short comment it is possible to compliment a user. The amount of clicks will be counted which will result in a score.
16 Y Their will be a link to a textbox on the profile page to leave the user a short personal note.
21
17 N Users can start a subcommunity page based on their own criteria which can be joined by other users.
18 Y The administrator holds all rights to create modify and delete.
Table 2: Requirements Traceability Matrix
5.1.2 Extensions
In this section some extensions to the user requirements are stated and explained.
Education We added the entity “Education” with the relation “has_education” so that colleagues can see some sort of background information of each other. The purpose is the same as “Work_experience”.
Image We added the entity “Image” with the relation “has_image”, since it is obvious to post your own images. The images are not uploaded in the application, but are retrieved through links.
Event_list We added the entity “Event_list” with the relation “has_event_list”, because we found out that users had two roles when it comes to events: an active role as an event poster and a passive role as an event watcher. We tried to link two connections from the entity “User” to “Event”, but since “Event” is atomic, that’s not the case. Users that watch an event do not watch them separately, but through a list. This meant that a list had to be created, which resulted in “Event_list”. Later on we thought that multiple lists were a better idea, because then it would be possible to categorize them; informal events and important business meetings will not get mixed in this way.
5.2 Issues & Solutions
5.2.1 System Design
The system design, which consists of the User Requirements and the Scenario did not bring any problems. Every aspect and option was possible to realize. This resulted in a solid basis for the database as well as the graphical user interface.
5.2.2 Database
We did have to cope with a few problems when we were creating the Entity Relationship Diagram. A user has a profile page with properties of the user like his name, age, hobby etc. At first glance it seems logical to assign all the properties as attributes of the entity “User”, however one of the requirements was the possibility to search users according to a certain property. By assigning all the properties as attributes, this would not be possible.
22
We solved the problem by selecting the possible search criteria and assign these as separate entities connected through relations. For example, the new entity “hobby” was connected through the relation “has_hobby”. All the other possible search criteria were also connected through “has_....” .
The entity “compliment” is connected with the entities “Skill” and “User” and has “compliment_id” as Primary Key, but a compliment is merely the assignment of a “skill_name” to “user”. So it would not be obvious to create the Primary Key “compliment_id”. We solved this by removing the entity “compliment” and moving its attributes to the relation “has_compliment”. We also removed the Primary Key “compliment_id”. The Primary Key of Skill (skill_name) and the Primary Key of User (user_name) in the form of a “complimenter” and “complimentee” would be unique enough, since it is only possible for a user to compliment another user once on a certain skill.
The entities “Department” and “Branch” are not linked because it could be possible for a company to have the same departments in multiple branches. To enable that option the entities “Department” and “Branch” are independent.
If users would have the freedom to name lists (like a hobby or interest) themselves, there could be a lot of ambiguity; multiple terms that mean exactly the same. We used fixed lists for such attributes called “…._name” and “….._description” to prevent ambiguity when searching for users according to certain criteria. When it is necessary to have a value added (like a hobby that is not on the list), it is possible for users to contact the .administrator about it.
The entity “Note” and the relation “has_note” were created which raised a lot of questions since a note is merely a relation between two users. We proposed to drop the entity “Note”. This resulted in more complications, since a relation cannot have its own primary key, which was necessary for every note. Combinations of attributes could not make it unique (like in “has_compliment”). We eventually readded the entity “Note”.
The entity “Education” initially had “education_institute” as attribute, because an education is different per institute. Eventually this attribute was removed because of the unlimited combinations it would have with “education_name” to form an “education_id”.
Administrator is not explicitly implemented, although it is mentioned in the requirements. The reason is that administrator is able to do everything and the full functionality is provided in the application, but since websec does not support granted there is no explicit difference between user and administrator. Actually our role as “group04” in the database shows exactly the possibilities of the administrator. This is why we marked the requirements concerning the administrator as satisfied.
Views were created and partially used for search functions. The reason is that they were originally created to separate the user from the administrator. But since the
23
difference between user and administrator cannot be set on websec, it was unnecessary to implement the views.
MySQL also caused a lot of trouble creating and using the database. See Data Storage section. Another issue with MySQL is that it can’t give itself any errors and does a sort of recovery to prevent the error. In our database we clearly stated that columns can not be left empty (NOT NULL). However, MySQL replaces the NULL value with an empty syntax (“”), which is possible. The solution was to use triggers to signal an error ourselves. Again MySQL had a flaw; it does not support SIGNAL. Since it has so many problems we did not implement “error if NULL”, but it should be present. However, the issue was solved using PHP to check if each field is filled before it is inserted in MySQL.
5.2.3 GUI
The scope of the connection with the database is not as planned. The connection was set as a variable. By calling this variable the application connects with the database, however the server did not connect as expected. The solution was making the variable GLOBAL. The problem with making it global is that unauthorized functions can easily access our database.
We didn’t implement the community pages in the application. These pages however will have the same set up and will look the same as a profile page. Therefore we have chosen to not implement this function yet and focus purely on the profile page and the search functions.
We initially wanted to use a dropdown menu in the search function. The advantage of a dropdown menu is that the containing lists are very clear and typing errors can not be made. Eventually we chose for a text field. To prevent and cope with spelling errors, it is possible to search for partial terms. AND and OR are also executed in the text field. It is possible to search for “User” by entering: name, user_description, work_address and email address. To search for “Project” enter project_name or project_description (both InnoDB). When you search for “Both” it includes all of the above. The search function is DEFAULT set on “Both”.
5.2.4 Compatibility
The application presentation is designed in CSS 3.0 for Mozilla Firefox. This way it is possible to separate the layout from the structure. This results in the advantage of a clear application structure. Another reason for choosing Mozilla Firefox is the expectation that it will be a ubiquitous browser in the near future and has a higher overall compatibility. (See Appendix: D – Browser Comparison)
5.3 Literature Evaluation
In this section we will compare the literature to our project, we will try to show the link between the literature and how we used the literature in our project.
24
As stated in the literature section of this document Wenger describes that a good community design is essential, the design principles of Wenger (in short) are “Design for ease of use and learning, Design for evolution, Design for “closeness at hand”, Design from a user’s perspective”(Wenger, 2005). The first design principle of Wenger “Design for ease of use and learning” we used in all stages of our project. We tried to design a community concept that is easy to use and easy to learn for the user. We designed the community in a user perspective way. We developed a community website “Con2Col”, in the visual design of the website we tried to create a website design that is easy to use and easy to learn. The website includes a user manual, for users who never used a community website. The second design principle of Wenger “Design for evolution” was not an easy one for us to implement due the lack of time. At first we planned to apply all design principles of Wenger but when the project progressed we could not implement all principles fully. We created the website in a manner that more options can be implemented to the website trough the website admin, the community can evolve in a certain level of degree. A restriction to this community is that it can’t evolve over time, it is restricted to the manner it has been build at the moment. The community has been bound to one community concept view. The third design principle of Wenger “Design for closeness at hand” we tried to use in the design of our community. We tried to make a simple interface that can be viewed and used from everywhere in the world. The users of our community can participate from home, office, or on the road etc. Wenger stated in his article “email is still a very successful tool”, the use of email is an important tool in the community. Community users spend a large portion of their time using email structured programs. In our Con2Col project we implemented “notes”, users can contact each other by notes. The note option we implemented can be compared with an email option. The fourth design principle of Wenger “Design from a user perspective” used in the implementation of our community, and the whole project. As Wenger stated “In any technology design, the user perspective has to be the focus”, we tried to make an easy to use website interface. We made an option “Community” in Con2Col, where users can start/join a community inside our Con2Col community. An single user has his own profile page, where information can be found concerning the user. The user is also able to modify content in his profile page. Wenger describes that a community has to find a balance between community perspectives and individual perspectives.
As stated in the literature section of this document Hall found a way to get the community activity on a higher level: the colored profile idea. After reading this article we searched manners to implement this idea in our community. After some ideas we invented a concept in which users can complement each other on skill. The number of compliments on one skill gives a rating to an individual user, what correspondents with the “colored profile” of Hall.
5.4 Discussion
In this section we discuss lessons we have learned during this project and how we would do similar work in the future with current knowledge.
25
In the future we might work with a different database than MySQL to prevent any of the main problems we had with MySQL and have encountered during the process. These issues are mention above. With more time to design and build the application, some things in the application would have been carried out more thoroughly and with more accuracy. For instance, the search results are now sorted by date or alphabet, but sorting on relevance could be a future improvement. That means that when a user has a lot of compliments for a certain skill, then searching for that a user providing that skill should give him/her a higher listing in the search results. More of the functionalities could have been made operational. For instance, for the search engine, more items one can search on could have been implemented. Plus a community page could have been constructed and a page could have been added to tell the user his password was incorrect.
6. CONCLUSION
To conclude, we can say that we have shown that it is possible to design and implement a database and Graphical User Interface for a network with formal and informal information about it’s users to provide additional (social) contact between a company’s employees.
7. REFERENCES
Welling L., Thomson L., PHP and MSQL Web Development, Third Edition, Indianapolis: Developer’s Library (2005)
A. Silberschatz, H. Korth, and S. Sudarshan, Database System Concepts, 5th ed: McGrawHill. (2006) ISBN: 0072958863.
Etienne Wenger, Nancy White, John D. Smith and Kim Rowe, Technology for communities. (2005)
Hazel Hall, Input friendliness: motivating knowledge sharing across intranets. (2003)
Kendal Whitehouse, Cutting through the clutter: what makes an intranet successful? (2006)
Homans, G.G., The cash posters: a study of a group of working girls, American Sociological Review 6 (1954)
Flap, H. Informele sociale netwerken binnen bedrijven. Bij wijze van Inleiding. Universiteit van Utrecht (2001)
26
APPENDIX A: User Manual
If you see that this manual is incorrect or that it misses important information, please contact the administrator. Before reading the manual, we wish to note that we expect some experience with web pages from the user.
General topics
1. Login 2. Profile
2.1 General 2.2 Interest 2.3 Skills 2.4 Work experience 2.5 Hobby 2.6 Compliments 2.7 Photo 2.8 Agenda 2.9 Colleagues of User 2.10 Communities 2.11 Projects 2.12 Notes 2.13 Interesting users
3. Search function
Login
Username: Fill in username Password: Fill in password
After filling both fields, press LOGIN
Profile:
General Information about: name, address, telephone number, department, date of birth, function, mobile phone, sex, user description, branch, education, upload your profile picture.
Only a few options on this page can be modified.
Interest List of interests, user is able to add/remove interests
Skills List of skills, user is able to add/remove skills
27
Work experience List of work experience in the past, user is able to add/remove/modify work experiences
Hobby List of hobby’s, user is able to add/remove hobby’s
This user has the following compliments List of compliments, users can’t give compliments to themselves.
Photo List of personal photos of the user, user is able to add/remove photos.
Agenda General agenda points, users are able to add agenda points to the general agenda.
Colleagues of User List of colleagues of the user, user is able to add/remove colleagues. Colleagues in this section are hyperlinked to their own profile pages.
Communities List of communities, the user is participating in. User is able to create community/delete (created community)/modify (created community)/join community/leave community
Projects List of projects the user is participating in. User is able to join/leave project
Notes List of notes, the user received Users can’t give notes to themselves.
Interesting users List of possible interesting users, automatically generated by the machine
Search function
Search Username: Fill in the username you want to search Project: Select the project you want to search Users have two search options, users can search on username OR project or username AND project.
APPENDIX B: ERdiagram (see next page)
28
User
Work_experience
Community
Skill
Interest
Project
Hobby
Event
HAS_INTERES T
POST_EVENT HAS_WORK_E XPERIENCE
HAS_COMMU NITY
HAS_PROJEC T
HAS_COMPLI MENT
HAS_HOBBY
HAS_SKILL
HAS_CONTAC T
complim
entee
sender
complimen
ter HAS_BRANCH Branch
Function_list
HAS_FUNCTIO N
Department
HAS_DEPART MENT
work_phone
community_name community_descri ption company
event_description
event_name
event_id
event_date
skill_description
skill_name
sex
note_id
note_title
work_address
note_content
real_name
compliment_date interest_name interest_descriptio n hobby_name hobby_description department_descri
ption department_name
branch_name
branch_address
user_description
project_name
project_description
function_name
function_descriptio n
note_date
user
colleague
work_experience_ description
date_of_employme nt
date_of_departure
work_experience_i d
past_function
date_of_birth
email_address
password
user_name
mobile_phone
HAS_EDUCATI ON
Education
education_name
education_id
education_level
HAS_EVENT_L IST
Event_list
compliment_descri ption
HAS_EVENT
profile_picture
HAS_NOTE
receiver
HAS_IMAGE
Image
image_name image_description
project_begin
project_end
Note
event_list_name
event_list_descripti on
29
APPENDIX: C – User Requirements
• This application shall enable more informal contacts between its users. • This application shall make it facile to find inhouse expertise. • This application shall offer the option for the administrator to create,
modify and delete member_accounts. • This application shall offer the option for the administrator to assign and
remove skills and change function_descriptions. • This application shall offer the option for the administrator to create,
modify and delete all attributes and entities in the database. • This application shall have a user_name and password acces to the user
only, and an option to change the password inside the application. • This application shall offer the option to a user to assign other users to their
contact list. • This application shall have a search engine to search by name,
function_description, education level, department, branch, project, skill, hobby, interest and community.
• Users shall be able to modify profile_picture, hobbies, interests, education and work_experience on their own profile pages.
• A profile page shall list a user_name, real_name, work_address, work_phone_number, mobile_phone_number, profile_picture, function_description, department, branch, email_address, skills, hobbies, interests, sex, education, work_experience, date_of_birth.
• This application shall have a function that shows 3 or less other people within the company with the same project, hobby, skill or interest.
• The application shall offer the option to the user to give a description of work_experience via a small text box.
• The application shall offer the option to send an email from the profile page of a user to that user.
• The application shall offer the option for users to list events in an event_list that will be visible to all users.
• The application shall offer the option to assign or compliment a skill of an employee by clicking on their skill.
• The application shall offer the option to leave a personal note for a user to read, that will be listed by date at the bottom of the user's profile page.
• The application shall offer the option for a user to create and adjust a community_page.
• The application shall offer the option for the administrator to create, modify and delete a community_page.
30
APPENDIX: D – Browser Comparison
Operating system suppor t The operating systems the browsers were designed to run on without emulation; for the given browser/OS combination, there are six possibilities:
• No indicates that it does not exist or was never released.
• Partial indicates that while the browser works, it lacks important functionality compared to versions for other OSs; it is still being developed however.
• Beta indicates that while a version of the browser is fully functional and has been released, it is still in development (e.g. for stability).
• Yes indicates that the browser has been officially released in a fully functional, stable version.
• Dropped indicates that the latest stable version of the browser does not work on the operating system without emulation, although an older version is available that does. The number in parentheses is the last known stable version which was officially released for that OS.
• Included indicates that the browser comes prepackaged as part of or has been integrated into the operating system.
Please note that the list is not exhaustive, but rather reflects the most common OSs today (e.g. Netscape Navigator was also developed for OS/2 at a time when Mac OS X did not yet exist) but does not include the growing appliance segment (e.g.the Opera browser has gained a leading role for use in mobile phones, smartphones and Personal Digital Assistants, and is also used in Interactive televisions).
Browser Windows Mac OSX
Mac OS9
Linux Berkeley Software
Distr ibution Unix
Internet Explorer (Tr ident) Included No No No No Dropped (5.0)
31
Mozilla Fir efox Yes Yes No Yes Yes Yes
Netscape Yes Yes Yes Yes Yes Yes
Browser features Information about what common browser features are implemented natively (without thirdparty addons).
Browser Bookmark managing
Download managing
Password managing
Form managing
Spell checking
Search engine toolbar
Internet Explorer † Yes No Yes Yes No † No †
Mozilla Fir efox Yes Yes Yes Yes No † Yes
Netscape Yes Yes Yes Yes Yes Yes
Accessibility features Information about what common accessibility features are implemented natively (without thirdparty addons).
Browser Tabbed browsing
Popup blocking
Incremental finding
Ad filter ing
Page zooming
†
Internet Explorer No † Partial † No No No †
Mozilla Fir efox Yes Yes Yes Partial † No [1]
Netscape Yes Yes Yes Partial † No
32
Accessibility features (cont.) Information about what common accessibility features are implemented natively (without thirdparty addons).
Browser HTML access key
Tabbing navigation
Spatial navigation
Caret navigation
Mouse gesture
Text to
speech
Voice control
Internet Explorer Yes Yes No No No † No No
Mozilla Fir efox Yes Yes No † Yes No † No † No
Netscape Yes Yes No Yes No † No No
Web technology suppor t Information about what web standards, and technologies the browsers support, except for JavaScript. External links lead to information about support in future versions of the browsers or extensions that provide such functionality.
Browser CSS2 †
Frame s Java XSLT
XHT ML 1.0 †
XHT ML 1.1 †
Mat hM L
XFo rms RSS Atom SVG
Web Form s 2.0
Voice XML/ X+V
Internet Explorer
Partia l Yes Yes Yes No No No † No No † No No No † No
Mozilla Fir efox Yes Yes Yes Yes Yes Yes Yes Yes Yes Ye s
Parti al No No
Netscape Yes Yes Yes Yes Yes Yes Yes No No No No No No
33
JavaScr ipt suppor t Information about what JavaScript technologies the browsers support. Note that although XPath is used by XSLT, it is only considered here if it can be accessed using JavaScript. External links lead to information about support in future versions of the browsers or extensions that provide such functionality.
Browser JavaScr ipt ECMAScr ipt 3
DOM 1
DOM 2
DOM 3 XPath DHTML AJAX Rich editing
Internet Explorer Yes Yes Partial No † No Yes Yes Yes Yes
Mozilla Fir efox Yes Yes Yes Yes No † Yes Yes Yes Yes
Netscape Yes Yes Yes Yes No † Yes Yes Yes Yes
Protocol suppor t Information about what internet protocols the browsers support. External links lead to information about support in future versions of the browsers or extensions that provide such functionality.
Browser HTTP E
mail † FTP NNTP
(Usenet) † SSL IRC Gopher IDN data: URL BitTorrent
Internet Explorer Partial
† No Yes No Partial † No Disabled No † No No
Mozilla Fir efox Yes No Yes No Yes No † Yes Yes † Yes No
Netscape Yes Yes Yes Yes Yes No † Yes Yes Yes No
34
Image format suppor t Information about what image formats the browsers support. External links lead to information about support in future versions of the browsers or extensions that provide such functionality.
Browser JPEG GIF PNG MNG TIFF † SVG † PDF † 2D
Canvas
Internet Explorer Partial † Yes Partial † No disable No No No †
Mozilla Fir efox Yes Yes Yes No No Partial † No Yes
Netscape Yes Yes Yes No No No No No
Internationalization Most browsers are available in more than one language.
Browser Languages (Total)
Internet Explorer
Arabic (ar), Brazilian (br), Bulgarian (bg), Catalan (ca), Chinese (Simplified) (zh), Chinese (Traditional) (zh), Chinese (Hong Kong) (zh), Croatian (hr), Czech (cs), Danish (da), Dutch (nl), English (en), Estonian (et), Finnish (fi), French (fr), German (de), Greek (el), Hebrew (he), Hungarian (hu), Italian (it), Japanese (ja), Korean (ko), Latvian (lv), Lithuanian (lt),
Norwegian (nb), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Slovak (sk),
Slovenian (sl), Spanish (es), Swedish (sv), Thai (th), Turkish (tr) (33)
Mozilla Fir efox
Afrikaans (af), Albanian (sq), Arabic (ar), Asturian (??), Basque (eu), Bulgarian (bg),
Catalan (ca), Chinese (zh), Czech (cs), Danish (da), Dutch (nl), English (en), Finnish (fi),
French (fr), German (de), Greek (el), Hebrew (iw), Hungarian (hu), Irish (ga), Italian (it), Japanese (ja), Korean (ko), Lithuanian (lt),
35
Macedonian (mk), Norwegian (no), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Slovak (sk), Slovenian (sl), Spanish (es),
Swedish (sv), Turkish (tr) (34)
Netscape English (en)
Vulnerabilities (disputed — see talk page) This comparison of unpatched publicly known vulnerabilities in latest stable version browsers is based on vulnerabilities reports by SecurityFocus and Secunia. See computer security for more details about the importance of unpatched known flaws.
Known unpatched vulnerabilities
Secunia Secur ityFocus Browser
extr emely cr itical (number / oldest)
highly cr itical (number / oldest)
moderately cr itical
(number / oldest)
less cr itical (number / oldest)
not cr itical
(number / oldest)
(number / oldest)
Internet Explorer (Windows 98, NT, Me, 2000)
0
1 April 25, 2006
5 November 17, 2004
8 February 27, 2004
7 November 7, 2003
92 April 18, 2001
Internet Explorer (Windows XP SP2)
0
1 April 25, 2006
5 November 17, 2004
8 February 27, 2004
7 November 7, 2003
56 September 16,
2004
36
Mozilla Fir efox 0 0 0
2 August 30, 2004
1 May 23, 2006
0
37
APPENDIX: E – MySQL Tables
== SQL CREATE TABLE ==
CREATE TABLE usermyisam( user_name VARCHAR(64) NOT NULL, real_name VARCHAR(64) NOT NULL, work_address VARCHAR(64) NOT NULL, user_description TEXT NOT NULL, function_name VARCHAR(64) NOT NULL, branch_name VARCHAR(64) NOT NULL, department_name VARCHAR(64) NOT NULL, hobby_name VARCHAR(64) NOT NULL, project_name VARCHAR(64) NOT NULL, skill_name VARCHAR(64) NOT NULL, interest_name VARCHAR(64) NOT NULL, past_function VARCHAR(64) NOT NULL, past_company VARCHAR(64) NOT NULL, PRIMARY KEY(user_name), FULLTEXT (user_name, real_name, work_address, user_description,
function_name, branch_name, department_name, hobby_name, project_name, skill_name, interest_name, past_function, past_company)
) ENGINE=MYISAM;
CREATE TABLE user( user_name VARCHAR(64) NOT NULL, real_name VARCHAR(64) NOT NULL, work_address VARCHAR(64) NOT NULL, sex enum('male','female') NOT NULL, date_of_birth DATE NOT NULL, email_address VARCHAR(64) NOT NULL, user_description TEXT NOT NULL, password VARCHAR(40) NOT NULL, mobile_phone VARCHAR(15) NOT NULL, work_phone VARCHAR(15) NOT NULL, profile_picture TEXT NOT NULL DEFAULT 'http://websec.science.uva.nl/~rsu/templates/images/mannetje.png', PRIMARY KEY(user_name)
) ENGINE=INNODB;
CREATE TABLE function_list( function_name VARCHAR(64) NOT NULL, function_description TEXT NOT NULL,
38
PRIMARY KEY(function_name) ) ENGINE=INNODB;
CREATE TABLE has_function( user_name VARCHAR(64) NOT NULL, function_name VARCHAR(64) NOT NULL, PRIMARY KEY(user_name, function_name), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (function_name) REFERENCES function_list(function_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE has_contact( user_name VARCHAR(64) NOT NULL, colleague_name VARCHAR(64) NOT NULL, PRIMARY KEY(user_name, colleague_name), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (colleague_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE branch( branch_name VARCHAR(64) NOT NULL, branch_address VARCHAR(64) NOT NULL, PRIMARY KEY(branch_name)
) ENGINE=INNODB;
CREATE TABLE has_branch( user_name VARCHAR(64) NOT NULL, branch_name VARCHAR(64) NOT NULL, PRIMARY KEY(user_name, branch_name), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (branch_name) REFERENCES branch(branch_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE department( department_name VARCHAR(64) NOT NULL, department_description TEXT NOT NULL, PRIMARY KEY(department_name)
39
) ENGINE=INNODB;
CREATE TABLE has_department( user_name VARCHAR(64) NOT NULL, department_name VARCHAR(64) NOT NULL, PRIMARY KEY(user_name, department_name), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (department_name) REFERENCES department(department_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE hobby( hobby_name VARCHAR(64) NOT NULL, hobby_description TEXT NOT NULL, PRIMARY KEY(hobby_name)
) ENGINE=INNODB;
CREATE TABLE has_hobby( user_name VARCHAR(64) NOT NULL, hobby_name VARCHAR(64) NOT NULL, PRIMARY KEY(user_name, hobby_name), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (hobby_name) REFERENCES hobby(hobby_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE project( project_name VARCHAR(64) NOT NULL, project_description TEXT NOT NULL, project_begin DATE NOT NULL, project_end DATE NOT NULL, PRIMARY KEY(project_name)
) ENGINE=INNODB;
CREATE TABLE has_project( user_name VARCHAR(64) NOT NULL, project_name VARCHAR(64) NOT NULL, PRIMARY KEY(user_name, project_name),
40
FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (project_name) REFERENCES project(project_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE skill( skill_name VARCHAR(64) NOT NULL, skill_description TEXT NOT NULL, PRIMARY KEY(skill_name)
) ENGINE=INNODB;
CREATE TABLE has_skill( user_name VARCHAR(64) NOT NULL, skill_name VARCHAR(64) NOT NULL, PRIMARY KEY(user_name, skill_name), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (skill_name) REFERENCES skill(skill_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE has_compliment( complimenter VARCHAR(64) NOT NULL, complimentee VARCHAR(64) NOT NULL, skill_name VARCHAR(64) NOT NULL, compliment_date TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL, compliment_description TEXT NOT NULL, PRIMARY KEY(complimenter, complimentee, skill_name), FOREIGN KEY(complimenter) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY(complimentee) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY(skill_name) REFERENCES skill(skill_name) ON DELETE RESTRICT ON UPDATE RESTRICT ) ENGINE=INNODB;
CREATE TABLE community( community_name VARCHAR(64) NOT NULL, community_description TEXT NOT NULL, PRIMARY KEY(community_name)
) ENGINE=INNODB;
41
CREATE TABLE has_community( user_name VARCHAR(64) NOT NULL, community_name VARCHAR(64) NOT NULL, PRIMARY KEY(user_name, community_name), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (community_name) REFERENCES community(community_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE work_experience( work_experience_id INT(11) NOT NULL AUTO_INCREMENT, past_function VARCHAR(64) NOT NULL, company
VARCHAR(64) NOT NULL, date_of_employment DATE NOT NULL, date_of_departure DATE NOT NULL, work_experience_description TEXT NOT NULL, PRIMARY KEY(work_experience_id)
) ENGINE=INNODB;
CREATE TABLE has_work_experience( user_name VARCHAR(64) NOT NULL, work_experience_id INT(11) NOT NULL, PRIMARY KEY(user_name, work_experience_id), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (work_experience_id) REFERENCES work_experience(work_experience_id) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE note( note_id INT(11) NOT NULL AUTO_INCREMENT,
note_title VARCHAR(64) NOT NULL, note_date TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL, note_content TEXT NOT NULL, PRIMARY KEY(note_id)
) ENGINE=INNODB;
42
CREATE TABLE has_note( sender VARCHAR(64) NOT NULL, receiver VARCHAR(64) NOT NULL, note_id INT(11) NOT NULL,
PRIMARY KEY(note_id, sender, receiver), FOREIGN KEY (sender) REFERENCES user(user_name) ON UPDATE RESTRICT, FOREIGN KEY (receiver) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE interest( interest_name VARCHAR(64) NOT NULL, interest_description TEXT NOT NULL, PRIMARY KEY(interest_name)
) ENGINE=INNODB;
CREATE TABLE has_interest( user_name VARCHAR(64) NOT NULL, interest_nameVARCHAR(64) NOT NULL, PRIMARY KEY(user_name, interest_name), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (interest_name) REFERENCES interest(interest_name) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE event( event_id INT(11) NOT NULL AUTO_INCREMENT, event_name VARCHAR(64) NOT NULL, event_description TEXT NOT NULL, event_date TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL, PRIMARY KEY(event_id)
) ENGINE=INNODB;
CREATE TABLE event_list( event_list_name VARCHAR(64) NOT NULL, event_list_description TEXT NOT NULL, PRIMARY KEY(event_list_name)
) ENGINE=INNODB;
CREATE TABLE post_event( event_poster VARCHAR(64) NOT NULL,
43
event_id INT(11) NOT NULL, PRIMARY KEY(event_poster, event_id), FOREIGN KEY (event_poster) REFERENCES user(user_name), FOREIGN KEY (event_id) REFERENCES event(event_id) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE has_event( event_list_name VARCHAR(64) NOT NULL, event_id INT(11) NOT NULL, PRIMARY KEY(event_list_name, event_id), FOREIGN KEY (event_list_name) REFERENCES event_list(event_list_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (event_id) REFERENCES event(event_id) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE has_event_list( event_list_name VARCHAR(64) NOT NULL, user_name VARCHAR(64) NOT NULL,
PRIMARY KEY (event_list_name, user_name), FOREIGN KEY (event_list_name) REFERENCES event_list(event_list_name) ON
DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (user_name) REFERENCES user(user_name) ) ENGINE=INNODB;
CREATE TABLE education( education_id INT(11) NOT NULL AUTO_INCREMENT, education_name VARCHAR(64), education_level VARCHAR(64) NOT NULL, PRIMARY KEY(education_id)
) ENGINE=INNODB;
CREATE TABLE has_education( user_name VARCHAR(64) NOT NULL, education_id INT(11) NOT NULL, PRIMARY KEY(user_name, education_id), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (education_id) REFERENCES education(education_id) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE image ( image_id int(11) NOT NULL auto_increment,
44
image_title varchar(64) NOT NULL, image_url varchar(128) NOT NULL, image_timestamp TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL, image_description text NOT NULL, PRIMARY KEY (image_id)
) ENGINE=InnoDB;
CREATE TABLE has_image( user_name VARCHAR(64) NOT NULL, image_id INT(11) NOT NULL, PRIMARY KEY(user_name, image_id), FOREIGN KEY (user_name) REFERENCES user(user_name) ON DELETE RESTRICT ON UPDATE RESTRICT, FOREIGN KEY (image_id) REFERENCES image(image_id) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=INNODB;
CREATE TABLE usermyisam( user_name varchar(64) NOT NULL, real_name varchar(64) NOT NULL, work_address varchar(64) NOT NULL, user_description text NOT NULL, function_name varchar(64) NOT NULL, branch_name varchar(64) NOT NULL, department_name varchar(64) NOT NULL, hobby_name varchar(64) NOT NULL, project_name varchar(64) NOT NULL, skill_name varchar(64) NOT NULL, interest_name varchar(64) NOT NULL, past_function varchar(64) NOT NULL, past_company varchar(64) NOT NULL, PRIMARY KEY (user_name) ) ENGINE=MyISAM;
#set autocommit=0;
45
== Invulling database ==
INSERT INTO user VALUES ('Rienk83', 'Rienk Su', 'Roetersstraat 15', 'Male', '19830215',
'[email protected]', 'Student Informatiekunde', sha1('password'), '0612345678', '0201234567', DEFAULT);
INSERT INTO user VALUES ('dsettels', 'Dominic Settels', 'Roetersstraat 15', 'Male', '19801014',
'[email protected]', 'Student Informatiekunde', sha1('password'), '0627335789', '0201234568', DEFAULT);
INSERT INTO user VALUES ('nbotter', 'Nick Botter', 'Roetersstraat 15', 'Male', '19851023',
'[email protected]', 'Student Informatiekunde', sha1('password'), '0645864545', '0201234569', DEFAULT);
INSERT INTO user VALUES ('deepak', 'Deepak Sharma', 'Roetersstraat 15', 'Male', '19860610',
'[email protected]', 'Student Informatiekunde', sha1('password'), '0646843394', '0201234570', DEFAULT);
INSERT INTO user VALUES ('Jos', 'Jos de Bruin', 'Parklaan 55', 'Male', '19550201', '[email protected]',
'Chief Software Engineer', sha1('password'), '0626130936', '030–2294066', DEFAULT);
INSERT INTO user VALUES ('Anton', 'Anton Bossenbroek', 'Roetersstraat 15', 'Male', '19820610',
'[email protected]', 'Practicum begeleider', sha1('password'), '0687654321', '0201234570', DEFAULT);
INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Anna Paulowna', 'Regulierstraat 68'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Ouderlandertocht', 'Oudweg 1'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Beverwijk', 'Genieweg 5'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Wieringermeer', 'Wieringerwerf 2'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Groningen', 'Meibergerweg 31 34'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Ommen', 'Overlooplaan 38'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Ravenstein', 'Dorpsweg 14'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'St. Petersburg', 'Nevski Prospekt 67'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Genova', 'Via Vitoria 4547'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Milano', 'Fatebenefratelli di Milano 1'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Brussel', 'Rue DEmaret 8'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Eindhoven', 'Phillipsweg 4'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Maasvlakte', 'Laan van de wereld 123'); INSERT INTO `branch` ( `branch_name` , `branch_address` ) VALUES ( 'Rotterdam', 'Amsterdamseweg 78');
46
INSERT INTO `department` ( `department_name` , `department_description` ) VALUES ('ICT', 'The companys computer department, it handles the internal
computer system and its network.'); INSERT INTO `department` ( `department_name` , `department_description` ) VALUES ('Marketing', The department that handles the commercial functions of
transferring goods to consumers.'); INSERT INTO `department` ( `department_name` , `department_description` ) VALUES ('Personnel', 'The administrative division of the organization concerned
with the body of persons employed by or active in it.'); INSERT INTO `department` ( `department_name` , `department_description` ) VALUES ('Finance', 'De companys financial department. It handles incoming and
outgoing finances.'); INSERT INTO `department` ( `department_name` , `department_description` ) VALUES ('Management', 'The entirety of managerial functions in the company are
catergorized in this department.'); INSERT INTO `department` ( `department_name` , `department_description` ) VALUES ('Logistics', 'The companys transport department. It handles all the non
electronic transfers.'); INSERT INTO `department` ( `department_name` , `department_description` ) VALUES ('Research & Development', 'The R&D department occopies itself with
with coming up with new ideas and trying to develop them so they can be used to add to the companys efficiency aspects.');
INSERT INTO `department` ( `department_name` , `department_description` ) VALUES ('Legal', 'The legal department handles all the companys internal and
external aspects that involve the law, going from pension plans to law suits.');
INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'MAVO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'HAVO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'VWO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'VMBO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'LTS'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'MTS'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'HTS'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'LBO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'MBO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'HBO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` )
47
VALUES (NULL , 'Bedrijfskunde', 'HBO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , NULL , 'WO'); INSERT INTO `education` ( `education_id` , `education_name` , `education_level` ) VALUES (NULL , 'Informatiekunde', 'WO');
INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Sailing', 'Out on the open water, the wind in your sails, the sun on your
face...'); INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Tennis', 'The nobel sport of trying to outdo your opponent by hitting a
small yellow, bouncy ball to his side of the field across a 90cm high net and inside the white lines.');
INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Soccer', 'A popular sport that requires hardly any explanation, except
maybe to some female spectators as to why sometimes the players score but dont get points.');
INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Golf', 'A gentlemens sport, requiring the player to hit a small white ball
across a large green into a small hole, using a club and ones keen wits.'); INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Hockey', 'To be thought an upper class sport which involves two teams
of eleven players using wooden sticks to get a hard plastic white ball in the other teams goal.');
INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Portret Painting', 'Using ones skill as a painter to portray a living person
onto a canvas.'); INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Fishing', 'Doing nothing but sitting at the edge of water, enjoying that
very thing.'); INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Horse Racing', 'The old craft of riding a horse as fast as one can.'); INSERT INTO `hobby` ( `hobby_name` , `hobby_description` ) VALUES ('Bungee jumping', 'Jumping off a high place restrained only by a thin bit
of elastic rubber, after which one will bounce back up and down again until one is hoisted up.');
INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Cars', 'Loving automobiles for their power, beauty, excellence and the
freedom they provide.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Formula 1', 'The pinnacle of racing. Twenty two eight hundred
horsepower race cars battling for a Grand Prix every two weeks.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Insurance', 'The exciting world of coverage by a contract binding a party
to indemnify another against specified loss in return for premiums paid'); INSERT INTO `interest` ( `interest_name` , `interest_description` )
48
VALUES ('Electronics', 'The science and technology of devices and systems using electricity to function.');
INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Pop Music', 'Popular music, a genre dating back to the 1950s. A bland
watereddown version of rocknroll with more rhythm and harmony and an emphasis on romantic love.');
INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Rock and roll music', 'A form of popular music arising from and
incorporating a variety of musical styles, especially rhythm and blues, country music, and gospel. Originating in the United States in the 1950s, it is characterized by electronically amplified instrumentation, a heavily accented beat, and relatively simple phrase structure.');
INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Classical music', 'A traditional genre of music conforming to an
established form and appealing to critical interest and developed musical taste '); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Playing guitar', 'The art of making music using the guitar as an
instrument. The most widely played instrument today.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Pottery', 'The craft of making earthenware, often using clay and then
baking the form ofr shape one has created to let it harden so it can be used.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Reading', 'To examine and grasp the meaning of written or printed
characters, words, or sentences.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Comics', 'To enjoy reading or making comic strips. Picturized stories for
ones amusement.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Movies', 'Enjoying going to or seeing films. Big Hollywood blockbusters
or an obscure film noir...'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Astronomy', 'The (semi)scientific study of matter in outer space,
especially the positions, dimensions, distribution, motion, composition, energy, and evolution of celestial bodies and phenomena.');
INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Religion', 'Interested in the belief in and reverence for a supernatural
power or powers regarded as creator and governor of the universe.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Cooking', 'The preparation of food for consumption.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Go out', 'To enjoy going on a date or to hang out with friends in a bar or
dancing.'); INSERT INTO `interest` ( `interest_name` , `interest_description` ) VALUES ('Dancing', 'To enjoy moving rhythmically to music whilst going out or
professionally.');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
49
VALUES ('Aanleg C124 l. Genua', 'The building of a large C124 gas pipe to an platform in Genua, Italy', '20031201', '20070601');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('ATEX2005', 'Changes to offshore oil platform in the north sea.', '2005 1001', '20060201');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('BBL', 'Factory building ops.', '20040601', '20060630'); INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` ,
`project_end` ) VALUES ('Bouw mengstation Anna Paulowna ', 'Building a station near the Dutch
town of Anna Paulowna to mix and transport gas from The Netherlands to The United Kingdom.', '20051201', '20070101');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('Energy Delta Russia', 'The collaboration and adjustment of regulations to handle a large transportation grid between Russia and the rest of Europe using the Gasunie gas network.', '20060401', '20080401');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('EPRO', 'Energy and Power for Russian Oil. The delivery of man power to help build knowhow in the alliance with Russia.', '20060201', '20061231');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('GWWLleiding', 'The adjustment of a large pipe line in the middle of The Netherlands.', '20060101', '20060701');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('O21', 'A guide for a largescale reorganization of company skills and objectives.', '20041101', '20071231');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('OBIS', 'Organizational Business and Internal Structure. A project aimed at reaching an organizational structure that facilitates its core business.', '2005 1201', '20060801');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('Rappèl', 'Restructuring of business with middle Europe.', '20060601', '20060701');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('VBSBRZO', 'Adjustment of network in Eastern Holland.', '20060201', '20060801');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('VBSBRZW', 'Adjustment of network in Western Holland.', '200602 01', '20060801');
50
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('WGC2005(A) ', 'Project of Gasunie to invest in new safety measures.', '20050901', '20060630');
INSERT INTO `project` ( `project_name` , `project_description` , `project_begin` , `project_end` )
VALUES ('WGC2006', 'Project of Gasunie to invest in new safety measures.', '20060701', '20061231');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('PHP programming', 'Excellent in being able to program using the PHP programming language.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Dutch', 'Fluent in the Dutch language.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('German', 'Fluent in the German language.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('French', 'Fluent in the French language.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Chinese', 'Fluent in the Chinese language.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('English', 'Fluent in the English language.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Spanish', 'Fluent in the Spanish language.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Windows', 'Being able to work well using the operating system Microsoft Windows.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Linux', 'Being able to work well using the operating system Linux.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Access', 'Being able to work well using the program Microsoft Access.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Excel', 'Being able to work well using the program Microsoft Excel.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('PowerPoint', 'Being able to work well using the program Microsoft PowerPoint.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Word', 'Being able to well using the program Microsoft Word.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Adobe Photoshop', 'Being able to work well using the program Adobe Photoshop.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Paintshop Pro', 'Being able to work well using the program Paintshop Pro.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Flexible', 'Having a flexible attitude at work and being open to different view points.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Essay writing', 'Having a talent for writing essays, papers or reports.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Leadership', 'Being confident to take charge and having a quality others respond to when a decision is required.');
51
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Research', 'Having a talent for doing research, being meticulous and inquisitive.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Communication', 'Having a talent for communicating with others and being open to others opinions.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Planning', 'Having a talent for organizing a scedule and plan activities with concern for many aspects.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Organization', 'Having a general organization skill in structuring activities and making sure these are done. ');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Management', 'A general talent for managing people, commodities and activities with the business process.');
INSERT INTO `skill` (`skill_name`, `skill_description`) VALUES ('Taskoriented', 'Being focussed on the job, having the best interests of the company in mind.');
INSERT INTO `work_experience` ( `work_experience_id` , `past_function` , `company` , `date_of_employment` , `date_of_departure` , `work_experience_description` )
VALUES (NULL , 'Senior Executive', 'Phillips', '19980521', '20060620', 'President of the board and CEO of Phillips Eindhoven.');
INSERT INTO `work_experience` ( `work_experience_id` , `past_function` , `company` , `date_of_employment` , `date_of_departure` , `work_experience_description` )
VALUES (NULL , 'Junior Manager', 'AT&T', '19950811', '19980521', 'I held the post of junior manager at AT&T.');
INSERT INTO `work_experience` ( `work_experience_id` , `past_function` , `company` , `date_of_employment` , `date_of_departure` , `work_experience_description` )
VALUES (NULL , 'Rayon Manager', 'AT&T', '19980521', '20010605', 'I held the post of manager of the entire Nortern part of the Netherlands for the communications company AT&T.');
INSERT INTO `work_experience` ( `work_experience_id` , `past_function` , `company` , `date_of_employment` , `date_of_departure` , `work_experience_description` )
VALUES (NULL , 'General Manager', 'Disneyworld', '19790921', '19821227', 'A managing director position at the Disneyworld complex in Florida.');
INSERT INTO `work_experience` ( `work_experience_id` , `past_function` , `company` , `date_of_employment` , `date_of_departure` , `work_experience_description` )
VALUES (NULL , 'Cleaning Staff', 'Disneyworld', '19780401', '19790921', 'Member of the cleaning staff in the main building at the Disneyworld complex in Florida.');
INSERT INTO `work_experience` ( `work_experience_id` , `past_function` , `company` , `date_of_employment` , `date_of_departure` , `work_experience_description` )
52
VALUES (NULL , 'Assistant Teacher', 'University of Amsterdam', '20050901', '20060901', 'Helping freshman students with programming in PHP.');
INSERT INTO `has_work_experience` ( `user_name` , `work_experience_id` ) VALUES ('Rienk83', '1'); INSERT INTO `has_work_experience` ( `user_name` , `work_experience_id` ) VALUES ('deepak', '2'); INSERT INTO `has_work_experience` ( `user_name` , `work_experience_id` ) VALUES ('deepak', '3'); INSERT INTO `has_work_experience` ( `user_name` , `work_experience_id` ) VALUES ('dsettels', '4'); INSERT INTO `has_work_experience` ( `user_name` , `work_experience_id` ) VALUES ('dsettels', '5'); INSERT INTO `has_work_experience` ( `user_name` , `work_experience_id` ) VALUES ('nbotter', '6');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Coordinator Trace Activities', 'The person responsible for making sure
the Trace Activities are handles properly and with the highest safety in mind.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Manager Development Center', 'The operation and efficiency of the
development center is this persons responsibility.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Staff Industrial Safety', 'An employee who is part of a group of people
that watches over the safety in industrial applications, so this new knowledge can be applied.');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Manager OBIS Project', 'The person who is responsible for the correct
applicatioin of the OBIS project requirements.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Senior Buyer', 'The person responsible for acquiring the necessary
products and tools for the company.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Researcher Integrity', 'Doing research on the integrity of the internal core
businesses and alerting the chief manager should there be any problems.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Researcher External Safety', 'In essence, the person who looks out for
the safety of operations with countries and businesses outside the Netherlands.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Trace Controller', 'The person responsible for the Trace Activities and
their efficiency.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Proces Operator LNG', 'The person responsible for correct operation of
the LNG and remaining within budget.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Analyst', 'A member of a laboratory staff analyzing the content and
accuracy of the Gasunie outgoing products.'); INSERT INTO `function_list` ( `function_name` , `function_description` )
53
VALUES ('Chief Installation', 'The person responsible for an installation somewhere in the country.');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('GIS Operator', 'The person who operates the GIS according to the
guidelines set by Gasunie and with the necessary safety measures in mind.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Chief Management', 'The chairman of the management department.
Responsible for the decision making and accuracy of the management department.');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Chief Maintenance Engineering', 'The person responsible for
maintaining the highest safety of the equipment by developing correct and timely maintenance techniques.');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Chief Electronics & Instrumentation', 'The person responsible for the
electronic devices and instrumentation of the various departments. Mainly the installations.');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Operations Coordinator', 'The various processes in the company used to
transport gas are supervised and coordinated by this person.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Maintenance Coordinator', 'For every installation the maintenance
coordinator establishes a safe and cost efficient maintenance of the installations and its network of pipelines.');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Manager Installations', 'The supervising manager of all national
installations.'); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Manager Control & Administration', 'The person ultimately responsible
for the administration and all the controling aspects with the various departments.');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Budget Controller', 'The person who checks the companys income and
outgoing funds. Is responsible for correct management of funds. '); INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Control Advisor', 'The person that connects the research and
development department with the management staff, to advise and help the companys internal aspects.');
INSERT INTO `function_list` ( `function_name` , `function_description` ) VALUES ('Administrator', 'Member of the administration staff, responsible for
handling various tasks that require accounting knowledge.');
INSERT INTO `has_function` ( `user_name` , `function_name` ) VALUES ('dsettels', 'Maintenance Coordinator'); INSERT INTO `has_function` ( `user_name` , `function_name` ) VALUES ('nbotter', 'Senior Buyer'); INSERT INTO `has_function` ( `user_name` , `function_name` ) VALUES ('Rienk83', 'Trace Controller');
54
INSERT INTO `has_function` ( `user_name` , `function_name` ) VALUES ('deepak', 'Researcher External Safety');
INSERT INTO `event_list` ( `event_list_name` , `event_list_description` ) VALUES ('Birthdays', 'Here birthdays of significance can be listed for others to
see.'); INSERT INTO `event_list` ( `event_list_name` , `event_list_description` ) VALUES ('Concerts', 'Here all kinds of concerts can be listed for others to take
notice of. ');
INSERT INTO `event` ( `event_id` , `event_name` , `event_description` , `event_date` )
VALUES (NULL , 'Dominics birthday party', 'Im celebrating my birthday the day after Christmas. its gonna be a awesome feast, youre all invited!', '20061227 21:00:00');
INSERT INTO `event` (`event_id`, `event_name`, `event_description`, `event_date`) VALUES (NULL, 'Robbie Williams concert', 'Robbie Williams is giving a live concert in the Amsterdam Arena on june 25th, be there!', '20060625 18:30:00');
INSERT INTO `event` ( `event_id` , `event_name` , `event_description` , `event_date` )
VALUES (NULL , 'My birthday', 'Those who want to enjoy a good nights fun with beer and music, come to my birthday on febuary 2nd!', '20070202 21:00:00');
INSERT INTO `event` ( `event_id` , `event_name` , `event_description` , `event_date` )
VALUES (NULL , 'Concerts', 'A dance party in Paradiso in Amsterdam. There will be lots of music and large screens to watch the Dutch soccer team play!', '2006 0625 21:00:00');
INSERT INTO `has_event` ( `event_list_name` , `event_id` ) VALUES ('Birthdays', '1'); INSERT INTO `has_event` ( `event_list_name` , `event_id` ) VALUES ('Concerts', '2'); INSERT INTO `has_event` ( `event_list_name` , `event_id` ) VALUES ('Birthdays', '3'); INSERT INTO `has_event` ( `event_list_name` , `event_id` ) VALUES ('Concerts', '4');
INSERT INTO `post_event` ( `event_poster` , `event_id` ) VALUES ('dsettels', '1'); INSERT INTO `post_event` ( `event_poster` , `event_id` ) VALUES ('nbotter', '2'); INSERT INTO `post_event` ( `event_poster` , `event_id` ) VALUES ('Rienk83', '3'); INSERT INTO `post_event` ( `event_poster` , `event_id` ) VALUES ('deepak', '4');
INSERT INTO `has_branch` ( `user_name` , `branch_name` ) VALUES ('dsettels', 'Beverwijk');
55
INSERT INTO `has_branch` ( `user_name` , `branch_name` ) VALUES ('Rienk83', 'Eindhoven'); INSERT INTO `has_branch` ( `user_name` , `branch_name` ) VALUES ('deepak', 'Rotterdam'); INSERT INTO `has_branch` ( `user_name` , `branch_name` ) VALUES ('nbotter', 'Milano');
INSERT INTO `has_department` ( `user_name` , `department_name` ) VALUES ('dsettels', 'Management'); INSERT INTO `has_department` ( `user_name` , `department_name` ) VALUES ('Rienk83', 'ICT'); INSERT INTO `has_department` ( `user_name` , `department_name` ) VALUES ('deepak', 'Finance'); INSERT INTO `has_department` ( `user_name` , `department_name` ) VALUES ('nbotter', 'Marketing');
INSERT INTO `has_education` ( `user_name` , `education_id` ) VALUES ('dsettels', '4'); INSERT INTO `has_education` ( `user_name` , `education_id` ) VALUES ('nbotter', '13'); INSERT INTO `has_education` ( `user_name` , `education_id` ) VALUES ('deepak', '4'); INSERT INTO `has_education` ( `user_name` , `education_id` ) VALUES ('Rienk83', '4');
INSERT INTO `has_event_list` ( `event_list_name` , `user_name` ) VALUES ('Birthdays', 'dsettels'); INSERT INTO `has_event_list` ( `event_list_name` , `user_name` ) VALUES ('Concerts', 'dsettels'); INSERT INTO `has_event_list` ( `event_list_name` , `user_name` ) VALUES ('Birthdays', 'nbotter'); INSERT INTO `has_event_list` ( `event_list_name` , `user_name` ) VALUES ('Concerts', 'nbotter'); INSERT INTO `has_event_list` ( `event_list_name` , `user_name` ) VALUES ('Concerts', 'deepak'); INSERT INTO `has_event_list` ( `event_list_name` , `user_name` ) VALUES ('Birthdays', 'Rienk83');
INSERT INTO `has_hobby` ( `user_name` , `hobby_name` ) VALUES ('dsettels', 'Tennis'); INSERT INTO `has_hobby` ( `user_name` , `hobby_name` ) VALUES ('nbotter', 'Hockey'); INSERT INTO `has_hobby` ( `user_name` , `hobby_name` ) VALUES ('nbotter', 'Golf'); INSERT INTO `has_hobby` ( `user_name` , `hobby_name` ) VALUES ('deepak', 'Soccer'); INSERT INTO `has_hobby` ( `user_name` , `hobby_name` ) VALUES ('deepak', 'Sailing');
56
INSERT INTO `has_hobby` ( `user_name` , `hobby_name` ) VALUES ('deepak', 'Horse Racing'); INSERT INTO `has_hobby` (`user_name`, `hobby_name`) VALUES ('deepak', 'Fishing'); INSERT INTO `has_hobby` ( `user_name` , `hobby_name` ) VALUES ('Rienk83', 'Sailing');
INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('dsettels', 'Cars'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('dsettels', 'Formula 1'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('dsettels', 'Pop music'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('dsettels', 'Movies'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('dsettels', 'Astronomy'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('nbotter', 'Movies'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('nbotter', 'Playing guitar'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('nbotter', 'Reading'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('nbotter', 'Go out'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('deepak', 'Go out'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('deepak', 'Cars'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('deepak', 'Reading'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('deepak', 'Comics'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('Rienk83', 'Go out'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('Rienk83', 'Electronics'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('Rienk83', 'Movies'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('Rienk83', 'Cooking'); INSERT INTO `has_interest` ( `user_name` , `interest_name` ) VALUES ('Rienk83', 'Rock and roll music');
INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('nbotter', 'Aanleg C124 l. Genua'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('nbotter', 'BBL');
57
INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('nbotter', 'O21'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('nbotter', 'OBIS'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('dsettels', 'O21'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('dsettels', 'BBL'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('dsettels', 'OBIS'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('dsettels', 'WGC2006'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('Rienk83', 'O21'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('Rienk83', 'VBSBRZW'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('Rienk83', 'Rappèl'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('Rienk83', 'Energy Delta Russia'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('deepak', 'VBSBRZW'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('deepak', 'O21'); INSERT INTO `has_project` ( `user_name` , `project_name` ) VALUES ('deepak', 'WGC2006');
INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('Rienk83', 'Windows'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('Rienk83', 'Linux'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('Rienk83', 'Flexible'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('Rienk83', 'Dutch'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('Rienk83', 'Chinese'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('Rienk83', 'Essay writing'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('nbotter', 'PHP programming'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('nbotter', 'Paintshop Pro'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('nbotter', 'PowerPoint'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('nbotter', 'Dutch'); INSERT INTO `has_skill` ( `user_name` , `skill_name` )
58
VALUES ('nbotter', 'Management'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('nbotter', 'Windows'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('nbotter', 'English'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('nbotter', 'German'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('nbotter', 'Organization'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('dsettels', 'Windows'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('dsettels', 'English'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('dsettels', 'German'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('dsettels', 'Dutch'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('dsettels', 'Research'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('dsettels', 'Organization'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('dsettels', 'Essay writing'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'Linux'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'Research'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'Planning'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'Windows'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'Access'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'Excel'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'Word'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'Communication'); INSERT INTO `has_skill` ( `user_name` , `skill_name` ) VALUES ('deepak', 'TaskOriented');
INSERT INTO `image` ( `image_id` , `image_title` , `image_url` , `image_timestamp` , `image_description` )
VALUES (NULL , 'ZR1s', 'http://home.student.uva.nl/dominic.settels/tiger.jpg', NOW( ) , 'Two black Corvette ZR1s parked side by side.');
INSERT INTO `has_image` ( `user_name` , `image_id` )
59
VALUES ('dsettels', '1');
INSERT INTO `community` ( `community_name` , `community_description` ) VALUES ('O21', 'A community for all the employees that have an interest or
affeliation with the O21 project.'); INSERT INTO `community` ( `community_name` , `community_description` ) VALUES ('OBIS', 'A community for all the employees that have an interest or
affeliation with the OBIS project.'); INSERT INTO `community` ( `community_name` , `community_description` ) VALUES ('Go out', 'A community for people who enjoy going out and having a
good time.'); INSERT INTO `community` ( `community_name` , `community_description` ) VALUES ('Movies', 'A community for people who enjoy watching or going to the
movies.');
INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('dsettels', 'OBIS'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('dsettels', 'O21'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('nbotter', 'OBIS'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('nbotter', 'O21'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('Rienk83', 'O21'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('Deepak', 'OBIS'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('dsettels', 'Movies'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('nbotter', 'Movies'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('Rienk83', 'Movies'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('deepak', 'Go out'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('nbotter', 'Go out'); INSERT INTO `has_community` ( `user_name` , `community_name` ) VALUES ('Rienk83', 'Go out');
INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('dsettels', 'nbotter'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('dsettels', 'Rienk83'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('dsettels', 'deepak'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('nbotter', 'dsettels');
60
INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('nbotter', 'Rienk83'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('nbotter', 'deepak'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('Rienk83', 'dsettels'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('Rienk83', 'nbotter'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('Rienk83', 'deepak'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('deepak', 'dsettels'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('deepak', 'nbotter'); INSERT INTO `has_contact` ( `user_name` , `colleague_name` ) VALUES ('deepak', 'Rienk83');
INSERT INTO `has_compliment` ( `complimenter` , `complimentee` , `skill_name` , `compliment_date` , `compliment_description` )
VALUES ('dsettels', 'nbotter', 'PHP programming', NOW( ) , 'Excellent job on our last project. This man knows PHP.');
INSERT INTO `has_compliment` ( `complimenter` , `complimentee` , `skill_name` , `compliment_date` , `compliment_description` )
VALUES ('deepak', 'nbotter', 'PHP programming', NOW( ) , 'My compliments!'); INSERT INTO `has_compliment` ( `complimenter` , `complimentee` , `skill_name`
, `compliment_date` , `compliment_description` ) VALUES ('Rienk83', 'deepak', 'Research', NOW( ) , 'Wonderful research skills.
Lovely ability for extracting information.'); INSERT INTO `has_compliment` ( `complimenter` , `complimentee` , `skill_name`
, `compliment_date` , `compliment_description` ) VALUES ('Rienk83', 'dsettels', 'Organization', NOW( ) , 'This mans organization
skills are beyond belief. Make sure you use him if you need something done right.');
INSERT INTO `has_compliment` ( `complimenter` , `complimentee` , `skill_name` , `compliment_date` , `compliment_description` )
VALUES ('nbotter', 'Rienk83', 'Essay writing', NOW( ) , 'Amazing writing skills, nothing is too hard for this man to write greatly about.');
INSERT INTO `has_compliment` ( `complimenter` , `complimentee` , `skill_name` , `compliment_date` , `compliment_description` )
VALUES ('deepak', 'Rienk83', 'Essay writing', NOW( ) , 'He did an excellent job on writing that evaluation for our last project!');
INSERT INTO `note` ( `note_id` , `note_title` , `note_date` , `note_content` ) VALUES (NULL , 'Het is bijna vakantie', NOW( ) , 'De laatste loodjes en dan
kunnen we lekker vakantie vieren' ); INSERT INTO `note` ( `note_id` , `note_title` , `note_date` , `note_content` )
61
VALUES (NULL , 'presentatie', NOW( ) , 'vergeet niet dat we donderdag moeten presenteren!'
); INSERT INTO `note` ( `note_id` , `note_title` , `note_date` , `note_content` ) VALUES (NULL , 'Eindverslag', NOW( ) , 'het eindverslag moet woensdag voor
10uur' ); INSERT INTO `note` ( `note_id` , `note_title` , `note_date` , `note_content` ) VALUES (NULL , 'Afspraak morgen', NOW( ) , 'Morgen om 1300 uur afspreken op
school?' );
INSERT INTO `has_note` ( `sender` , `receiver` , `note_id` ) VALUES ('deepak', 'nbotter', '3' ); INSERT INTO `has_note` ( `sender` , `receiver` , `note_id` ) VALUES ('dsettels', 'Rienk83', '4' ); INSERT INTO `has_note` ( `sender` , `receiver` , `note_id` ) VALUES ('nbotter', 'dsettels', '2' ); INSERT INTO `has_note` ( `sender` , `receiver` , `note_id` ) VALUES ('Rienk83', 'deepak', '1' );
INSERT INTO `usermyisam` (`user_name`, `real_name`, `work_address`, `user_description`, `function_name`, `branch_name`, `department_name`, `hobby_name`, `project_name`, `skill_name`, `interest_name`, `past_function`, `past_company`) VALUES ('Rienk83', 'Rienk Su', 'Roetersstraat 15', 'Student Informatiekunde', 'Trace Controller', 'Eindhoven', 'ICT', 'Sailing', 'VBSRZW', 'Windows, Powerpoint', 'Electronics, Movies', 'Senior Executive', 'Phillips'),
('nbotter', 'Nick Botter', 'Roetersstraat 15', 'Student Informatiekunde', '', 'UVA', 'Marketing', 'Golf', 'Aanleg C124 l. Genua', 'Windows, Powerpoint', 'Electronics, Movies', 'Senior Executive', 'Phillips'),
('deepak', 'Deepak Sharma', 'Roetersstraat 15', 'Student Informatiekunde', 'Trace Assistant Teacher', 'UVA', 'Junior Manager', 'Soccer', 'WGC2006', 'Windows, Powerpoint', 'Electronics, Movies', 'Senior Executive', 'Phillips'),
('dsettels', 'Dominic Settels', 'Roetersstraat 15', 'Student Informatiekunde', 'Trace Assistant Teacher', 'UVA', 'Marketing', 'Tennis', 'O21', 'Windows, Powerpoint', 'Electronics, Movies', 'Senior Executive', 'Phillips'),
('Jos', 'Jos de Bruin', '', '', '', '', '', '', 'VBSRZW', '', '', '', ''), ('Anton', 'Anton Bossenbroek', '', '', '', '', '', '', 'Aanleg C124 l. Genua', '', '', '', '');
62
APPENDIX: F – PHP Code
CODE