From 4018d48cc4749840433e292d4224c797db70f5ce Mon Sep 17 00:00:00 2001 From: james Date: Sun, 17 Jun 2012 13:26:51 +0000 Subject: [PATCH] Serious SQL Injection Vulnerabilities --- plugins/evaluations/db/db.eval.full.100.sql | 96 --- plugins/evaluations/db/db.eval.setup.ISEF.sql | 39 - plugins/evaluations/db/db_eval_update.php | 109 --- plugins/evaluations/db/eval.code.version.txt | 1 - .../evaluations/docs/AppersonTestUpload.txt | 3 - .../docs/SFIAB_EvaluationsPreSlug.doc | Bin 42496 -> 0 bytes plugins/evaluations/docs/apperson.ttf | Bin 2576 -> 0 bytes plugins/evaluations/docs/eval_help.html | 703 ------------------ plugins/evaluations/docs/images/AWS.jpg | Bin 40841 -> 0 bytes .../docs/images/AppersonScoreForm.jpg | Bin 77544 -> 0 bytes .../evaluations/docs/images/BenchMark3000.jpg | Bin 48721 -> 0 bytes plugins/evaluations/eval_calc_scores.php | 93 --- plugins/evaluations/eval_common.inc.php | 459 ------------ plugins/evaluations/eval_criteria.php | 181 ----- plugins/evaluations/eval_export.php | 85 --- plugins/evaluations/eval_export_download.php | 271 ------- plugins/evaluations/eval_import.php | 54 -- plugins/evaluations/eval_install.php | 184 ----- plugins/evaluations/eval_levels.php | 191 ----- plugins/evaluations/eval_link_sfiab.php | 480 ------------ plugins/evaluations/eval_menu_inc.php | 28 - plugins/evaluations/eval_schemes.php | 173 ----- plugins/evaluations/eval_setup.php | 138 ---- plugins/evaluations/eval_uploader.php | 161 ---- plugins/evaluations/eval_webentry.php | 342 --------- plugins/evaluations/index.php | 39 - plugins/evaluations/sfiab_common.inc.php | 115 --- plugins/evaluations/version.txt | 1 - 28 files changed, 3946 deletions(-) delete mode 100644 plugins/evaluations/db/db.eval.full.100.sql delete mode 100644 plugins/evaluations/db/db.eval.setup.ISEF.sql delete mode 100644 plugins/evaluations/db/db_eval_update.php delete mode 100644 plugins/evaluations/db/eval.code.version.txt delete mode 100644 plugins/evaluations/docs/AppersonTestUpload.txt delete mode 100644 plugins/evaluations/docs/SFIAB_EvaluationsPreSlug.doc delete mode 100644 plugins/evaluations/docs/apperson.ttf delete mode 100644 plugins/evaluations/docs/eval_help.html delete mode 100644 plugins/evaluations/docs/images/AWS.jpg delete mode 100644 plugins/evaluations/docs/images/AppersonScoreForm.jpg delete mode 100644 plugins/evaluations/docs/images/BenchMark3000.jpg delete mode 100644 plugins/evaluations/eval_calc_scores.php delete mode 100644 plugins/evaluations/eval_common.inc.php delete mode 100644 plugins/evaluations/eval_criteria.php delete mode 100644 plugins/evaluations/eval_export.php delete mode 100644 plugins/evaluations/eval_export_download.php delete mode 100644 plugins/evaluations/eval_import.php delete mode 100644 plugins/evaluations/eval_install.php delete mode 100644 plugins/evaluations/eval_levels.php delete mode 100644 plugins/evaluations/eval_link_sfiab.php delete mode 100644 plugins/evaluations/eval_menu_inc.php delete mode 100644 plugins/evaluations/eval_schemes.php delete mode 100644 plugins/evaluations/eval_setup.php delete mode 100644 plugins/evaluations/eval_uploader.php delete mode 100644 plugins/evaluations/eval_webentry.php delete mode 100644 plugins/evaluations/index.php delete mode 100644 plugins/evaluations/sfiab_common.inc.php delete mode 100644 plugins/evaluations/version.txt diff --git a/plugins/evaluations/db/db.eval.full.100.sql b/plugins/evaluations/db/db.eval.full.100.sql deleted file mode 100644 index 5d5d463b..00000000 --- a/plugins/evaluations/db/db.eval.full.100.sql +++ /dev/null @@ -1,96 +0,0 @@ --- Tables to support projects evaluations plug-in for SFIAB --- Dennis Spanogle Feb 24, 2011 - -SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; - - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; - --- --- --- Database: `sfiab` --- --- - -CREATE TABLE IF NOT EXISTS `eval_config` ( - `plugin_name` varchar(20) NOT NULL, - `plugin_id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, - `folder_name` varchar(20) NOT NULL, - `help_link` varchar(50) NOT NULL, - `code_version` tinyint(3) unsigned NOT NULL, - `author` varchar(50) NOT NULL, - `last_update` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - `description` text, - `requirements` text, - `db_version` tinyint(3) unsigned NOT NULL, - UNIQUE KEY `plugin_id` (`plugin_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; - --- --- Dumping data for table `eval_config` --- - -INSERT INTO `eval_config` (`plugin_name`, `plugin_id`, `folder_name`, `help_link`, `code_version`, `author`, `last_update`, `description`, `requirements`, `db_version`) VALUES -('Evaluations', 1, 'evaluations', 'eval_help.html', 100, 'Dennis Spanogle ', '2011-02-25 08:35:26', 'Evaluations is a configurable project evaluation add-on (plug-in) for SFIAB. Evaluations provides the flexibility and most functionality to setup SFIAB for scoring and evaluations of projects. The help file will explain the details.', 'Requires: SFIAB 2.3.1 or higher (requires the tables projects, judges_teams_timeslots_link, judges_teams_timeslots_projects_link, users_judge configured as in SFIAB rev 2.3.1. ', 100); - - -CREATE TABLE IF NOT EXISTS `eval_projects` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `project_id` int(10) unsigned NOT NULL, - `team` enum('no','yes') NOT NULL DEFAULT 'no', - `scheme_id` smallint(5) unsigned DEFAULT NULL, - `eval_score` float(5,2) NOT NULL DEFAULT '0.00', - `final_score` float(5,2) NOT NULL DEFAULT '0.00', - `eval_score_status` varchar(10) DEFAULT NULL, - `overall_status` varchar(10) DEFAULT NULL, - `last_change` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - - - -CREATE TABLE IF NOT EXISTS `eval_criteria` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `scheme_id` smallint(5) unsigned NOT NULL, - `criteria_id` smallint(5) unsigned NOT NULL, - `criteria_weight` smallint(6) NOT NULL, - `criteria_name` varchar(20) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ; - - -CREATE TABLE IF NOT EXISTS `eval_levels` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `scheme_id` smallint(5) unsigned NOT NULL, - `level_id` smallint(5) unsigned NOT NULL, - `level_value` tinyint(3) unsigned NOT NULL, - `level_name` varchar(12) DEFAULT NULL, - `spec_use` enum('no','yes') NOT NULL DEFAULT 'no', - `spec_use_code` varchar(4) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ; - -CREATE TABLE IF NOT EXISTS `eval_projects_entries` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `event_id` int(10) unsigned DEFAULT NULL, - `project_id` int(10) unsigned NOT NULL, - `judges_teams_id` int(10) unsigned DEFAULT NULL, - `judges_timeslots_id` int(10) unsigned DEFAULT NULL, - `criteria_id` smallint(5) unsigned DEFAULT NULL, - `level_id` smallint(5) unsigned DEFAULT NULL, - `judge_user_id` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; - - -CREATE TABLE IF NOT EXISTS `eval_schemes` ( - `scheme_id` smallint(5) unsigned NOT NULL, - `scheme_name` varchar(20) DEFAULT NULL, - `assignto_project_when` varchar(50) NOT NULL, - PRIMARY KEY (`scheme_id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - - diff --git a/plugins/evaluations/db/db.eval.setup.ISEF.sql b/plugins/evaluations/db/db.eval.setup.ISEF.sql deleted file mode 100644 index b39af0f1..00000000 --- a/plugins/evaluations/db/db.eval.setup.ISEF.sql +++ /dev/null @@ -1,39 +0,0 @@ --- ISEF Evaluation schemes, criteria, levels setup --- Dennis Spangole --- Feb 24, 2011 --- Revisions 1.0.0 - -INSERT INTO `eval_schemes` (`scheme_id`, `scheme_name`, `assignto_project_when`) VALUES -(1, 'ISEF Evaluations', 'team = no'), -(2, 'ISEF Teams pre 2011', 'team = yes'); - -INSERT INTO `eval_criteria` (`id`, `scheme_id`, `criteria_id`, `criteria_weight`, `criteria_name`) VALUES -(1, 1, 1, 30, 'Creative Ability'), -(2, 1, 2, 30, 'Scientific Thought'), -(3, 1, 3, 15, 'Thoroughness'), -(4, 1, 4, 15, 'Skill'), -(5, 1, 5, 10, 'Clarity'), -(6, 1, 6, 0, 'Teamwork(not used'), -(7, 2, 1, 25, 'Creative Ability'), -(8, 2, 2, 25, 'Scientific Thought'), -(9, 2, 3, 12, 'Thoroughness'), -(10, 2, 4, 12, 'Skill'), -(11, 2, 5, 10, 'Clarity'), -(12, 2, 6, 16, 'Teamwork'); - -INSERT INTO `eval_levels` (`id`, `scheme_id`, `level_id`, `level_value`, `level_name`, `spec_use`, `spec_use_code`) VALUES -(1, 1, 0, 0, 'No mark', 'yes', 'NoMk'), -(2, 1, 1, 1, 'Acceptable', 'no', NULL), -(3, 1, 2, 2, 'Good', 'no', NULL), -(4, 1, 3, 3, 'Very Good', 'no', NULL), -(5, 1, 4, 4, 'Excellent', 'no', NULL), -(6, 1, 5, 5, 'Exceptional', 'no', NULL), -(7, 1, 7, 7, 'MultipleMark', 'yes', 'MltM'), -(8, 2, 0, 0, 'No Mark', 'yes', 'NoMk'), -(9, 2, 1, 1, 'Acceptable', 'no', NULL), -(10, 2, 2, 2, 'Good', 'no', NULL), -(11, 2, 3, 3, 'Very Good', 'no', NULL), -(12, 2, 4, 4, 'Excellent', 'no', NULL), -(13, 2, 5, 5, 'Exceptional', 'no', NULL), -(14, 2, 7, 7, 'MultipleMark', 'yes', 'MltM'); - diff --git a/plugins/evaluations/db/db_eval_update.php b/plugins/evaluations/db/db_eval_update.php deleted file mode 100644 index 309c35ab..00000000 --- a/plugins/evaluations/db/db_eval_update.php +++ /dev/null @@ -1,109 +0,0 @@ -db_version; -if(!$dbdbversion) -{ - echo "Could not get current 'Evaluations' db version. Is the plug-in properly installed?\n"; - exit; -} - -if($dbcodeversion && $dbdbversion) -{ - //lets see if they match - if($dbcodeversion == $dbdbversion) - { - echo "DB and CODE for 'Evaluations' are all up-to-date. Version: $dbdbversion\n"; - exit; - } - else if($dbcodeversion<$dbdbversion) - { - echo "ERROR: dbcodeversion$dbdbversion) - { - echo "DB update requirements detected
"; - echo "Current 'Evaluations' DB Version: $dbdbversion
"; - echo "Current 'Evaluations' CODE Version: $dbcodeversion
"; - - echo "Updating database from $dbdbversion to $dbcodeversion
"; - - for($ver=$dbdbversion+1;$ver<=$dbcodeversion;$ver++) - { - if(file_exists("db.eval.update.$ver.sql")) - { - echo "db.eval.update.$ver.sql detected - running..."; - $exit_code = 0; // assume no errors for now - $filename = 'db.eval.update.'.$ver.'.sql'; - // Temporary variable, used to store current query - $templine = ''; - // Read in entire file - $lines = file($filename); - // Loop through each line - foreach ($lines as $line) - { - // Skip it if it's a comment - if (substr($line, 0, 2) == '--' || $line == '') - continue; - // Add this line to the current segment - $templine .= $line; - // If it has a semicolon at the end, it's the end of the query - if (substr(trim($line), -1, 1) == ';') - { - // Perform the query - if(!mysql_query($templine)){ - echo('
Error performing query!
'.$templine.'
mysqlerror: '.mysql_error().'

'); - $error_count += 1; - $exit_code = -1; // do we bail out here or keep going? keep going for now, get all errors - } - // Reset temp variable to empty - $templine = ''; - } - } - if($exit_code != 0) { - /* mysql failed!, what now? */ - $error_count += 1; - echo "
ERROR in db_update: Failed to execute query(s) without error!
"; - } - else{ - echo " Done!
"; - } - } - else - { - echo "Version $ver SQL update file not found - skipping over\n"; - } - } - echo "
All done - updating Evaluations' new DB version to $dbcodeversion\n"; - if ($error_count == 0 ){ - mysql_query("UPDATE eval_config SET db_version='$dbcodeversion'"); - } - - } - -} -else -{ - echo "ERROR: dbcodeversion and dbdbversion are not defined\n"; -} - - -?> diff --git a/plugins/evaluations/db/eval.code.version.txt b/plugins/evaluations/db/eval.code.version.txt deleted file mode 100644 index 29d6383b..00000000 --- a/plugins/evaluations/db/eval.code.version.txt +++ /dev/null @@ -1 +0,0 @@ -100 diff --git a/plugins/evaluations/docs/AppersonTestUpload.txt b/plugins/evaluations/docs/AppersonTestUpload.txt deleted file mode 100644 index 7fa7a636..00000000 --- a/plugins/evaluations/docs/AppersonTestUpload.txt +++ /dev/null @@ -1,3 +0,0 @@ -"2127", "37", "5", "4", "3", "4", "3", "4", "JAA0557" -"2127", "39", "3", "2", "2", "2", "2", "3", "JAA0558" -"2127", "38", "4", "3", "3", "3", "3", "4", "JAA0559" diff --git a/plugins/evaluations/docs/SFIAB_EvaluationsPreSlug.doc b/plugins/evaluations/docs/SFIAB_EvaluationsPreSlug.doc deleted file mode 100644 index d92f63752520e8530e1daaf6ebca24277968be31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42496 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 V*^&2m^kffPZyEfCPVgW0{y!=JeDeSR diff --git a/plugins/evaluations/docs/apperson.ttf b/plugins/evaluations/docs/apperson.ttf deleted file mode 100644 index 689972485c890900cb4e006119a10fd818f335a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2576 zcmc&$O=uid9RJPi?rb*w$ZoUMHU@oxBB_KmB*oH@irHFd#l>_}qlbV#XD7RBcXyVV zZEW#_Ks?zhBE5K#QZF8)c=RA5BAz_-V2Ulh6myb73sF1>j=wiEyV>pzl#qk(<^SgQ z{_pqxAMYy*4Zt8)5rcST;n}IROK%^i=4;BLS(nXY>oZ3HEl#PGYZsR{YuAYNCgonm zlBJCg##=yQiTvj(RE%CrZLoiZ{X>;{>%zqvF0=nF`|~y1l)%Uhz!+fvY+YVx;&FP1 zq2`N*tXs#|Zr^ABJs@_fX}c|NR5O6oPaJ;VK;Rin;237{Jg$0PN0V!7yx+as-YxGp@20oznVse9xcpnK zqB;+^(s^1;a)mQv86~)!D0tWZd5zBU_rFJR=!*w$1uLFd<8F1hV~Pv?jD7}p)js}F zR6+;-?nHBOm+U^Su^DZ5r(FHZe!GlS)xH?E!;KF|+l`8M=iKP^jkX)jjoJ&f6H)PQ zhZ_}xA3?%P?%?pM`uAxEW#%f*AyQ z9ecIa5XX?$J_&K0oEsrd;DGiZ#0H+!2SS|0lK%9#d3b7a@~D_=HZ8}s8)Dw6Hd>+} z8?tQGEy4xMS*e5Y1?YMqVF_oVcwk0zAJ?H7kp%t6s7XL$8^n0GRl=e|nlVmum3rqr9A$xQhoV+PGJ>j~twJs8rJqUN&)^(&HkR4;&N<=RX!@<>ydZ*H t`)2)n3TM0S))vhAH%sTK-NW0F@qe0Ru^*4|*Vh3Y#0Z|iD4yc&!hhm;l8^uZ diff --git a/plugins/evaluations/docs/eval_help.html b/plugins/evaluations/docs/eval_help.html deleted file mode 100644 index c1b10eb2..00000000 --- a/plugins/evaluations/docs/eval_help.html +++ /dev/null @@ -1,703 +0,0 @@ - - - - - -SFIAB Evaluations Help - - - - -

Welcome to Evaluations Help

-

- Return to Evaluations

-

Introduction:   An overview of - Evaluations plug-in for SFIAB

-

Installation:  How to Install Evaluations plug-in

-

- Process:    The typical process used in Evaluations plug-in

-

- Setup:   How to set up the evaluations schemes for your event.

-

- Step by Step:  Details about the administrative actions (steps) in the - Evaluations process.

-

- Examples:  Examples of setting up Evaluations for different types of - project evaluations and scoring.

-

- Tables:   Details about the database tables used in Evaluations.

-

Apperson Scanner:   How to setup SFIAB to use - the Apperson Education Products Benchmark 3000 Scanner.

-

 

-

- NOTE:  The Evaluations plugin should be 'functional' at this time but not - secured. Until security is incorporated, it should not be used on real data.  - I will need James to help implement security.
- To Do list:  (in order of importance - sort of):

-
    -
  • Anyone: Add Security. Dennis suggests the following:
    -   -  Committe members (the administration staff)  have access to - all of the Evaluations package.
    -    - Judges can access the Evalutaion input form (page - eval_webentry.php) but can enter data only if:
    -         They log in with their password.
    -         They can only enter data for teams to - which they are assigned.
    -         (optionally perhaps every team would be - required to have a team leader and only the team leader can enter data)
        This needs some planning and inputs.
  • -
  • Dennis: Fix so only projects in table judges_teams_timeslots_projects_link are - 'Linked' into eval_projects and eval_projects_entries. At this time all projects - are linked - we will only want the 'complete' and assigned to a team projects.
  • -
  • Dennis: Make sure it will work with more than one judging round. For now it is - set up only for one judging round. It is unknow what will happen if there is - more than one round.  Perhaps an option during linking to select which round.
  • -
  • Dennis:  Add project number and team numbers to the exported files where - usefull.  add team_id and project_id to preslug export (for reference)
  • -
  • Anyone:  Add to TRUNK version.  Dennis cannot do due to not being able to get - Trunk fully running - needs help.
  • -
  • Anyone:  Clean up the front end user interface. 
      -
    • Set up for English or French  (routines should be in sfiab_common.inc.php - if - not, add them there if same as in SFIAB.
    • -
    • Make the menus and tables etc all look like SFIAB.
    • -
    -
  • -
  • Anyone:  Test with different schemes - perhaps we could set up Evaluations - for those current users who - are interested in or currently using a scoring method.
  • -
  • Anyone:  Make it a true 'plug-in'.   Download and add to SFIAB versus currently - 'part of' SFIAB - or not
  • -
  • Etc.
  • -
-

 

-

Introduction

-

Evaluations is a plug-in to SFIAB.  That means you can add it - to your current version of SFIAB with minimal changes to your current SFIAB - version.  No changes will be made to your current SFIAB data. In other - words, no matter where you are in the SFIAB process for your event, you can add - and take advantage of Evaluations and not worry about it creating problems.  - If you decide to not use it in the future you can 'unplug' it without any effect - on your current setup or data.
-

-

There are two changes in the configuration of SFIAB that must be - implemented during the installing of Evaluations:
- SFIAB must be configured for judging as follows:
-  - the table config must have an entry with var =  'score_entry_enable' and - val = 'yes'
-  - the table judges_teams_timeslots_projects_link must have a field 'score'  - Float  length 5.2  null=yes
- Configuring SFIAB in this manner will also enable the necessary links in the - admin menu and the judges menu for using Evaluations. This is the SFIAB - configuration used my one or more fairs in the past. -

-

Evaluations provides a very configurable method of capturing - 'scores' for your projects.  You can configure multiple schemes used for - scoring!  For each scheme you design the evaluation criteria to use, the - weighting for each criteria and the levels (choices) judges can select from for - each criteria. With multiple schemes you can design a completely different - method of evaluation for each different type of projects (i.e. senior divisions - versus junior divisions, team projects, etc.)  When your organization - changes the way they want you to evaluate projects, just change the Evaluations - setup.

-

Evaluations provides several methods of collecting your judge teams - (judges) evaluations.  Web pages are built for each scheme for entry on the - web.  CSV files are created for use with scanners or for creating your own - forms to be used by the judge teams (judges)

-

And, all the calculations are done for you. Evaluations uses the - information in your setup to calculate scores from the entries made by the - judges. The code works for all combinations of possible schemes - it all driven - by the tables. So, once you can set up your scheme(s) Evaluations can do the - math.   A unique averaging method is used when you collect more than - one evaluation for each project so all the valid data is used, even if one judge - team leaves out a mark or makes multiple marks on their evaluations forms (i.e. - when using scanners).. 

-


-

-

Process

-

The process in a nutshell is:

-

1. Install Evaluations plug-in:

-

2. Set up your evaluation schemes, criteria and values:

-

3. After all your projects and judge teams are configured - Link - Evaluations to your SFIAB data.

-

4. If required, Export the necessary data for use by external - programs or scanners to collect the evaluations:
-      - CSV files are created for download for your use in - programming scanners and pre slug of the scanner forms
-     -  CSF files can be use to create your own evaluation - forms.

-

5. The judge teams (judges) do the evaluations and 'mark' the - appropriate level for each of the criteria for the scheme that applies to the - project.

-
    -
  • Web forms for entries are used for teams who log into the web site. Any - committee member can log in, then enter the team number  to bring up the - projects assigned to that team. 
  • -
  • The team enters the evaluation for each project assigned.
  • -
  • Other methods of collecting evaluations can be implemented using the exported - CSV files.   
  • -
-

6. The data is collected into a table in Evaluations. 

-
    -
  • If the judges use a web page the data goes directly into the table. 
  • -
  • Uploads from a specified CSV file format will also load the table so...  no - matter what technique you use the data is collected in a standard format for the - next steps.
  • -
-

7. The data is processed (a button push). 

-
    -
  • A score is created for each judge / project assignement with complete - 'captured' data.   
  • -
  • An average evaluation score is created for each project that is the average of - all the evaluations done for the project.
  • -
  • These scores can be used as desired by the fair officials
  • -
-

8. If a caucus of the judge team or the official responsible for a - particular division requires some adjustments to the - evaluations scores, that is accomplished by the team leaders (chair persons or - other officials) - - resulting in the final scores for the projects in each division.

-

9. Reports and or CSV files are available for the final results.

-

10.  A tool is (TBD) provided to facilitate assigning the winners of - some of the category awards (1st, 2nd, 3rd prizes and honorable mentions) where - those winners simply rely on the divisional ranking results.

-

 

-

Setup

-

It is imperative you understand how to correctly setup Evaluations - for your event.  With that in mind we will try our best to explain how the - setup works and the various options that are available.

-

Definitions:

-

Scheme: A method of evaluating a set of projects - - perhaps differently than other projects.  For instance you might have a - scheme for team projects and another scheme for non-team projects.  Or, you - might have different schemes for each division in your event. Each scheme has a - specific set of criteria, criteria weights and evaluation levels (choices) used - to evaluate a project and then to calculate a score for that project. Each - project is assigned a scheme. You can have as many schemes as you like. Each - scheme has an id, a name and a selection statement. The selection statement is - used to select which scheme is used for each project.  The selection - statement has three parts. the 'item', the 'condition' and the 'value'. - For example - 'div > 1'.  Each part must be separated by one space character. Each project that matches the selection statement of one of the - schemes is assigned that scheme. Here are a couple of examples of schemes:

-

scheme id     name           -      selection statement           - result
- 1              -  ISEF scoring            - team = no            - projects with one student are assigned scheme id 1
- 2               - ISEF (Team)            - team = yes          projects with two or - more students are assigned scheme id 2

-

scheme id    name                - selection statement           - result            assumes we - have 2 categories setup - Junior = 1,   Senior =2
- 1              - Junior Category         cat = 1              - projects with category id = 1 (junior) are assigned scheme id 1.
- 2              - Senior Category        cat > 1             - projects with category id = 2 or higher are assigned scheme id 2. (could use cat - = 2 also)

-

'item': The 'item' part can have and of - the following values:  (more can be added it your request but it requires a - code change.)
-   team:  If the project has one student then the value of team is - 'no'.   If the project has more than one student then the value of - team is 'yes' 
-   cat:    This represents the setting of the category_id - assigned to the project. You set up categories in SFIAB and each project gets - assigned one of those categories. 
-   div:    This represents the setting of the division_id - assigned to the project.  You set up divisions in SFIAB and each project - gets assigned one of those divisions.
-   grade: This represents the grade of the project's student. For teams, - grade is the grade of the team member with the highest grade.
-   cwdiv: This represents the Canada wide science fair division id - (cwsfdivisionid field in projects).

-

'condition':   You are allowed to use - any one of these symbols as the 'condition' part of the scheme selection - criteria:
- =        Equal
- !=      Not Equal
- <       Less Than
- >       Greater Than -

-

'value:'  The 'value' part represents - the value of the Field for each project.  For instance team can have a - value of 'yes' or 'no'. Cat can have values like 0,1,2... - whatever you used - for the Category Ids when you set up Age Categories in SFIAB. cwsfdivisionid has - values those in Canada should understand.

-

So, you can setup criteria like   'team = yes'   or 'div = - 1' or 'div < 3' or 'team != no'   etc. Except for team (value = 'yes' or - 'no) it is important to use a value that is set up for that field in SFIAB else - the scheme_id will not be set correctly in Evaluations projects data.

-

Criteria:  Each evaluation scheme will have a set - of criteria.  These are what the judge team considers when comparing a - project with other projects and with a standard. Examples of criteria are:  - 'Scientific Thought',  'Skill',  'Thoroughness', 'Teamwork', 'Research - Skill', Etc.  You create the criteria for each scheme used for your event. - In fact you can have different criteria and a different number of criteria for - each scheme For instance, elementary school projects may require only two - criteria - 'Scientific Approach'  'Completeness'  where as a senior - school projects will require criteria of more relevance to the project advancing - to the next level.

-

Levels:  Each evaluation scheme will have a set of - levels.  Levels are like grades.  You determine the number of levels - your evaluations will have and the value assigned to each level for each scheme. - For instance you might have levels of A, B, C, D, F with values of 4,3,2,1,0 for - one scheme and levels of Exceptional, Excellent, Very Good , Good, Acceptable - with values of 5,4,3,2,1 for another scheme. The values do not have to be a - sequence of integers but that works best. There are also optional 'special use' - levels you can create that allow you to do error checking on the judges entries - and take the appropriate action if the entry has errors.  Special use - levels are not used in calculating a score. An example is to assign a 'special - use'  level of 'No Entry' with a value of 0.  Then when a scanner or - any other process used to collect entries detects that there is no mark for a - criteria it can assign the value 0 to the entry and Evaluations knows to 1.) not - use that criteria entry in the calculations and 2.) indicate the error in the - status for that entry. The short 4 character level_code is then added to the - status for that entry.  Setting a 'special use' level "MultipleMarks" with - a value of 7 would allow the collection process (i.e. a scanner) to set that - value when multiple entries are made for a criteria. Evaluations knows to not - use that criteria's entry in the calculations and can indicate the error in the - status.

-

Weighting:  Each criteria will have a weight - assigned in such a way that the sum of the weights for all the criteria to be - used is = 100. Lets do an example:  Say one of your evaluations schemes has - 4 levels -L1, L2, L3 and L4 with values of 1,2,3,4  and the scheme has 3 - criteria C1, C2 and C3. with weights of 20,30, 50.  Note the weights add up - to 100. Define level_value as the entry made by the judge for a given criteria.  - It will be 1,2,3 or 4 in this example.  Also define max_level_val as the - maximum level value used in calculating a score (i.e. not a 'special use' level) -  In this example max_level_val = 4. Given all that, a score in this example is - calculated as follows:

-

score =   ( C1.level_value * C1.weight + C2.level_value * C2.weight - + C3.level_value * C3.weight) / ( max_level_val) 

-

If all level_values are = 4 (the perfect project), then:

-

perfectscore = (4*20 + 4*30 + 4*50) / 4

-

perfectscore = 80 + 120 + 200) /4

-

perfectscore = 400 / 4 = 100 

-

the lowest score for this scheme will be:

-

lowest score = (1*20 + 1* 30 + 1* 50) / 4 = 25

-

Note:  You may enter a criteria with a weight of '0'   - This allows keeping the number of criteria the same for each scheme. This - special case is used to provide compatibility with the Exported CSV files used - to pre slug the Apperson Education Products Benchmark 3000 scanners.

-

Setup:  Now that you understand (hopefully) the definitions we - can explain how you set up 'Evaluations'

-

1.) Decide how many schemes you will need.  Most events will - use only one scheme, some will want two or more. Enter the schemes in the - 'Create / Edit Schemes' page.

-

2.) For each scheme enter the evaluation criteria to be used for that scheme - using the 'Create / Edit Criteria' page.

-

3.) For each scheme enter the evaluatons levels to be used for that scheme - in the 'Create / Edit Levels' page.

-

When Evaluations is first installed, schemes, criteria and levels - are created for the ISEF evaluations (2010) and to use the Apperson Education - Products Benchmark 3000 scanners. You can use these, eliminate the 'teams' - scheme or create your own schemes, criteria and levels.

-

 

-

Step By Step Process

-

Installation

-

To install Evaluations plug-in follow these steps:

-
    -
  • If the folder 'plugins' does not exist in your SFIAB website root (along with - admin, data, Rmail and other folders) add the folder 'plugins'.
  • -
  • Place all the folders and files frome the evaluations package under/in the - folder 'plugins'.This will be the main folder 'evaluations' and under that - folder many files, and some other folders (like 'db', 'uploads', 'docs'...)
  • -
  • Make the evaluations folder 'uploads' writable. How to do that depends on your - web server.
  • -
  • When you are done you should have this setup of folders -

    'root'   (the base folder for sfiab)
    -   'admin'    the SFIAB admin folder
    -    ...         other SFIAB folders
    -   'plugins'     ( a folder for all plugins)
    -      'evaluations'     (the Evaluations - plug-in base folder)
    -         'db' folder     - (the Evaluations data base creation and update files and the various default - evaluation setup files)
    - &nbs        'docs' folder     (files - for information or download)
    -            'images' folder
    -         'uploads' folder   (uploaded - files are placed here while in use - then deleted - folder must be 'writable'.)
    -         files...              -   The various files for Evaluations.
    -           .....
    -    'Rmail' ... or other SFIAB folders.
    -

    -
  • -
  • -

    There will be no link in SFIAB to get to the main page for - evaluations so.. do the following:/> - - Log into SFIAB as a super user.
    - - In you web browser go to 'SFIAB/plugins/evaluations/eval_index.php'
    -     (Where 'SFIAB' is you main browser root name for your SFIAB - installation)
    - - If Evaluations is not installed you will be quided through the steps to - install and set up Evaluations.

  • -
-

What the installation does:

-
    -
  • Adds tables to SFIAB database.  Tables eval_config, eval_projects, eval_schemes, - eval_criteria, eval_levels, eval_projects_entries.
  • -
  • Processes any database updates based on the Evaluations revision and sql - changes.
  • -
  • Proceeds to the set up where: -
      -
    • The only two changes to existing SFIAB database are made: -
        -
      • An entry is made in the SFIAB table 'config' setting  var = - 'score_entry_enable' with val = 'yes' (if that entry does not already exist).
      • -
      • If the SFIAB table 'judges_teams_timeslots_projects_link' does not have the - field 'score' then that field is added. Score is entered as Float (5,2)  - (Floating point 5 digits, 2 after the decimal point. I.E. 100.00 or 44 or - 66.66).
      • -
      -
    • -
    • You You may select from one or more pre-configured evaluations schemes or enter your - own evaluation scheme, criteria and levels for your event. (TBD)  For now, - the ISEF schemes, criteria and levels are set up.
    • -
    -
  • -
-

Using Evaluations

-

Link Evaluations to Data base:  For Evaluations to function it must be - linked to the SFIAB data. This step creates (or updates) all the linkages so - that Evaluations has the necessary information from SFIAB (read only) to - accomplish the tasks designed into Evaluations.

-

Assign judge teams (or judges) to the projects they are to - evaluate. The default here is to use the judge_team_projects assignments of - SFIAB so it is important that these assignments are setup in SFIAB and that you run the - 'Link Evaluations' after they are setup (or if they are changed) to update the Evaluations - information. Optionally, you can go through a completely different assignment of - judges to projects.  This feature is NOT IMPLEMENTED for revision 100 of - Evaluations and will be implemented only if enough requests are generated.

-

Create the evaluations documents or files required to enter the - evaluations.  This step can do several options./> - &nbs 1.)   A web form 'Evaluations Web Entry' created automatically for - each judge teams' assigned projects using the Evaluations and SFIAB setup.  The form will have the following:
-         - an entry for the team (or judge) - number doing the evaluation.  (one of the judge team members must be logged - in.)
-         -  an entry (selection) of one - of the assigned project numbers.
-         - a web form table is presented with bubbles to - mark for the project as follows
-                      - criteria     criteria       criteria - ....
-            level      - [ ]            [ ]              - [ ]
-            level      - [ ]            [ ]              - [ ]
-            level      - [ ]            [ ]              - [ ]
-        -  a button to submit the evaluation - entries

-

  2.)   CSV download files to be used by your organization - to create your own web pages, or score forms or to pre slug standard forms or to - import to scanners.  The files should have enough data to accomplish your - process.  If not, request additional data be added.  (coding changes)
-   3.)   specific CSV files to be used to:
-             - Load the - 'student' data into the Apperson Education Products Benchmark 3000 scanner - (requires a specific scheme setup).
-             - Pre slug the - Apperson Education Products Benchmark 3000 'Science Fair evaluation'   - forms.

-

Evaluate the projects:  During this time the judge teams (or - judges) either mark the forms for your event, enter the evaluations on the web - page or some other process to capture the required information.  For each - project, each evaluation the following will be required:
-   -  project number  (this is automatic in web page and Apperson - scanner)
-   -  Team or judge number  (this is required to verify that that - team or judge has been assigned to the project.
-   - a list of  criteria_id, level_id  pairs representing the - evaluation of the project.  (automatic with Apperson scanner and web page)
-  - other optional items not yet designed.

-

Enter the evaluations:   The data from the evaluations is - entered into Evaluations tables.  This is done by the web page 'Import - Evaluations Data (Apperson Scanner)' or by an upload of a CSV file(s) created by you - with the correct specifications.   Details TBD.
-

-

Calculate the scores:   This is simply a button push using - page "Calculate Scores'. It - calculates the individual score for each evaluation and... calculates the - project's evaluation scorewhich is an average all of the evaluations for that - project.

-

Enter the final scores:  After a caucus of the judge team(s) or - divisional officials and judges, - some adjustment will sometimes be required to the projects scores. This can be - accomplished using a Evaluations web page (TBD)
-

-

 

-

Examplesrong>

-

examples:  TBD

-

 

-

Tables

-

TablTable descriptions  TBD   for now see the - db.eval.full.100.sql file or browse the tables with phpmyadmin.

-

eval_projects:  Caution:   contains all projects, - even those not assigned.  (may change this later - or not) -

eval_projects-entries.  A copy of - judges_teams_timeslots_projects_links with additional fields    ( - a record for each project - judge team assignment with the scheme_id, and an - entry for the selected value_id during judging.

-

 

- -

Setup SFIAB - to use Apperson Scanner

-

- About the Apperson Education Products Benchmark 3000 scanner:

-

- - Apperson Education Products

-

-  

-

- The Apperson Benchmark 3000 scanner

-

- Apperson Education Products worked with a regional science fair in New Mexico to - develop a special 'Science Fair' Option on their Benchmark 3000 scanner.  - This option is very robust. You download and import your fair's data into the - scanners student database so that means only perfect forms will be scanned - without rejection. Forms with multiple marks or missing - marks are rejected but the good data is captured. Forms with a judge and exhibit combination not in the student database - are also rejected.  The scores collected from the forms are exported - then uploaded to - your fair's Judges Evaluations for processing on the website.  If you are - interested in using Apperson Benchmark scanner contact Apperson Education - Products. Be sure to ask for the 'Science Fair' add-on option. -
- Here are the requirements to use the Apperson Scanners:
- - You will require a PC running Microsoft Windows and must have a license for - MS Word. -
- - You may have no more than 99 projects in a given project Division.
- - You must setup Evaluations Schemes, Criteria and Levels as described below.

-

- - Apperson Education Products - Benchmark 3000 

-

-  

-

- Apperson Science Fair Score Form
-  -
-   Sample of Form A1308 - the 'science fair' score form from Apperson - Education Products
-   

- - - - - -

Here is how the process works:

-
    -
  • -

    - Data from your fair is used to 'pre-slug' the score forms.  A bar code with - the project number and judge number (team number) is printed on the form along - with other information. The bar code is not shown in the image above - it is - printed to the right of the top text box marked 'SAMPLE'. A MS Word document is included in - the Evaluations package as well as - the file you can export to use with the MS Word document to accomplish this - task using a 'Mail Merge' type process. The boxes with the word 'SAMPLE' as well as the box below 'Marking - Instruction are available for your text.  The supplied MS Word document and - the Export file are designed to meet most needs but you can modify the document - to meet your fair's needs.

    -
  • -
  • -

    - Another exported file creates the 'student data' that is loaded into the - scanner. That file contains the project numbers and judge number as well as - other project and judge identification information.  The file is loaded - into the scanner program (DataLink) and is used to verify barcodes on the forms - with the data in the scanning program.

    -
  • -
  • -

    - Judges (teams) mark the forms for their assigned projects.  The criteria - and levels provided are those used by ISEF (as of this publish date).

    -
  • -
  • -

    - The forms are scanned and data gathered.  Forms not matching the student - data base are rejected and no data is created.  Forms matching the student - data base create a data record and are not rejected. Forms with multiple marks - in any criteria or missing marks for any criteria are rejected but the data is - capatured. -
    -  -  The marks on the forms create numbers corresponding to the 'value_id' as - described below.  0 meaning missing mark, 7 meaning multiple marks

    -
  • -
  • -

    - The captured data records are 'exported' from the scanner  at any - time in the scanning process -creating a text file.

    -
  • -
  • -

    - The text files are 'imported' to SFIAB Evaluations and the data placed in a - database table for processing.

    -
  • -
  • -

    - The 'Calculate Scores' selection in Evaluations processes the data and creates - judge (team( scores and a project score based on the imported data.  -

    -
  • -
-

If you want to use the Apperson Scanner - to record evaluations you must setup SFIAB to meet certain conditions - as - follows:  

-

The main requirement is that the scanner - (and forms) require project numbers from 1 to 9999 and Judge numbers from 1 to - 9999
- To accomplish this the following must be true: If the Category digit(s) are - removed from the SFIAB project number the resulting numbers must be unique.
-
- Here is one way to accomplish the above requirements:
- * Set the Configuration variables in SFIAB as follows:
-    -Allows for the setup of different divisions for each category:  = - Yes  (not sure, perhaps No will also work???)
-    -Project Numbering Format = CDN                - (Category, Division, Number)
- * Project Age Categories: The Categories' IDs must be an integer from 1 to 9   - (usually  1 = Junior,   2 = Senior)
- * Divisions:   The Divisions' IDs must be integers from 1 to 99   - (Usually Junior = 1 to n,  Senior = n+1 to ..(99max)
- * When creating the Divisions, Create a separate Division ID  for each - Category even if the Division name is the same.
-      ( Do not assign more than one category to a Division)
-    Example:
-    Category            - Division
-    1 - Junior            - 1 - Animal Science  (junior)    -
-    1 - Junior            - 2 - Chemistry          (junior)
-                - etc ...
-    2 - Senior            - 22- Animal Science (senior)
-    2 - Senior            - 23 - Chemistry
-            etc
- Thus, project Numbers are never more than 5 digits   - i.e. CDDNN - where NN is the exhibit sub number in the specific Division. And, when the 'C' - is removed the remaining number is still a unique number. Project numbers used - in the score form barcode and in the 'student' data are then the SFIAB project - number stripped of the first digit (the category digit).  However...
-  VERY IMPORTANT - This means there can be no more than 99 projects in a given - category-division.
-
   If that becomes a problem for your fair,  a different - SFIAB numbering method could be invented.
-   -
- Other methods may also work.  If you have a suggestion, let us know.on, let us know.
-
- Evaluation Schemes You can have  2 - Non-Team and Team   (ISEF - eliminated special scoring for teams in 2011 so you may want just one evaluation - scheme for all projects.)
- Evaluation Criteria   You must have 6 criteria for each scheme with - Ids from 1 to 6 as follows *you can use ISEF weighting or your own)
- id    name                     - weight non team     weight team
- 1 -Creative Ability              - 30                      - 25
- 2 -Scientific Thought           - 30                      - 25
- 3 -Thoroughness                 - 15                      - 12
- 4 -Skill                                 - 15                      - 12
- 5 -Clarity                             - 10                      - 10
- 6 -Teamwork                       - 0                        - 16
-
- You must have 7 levels for each criteria with Ids from 0 to 7  (6 not used) - as follows: (You could own 'level_values' but for ISEF the level-values are the - same as the level_id.  -

-

id  value name            - spec_use  Spec_use_code
- 0     0      No mark         - yes          NoMk
- 1     1      Acceptable      - no
- 2     2      Good               - no
- 3     3      Very Good      - no
- 4     4      Excellent         - no
- 5     5      Exceptional     - no
- 7     7     MultipleMark yes          - MltM
- Note: level_id of 6 is not used
-

-

- IMPORT data from Apperson Scanner:
- The file created by the scanner has the following format (the import code is - designed to use this format)
- "Apperson_proj_num","Judgeteam_num","CreativeAbility.level_id","ScientificThouth.level_id","Thoroughness.level_id","Skill.level_id","Clarity.level_id","Teamwork.level_id","seq#"
- wherwhere level_id are 0,1,2,3,4,5,7     0 = no mark     - 7 = double mark  and seq# is a 6 digit sequence identifier created by the - scanner.
-
-

-

-
-

- - diff --git a/plugins/evaluations/docs/images/AWS.jpg b/plugins/evaluations/docs/images/AWS.jpg deleted file mode 100644 index 4da9d3a1330fec9a19a1b3379751972ea308c64f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40841 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 H@_gnW6~ADb diff --git a/plugins/evaluations/docs/images/AppersonScoreForm.jpg b/plugins/evaluations/docs/images/AppersonScoreForm.jpg deleted file mode 100644 index 431705a034bec96808021081453b357477ed57b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77544 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

D>U#(kPZ0k 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 TUZ4!V(qdKef0-26Z|(md+ChLH diff --git a/plugins/evaluations/docs/images/BenchMark3000.jpg b/plugins/evaluations/docs/images/BenchMark3000.jpg deleted file mode 100644 index 7a3227d495086341969c77d2d2e8fc74e3327289..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48721 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 - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - - -SFIAB Evaluations Calculate Scores - - -Calculate Scores

"; -echo "
"; -echo "Click the button to Calculate and enter scores values"; -echo "

"; -echo ""; -echo "
"; -echo ""; -echo ""; -if(!$_POST['action'] == "calc") -{ - echo ""; - echo ""; - exit; -} -echo "
All Scores calculated and saved!
"; -echo "
Development Note: This updates the score field in 'judges_teams_timeslots_projects_link' for every team/project with a 'complete' evaluation entry
"; -echo " and updates the eval_score (current average) and eval_score_status fields in table eval_projects for every project for which an average score can be calculated.
"; -echo "For test purposes (to be removed later) it lists just the project number for each project, then lists the scores details for the last project in the list.

"; -// do all projects that qualify for judging (in the judges_teams_timeslots_projects_link table) -$q = mysql_query("SELECT DISTINCT projects_id from judges_teams_timeslots_projects_link"); -while($r=mysql_fetch_object($q)) { - $ret_array = calc_scores($r->projects_id); // cal_scores is in eval_common.inc.php - if($ret_array == 'error') { - echo " error"; - } - else{ - echo " ".$ret_array[project_num]; - // put scores in 'judges_teams_timeslots_projects_link' - for ($i=0;$i < $ret_array[num_teams]; $i++){ - $team_id = $ret_array[team_scores][$i][team_id]; - $score = $ret_array[team_scores][$i][team_score]; - if (is_null($score)) {$score = "NULL";} - $up = mysql_query("UPDATE judges_teams_timeslots_projects_link SET score = ".$score. - " WHERE judges_teams_id = '".$team_id."' AND projects_id = '".$r->projects_id."' "); - } - // update eval_judges table - $up = mysql_query("UPDATE eval_projects SET eval_score = '".$ret_array[eval_score]."', eval_score_status = '".$ret_array[eval_score_status]."' WHERE project_id = '".$r->projects_id."' "); - } -} -echo "

"; -// for debug - this just prints out the values in the last project -if ($ret_array =="error"){ - echo $ret_array; -} -else { - for ($i=0;$i < $ret_array[num_teams]; $i++){ - echo "team_id=".$ret_array[team_scores][$i][team_id]." team_num= ".$ret_array[team_scores][$i][team_num] ."project_num = ". - $ret_array[team_scores][$i][proj_num] ." score =".$ret_array[team_scores][$i][team_score]. - " status = ".$ret_array[team_scores][$i][team_status] ."
"; - -} -echo "Project number ".$ret_array[project_num].": score= ".$ret_array[eval_score]." status = ".$ret_array[eval_score_status]."
"; -} -echo ""; -echo ""; -exit; - -?> - - diff --git a/plugins/evaluations/eval_common.inc.php b/plugins/evaluations/eval_common.inc.php deleted file mode 100644 index 57b193bb..00000000 --- a/plugins/evaluations/eval_common.inc.php +++ /dev/null @@ -1,459 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> -Evaluations Plug-in
"; - echo "Evaluations database tables are not installed. You need to install those now!
"; - echo "
Proceed to Evaluations Database Installation
"; - echo "
"; - exit; -} -//if we have 0 (<1) then install is not done, which would get caught above, -if(mysql_num_rows($q)<1) -{ - echo "

Evaluations Plug-in


"; - echo "Evaluations 'eval_config' file has no data! You need to install the data base Files.
"; - echo "Proceed to Evaluations Database Installation
"; - echo "
"; - exit; -} -// Get the appropriate values needed -$q=mysql_query("SELECT * FROM eval_config"); -while($r=mysql_fetch_object($q)) // should only be one row -{ - $eval_config['help_link']=$r->help_link; - $eval_config['plugin_name']=$r->plugin_name; - $eval_config['folder_name']=$r->folder_name; - $eval_config['code_version']=$r->code_version; - $eval_config['author']=$r->author; - $eval_config['db_version']=$r->db_version; - $eval_config['description']=$r->description; -} -// debug -// echo "plugin_common done. author = ".$eval_config['author']."
"; - - // see if up to date in revisions -if(file_exists("db/eval.code.version.txt")) -{ - $evaldbcodeversion_file=file("db/eval.code.version.txt"); - $evaldbcodeversion=trim($evaldbcodeversion_file[0]); -} -else -{ - echo "ERROR: Could not load plugins/evaluations/db/eval.code.version.txt
"; - exit; -} -$q=@mysql_query("SELECT db_version FROM eval_config"); -$r=@mysql_fetch_object($q); -$evaldbdbversion=$r->db_version; -if($evaldbdbversion) -{ - if($evaldbcodeversion<$evaldbdbversion){ - echo "ERROR: evaldbcodeversion$evaldbdbversion){ - echo "

Evaluations Plug-in


"; - echo "Your 'Evaluations' plug-in database needs to be updated. You should run the update script to update the database!

"; - echo "Proceed to Evaluations Database Update!
"; - exit; - } -} -else -{ - // query returned nothing. This should not happen as we check it above. - echo "It appears that you have not fully installed Evaluations plug-in
"; - echo "Please click this link and do the installation now.

"; - echo "Proceed to installation
"; - exit; -} -// check if there are any evaluations entered -$q = @mysql_query("SELECT * FROM eval_schemes"); -if(mysql_error()) -{ - echo "ERROR Evaluations table eval_schemes is missing. Something failed in the database table installations for Evaluations!"; - echo "
"; - exit; -} - -if(mysql_num_rows($q)<1) // no rows so no schemas -{ - echo "

Evaluations Plug-in


"; - echo "There are no schemes set up for Evaluations! You need to add at least one scheme!
"; - echo "Proceed to Evaluations Schemes Setup
"; - echo "
"; - exit; -} -// *********************** Eval Functions ******************** - -function calc_scores($project_id) -/* -This caluclates various score values from the evaluations entry in eval_projects_entry table (using the level_id entry, scheme_id etc and the -algorithm in the eval_help.htm file. The score that is placed in the SFIAB judges_teams_timeslots_projects_link table (one score for each team/project assignment - is the score resulting from a 'complete' evaluation (all criteria have an entry and there are no errors) - The score placed in the eval_projects table is created by first averaging each criteria for all team evaluations that have made an entry for the criteria. - note that some criteria for some teams may have errors (missing the mark on score form or multiple marks) so those are not included in the criteria average. - After all criteria are averaged - if there is a good average for every criteria, then the score is calculated. This allows the process to use every entry by the judges - even if one judge team has missed a criteria's mark or the scanner read multiple markes etc. The process assumes that score forms can be entered again after - corrections and thus after doing the calc_scores process again the newer entries will be used for a better average. -project_id must exist in table: 'judges_teams_timeslots_projects_link' -if error returns a string -for each team assigned to the project (eval_teams_entries records) calculates team score and status - - if error in entries or no entries score = 'null' status = list of errors - - if good entries score = result of entries (0 to 100) status = blank - - returns an array (see below) -for the project, calculates a score using Dennis Spanogle method (see help/documentation for detail - or read code) - (average each criteria entries first, then use criteria averages to calculate scores) - -This results in a project score even if some level values are missing or bad for one or more team-project entries -returns: - an array: array(project_num=>$project_num,eval_score=>$score, eval_score_status=>$ttlcode,num_teams=>$num_judges_teams, - team_scores=>$list_array); - where $list_array is array(team_id=>$arr[$team][0][0],team_num=>$arr[$team][0][5],proj_num=>$arr[$team][0][6],team_score=>$team_score,team_status=>$err.codes); - indexed from 0 to number of teams assigned to project - 1 -An example of using calc_score -$ret_array = calc_scores($project_id); -for ($i=0;$i < $ret_array[num_teams]; $i++){ - echo "team_id=".$ret_array[team_scores][$i][team_id]." team_num= ".$ret_array[team_scores][$i][team_num] ."project_num = ". - $ret_array[team_scores][$i][proj_num] ." score =".$ret_array[team_scores][$i][team_score] . - " status = ".$ret_array[team_scores][$i][team_status] ."
"; -} -echo "Project number ".$ret_array[project_num].": score= ".$ret_array[eval_score]." status = ".$ret_array[eval_score_status]."
"; -For actual use see eval_calc_scores.php -*/ -{ - if(!$project_id){ - return "error"; - } - // Get scheme to use - $q = mysql_query("SELECT * from eval_projects WHERE project_id = '".$project_id."' "); - if (!$q OR mysql_num_rows($q) == 0){ - echo "No eval_ projects record for project_id ".$project_id."
"; - return "error"; - } - else { - $r=mysql_fetch_object($q); - $scheme_id = $r->scheme_id; - } - // Get the maximum level value for this scheme (used to calculate average score - see eval_help.htm) - $q = mysql_query("SELECT * from eval_levels WHERE scheme_id = '".$scheme_id."'"); - if (!$q OR mysql_num_rows($q) == 0){ - echo "No eval_ levels record for scheme_id ".$scheme_id."
"; - return "error"; - } - else { - $max_level_val = 0; - while($r=mysql_fetch_object($q)) { - if($r->spec_use == "no") { - if($r->level_value > $max_level_val){ - $max_level_val = $r->level_value; - } - } - } - } - // need to build up and array of - // array(team_id,array(criteria_weight, level_value) - // and count number of teams - // and count number of critera - // then I can work on the array without having to mess with the databases - // IMPORTANT - it is important the way this is sorted for the code to work - $q = mysql_query("SELECT eval_projects_entries.*, projects.projectnumber, judges_teams.num - FROM eval_projects_entries, projects, judges_teams - WHERE eval_projects_entries.project_id = projects.id AND eval_projects_entries.judges_teams_id = judges_teams.id - AND project_id = '".$project_id."' ORDER BY judges_teams_id, criteria_id "); - if (!$q OR mysql_num_rows($q) == 0){ - echo "No records for project_id ".$project_id."
"; - return "error"; - } - else { - $judges_teams_id = -1; - $num_judges_teams = 0; - while($r=mysql_fetch_object($q)) { - // setup for new judges team - if ($r->judges_teams_id != $judges_teams_id ){ // set for first or next judge team initial values - $judges_teams_id = $r->judges_teams_id; - $num_criterias = 0; - $judges_teams_num = $r->num; - $project_num = $r->projectnumber; - $num_judges_teams++; - } - // get the criteria weight and the level value from the tables - $crt = mysql_query("SELECT * from eval_criteria WHERE scheme_id = '".$scheme_id."' AND criteria_id = '".$r->criteria_id."' "); - if (!$crt OR mysql_num_rows($crt) == 0){ - echo "No eval_ criteria record for scheme_id ".$scheme_id."
"; - return "error"; - } - else { - $crtr=mysql_fetch_object($crt); - $criteria_weight = $crtr->criteria_weight; - } - if (is_null($r->level_id)) { // null no entry has been made - // SET THE ARRAY level_Value = -1 - $level_value = -1; - } - else { - $lv = mysql_query("SELECT * from eval_levels WHERE scheme_id = '".$scheme_id."' AND level_id = '".$r->level_id."' "); - if (!$lv OR mysql_num_rows($lv) == 0){ - // a non-allowed level_id entry has been made for this so SET the array level_value = -1 - $level_value = -1; - } - else { - $lvr=mysql_fetch_object($lv); - $level_value = $lvr->level_value; - $spec_use = $lvr->spec_use; - $spec_use_code = $lvr->spec_use_code; - } - } // level_id entry was null (no entry made yet) or not a valid entry - if ($level_value == -1){ - $spec_use_code = "NoEnt"; // this indicate NO entry or Invalid entry (not in eval_levels table) - $spec_use = 'yes'; // force calculations to skip and add the code to the status code; - } - // FILL IN THE ARRAY HERE FOR THIS RECORD... - $arr[$num_judges_teams-1][$num_criterias] = array($judges_teams_id,$criteria_weight,$level_value,$spec_use,$spec_use_code, $judges_teams_num,$project_num); - $num_criterias++; - } // while all in eval_projects_entries - } // else have all eval_projects entries - // Note: for a given project EVERY team will always have the same number of criteria so use the count from last team - // Get a score for each team for judges_teams_timeslots_projects_link table (if possible) Must have all critieria with weight > 0 have entry with spec_use = 'no' - for ( $team = 0; $team < $num_judges_teams; $team++) { // ***** Loop thru Judge teams **************************** - //echo "Team number ".$arr[$team][0][5]." (id ".$arr[$team][0][0].")
"; - $team_score =0; - $err_codes = ""; - for ($crit = 0; $crit < $num_criterias; $crit++) { - $weight = $arr[$team][$crit][1]; - $level_value =$arr[$team][$crit][2]; - $spec_use = $arr[$team][$crit][3]; // note this may have been set to 'yes' for null or invalid entries or for special use levels (multiple, missing marks etc) - $spec_use_code = $arr[$team][$crit][4]; - if($spec_use == "no"){ // OK to add into the score result - $team_score += $level_value * $weight; - } - else { - if ($weight > 0) { // spec_use = 'yes'. If criteria with weight == 0 then it is NOT an error, I.E. ISEF Teamwork for scheme_id 1 . - $err_codes .= $spec_use_code." "; - } - } - } - if ($err_codes == "") { // no error codes added so the score is GOOD! - $team_score = $team_score / $max_level_val; - //echo "Score= ".$team_score."
"; - } - else { - $team_score = NULL; - //echo "Score= ".$team_score." codes: ".$err_codes."
"; - } - $list_array[$team] = array(team_id=>$arr[$team][0][0],team_num=>$arr[$team][0][5],proj_num=>$arr[$team][0][6],team_score=>$team_score,team_status=>$err_codes); - } // ****** Loop thr Judge Teams ****************************** - // This gets the project score based on the average of the sum of the criteria averages (Dennis Spanogle method) - $num_bad_crits = 0; - $ttlcode = ""; - for ($cc = 0;$cc<$num_criterias;$cc++) { - $judcritttl = 0; - $avg_cnt = 0; - $err_codes = ""; - for($jj = 0;$jj<$num_judges_teams;$jj++){ // get average for this criteria all judge teams - $weight = $arr[$jj][$cc][1]; - $level_value =$arr[$jj][$cc][2]; - $spec_use = $arr[$jj][$cc][3]; - $spec_use_code = $arr[$jj][$cc][4]; - // add in the good judge entries for this criteria - if($spec_use == "no" && $level_value != -1){ // have a good entry for this criteria - $judcritttl += $level_value * $weight; - $avg_cnt++; - } - else { - if ($weight > 0) { // if bad entry in criteria with weight == 0 then it is NOT and error. - if ($err_codes == "") { - $err_codes = "JT".$arr[$jj][$cc][0]." ".$spec_use_code; - } - else { - $err_codes .= ", "."JT".$arr[$jj][$cc][0]." ".$spec_use_code; - } - } - } - } - // Get the average for this criteria i.e. divide by the number of good criteria entries - if ($avg_cnt >0){ - $crit_avg_wtd = $judcritttl/$avg_cnt; - } - else{ // This criteria had no entries so the total score can not be calculated unless weight = 0 then don't care - $crit_avg_wtd = 0; - if ($weight > 0){ - $num_bad_crits ++; - } - } - $rst[$cc] = array($crit_avg_wtd,$err_codes); - } - // have array with the average weighted criteria levels - add them all up for the project - $ttl= 0; - for ($cc = 0;$cc<$num_criterias;$cc++) { - $ttl += $rst[$cc][0]; - if($rst[$cc][1] != ""){ - if($ttlcode == "") { - $ttlcode = $rst[$cc][1]; - } - else { - $ttlcode .= ", ".$rst[$cc][1]; - } - } - } - if ($num_bad_crits == 0){ // if any criteria had no entries then cannot use the score - $score = $ttl/$max_level_val; - } - else { - $score = 0; - } - $ret_array = array(project_num=>$project_num,eval_score=>$score, eval_score_status=>$ttlcode,num_teams=>$num_judges_teams, team_scores=>$list_array); - return $ret_array; -} // end of function calc_scores - - -// ******************** functions from SFIAB **** -function i18n($str,$args=array(),$argsdesc=array(),$forcelang="") -{ - if(!$str) - return ""; - - if($forcelang) - { - $savelang=$_SESSION['lang']; - $_SESSION['lang']=$forcelang; - } - - if($_SESSION['lang']) - { - if($_SESSION['lang']=="en") - { - for($x=1;$x<=count($args);$x++) - { - $str=str_replace("%$x",$args[$x-1],$str); - } - if($forcelang) $_SESSION['lang']=$savelang; - return $str; - } - else - { - $q=mysql_query("SELECT * FROM translations WHERE lang='".$_SESSION['lang']."' AND strmd5='".md5($str)."'"); - if($r=@mysql_fetch_object($q)) - { - if($r->val) - { - $ret=$r->val; - - for($x=1;$x<=count($args);$x++) - { - $ret=str_replace("%$x",$args[$x-1],$ret); - } - if($forcelang) $_SESSION['lang']=$savelang; - return $ret; - } - else - { - for($x=1;$x<=count($args);$x++) - { - $str=str_replace("%$x",$args[$x-1],$str); - } - if($forcelang) $_SESSION['lang']=$savelang; - return "{{".$str."}}"; - } - - } - else - { - if(count($argsdesc)) - { - $argsdescstring=""; - $n=1; - foreach($argsdesc AS $ad) - { - $argsdescstring.="%$n=$ad, "; - $n++; - } - $argsdescstring=substr($argsdescstring,0,-2); - $argsdescstring="'".mysql_escape_string($argsdescstring)."'"; - } - else - $argsdescstring="null"; - - mysql_query("INSERT INTO translations (lang,strmd5,str,argsdesc) VALUES ('".$_SESSION['lang']."','".md5($str)."','".mysql_escape_string($str)."',$argsdescstring)"); - for($x=1;$x<=count($args);$x++) - { - $str=str_replace("%$x",$args[$x-1],$str); - } - if($forcelang) $_SESSION['lang']=$savelang; - return "{{".$str."}}"; - } - } - } - else - { - //no language set, assume english - if($forcelang) $_SESSION['lang']=$savelang; - return $str; - } -} - -function error($str,$type="normal") -{ - if($type=="normal") - return "
$str

"; - else if($type=="inline") - return "$str
"; - -} - -function notice($str,$type="normal") -{ - if($type=="normal") - return "
$str

"; - else if($type=="inline") - return "$str
"; -} - -function happy($str,$type="normal") -{ - if($type=="normal") - return "
$str

"; - else if($type=="inline") - return "$str
"; -} - -function display_messages() -{ - /* Dump any messages in the queue */ - if(is_array($_SESSION['messages'])) { - foreach($_SESSION['messages'] as $m) echo $m; - } - $_SESSION['messages'] = array(); -} -function message_push($m) -{ - if(!is_array($_SESSION['messages'])) $_SESSION['messages'] = array(); - $_SESSION['messages'][] = $m; -} - - - -?> \ No newline at end of file diff --git a/plugins/evaluations/eval_criteria.php b/plugins/evaluations/eval_criteria.php deleted file mode 100644 index a7a61f33..00000000 --- a/plugins/evaluations/eval_criteria.php +++ /dev/null @@ -1,181 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - -SFIAB Evaluations Criteria Editor - - - -Criteria Editor

"; -if($_POST['action']=="edit") -{ - if($_POST['scheme_id'] && $_POST['criteria_id'] && $_POST['criteria_weight'] && $_POST['criteria_name'] ) - { - //$q=mysql_query("SELECT id FROM eval_criteria WHERE id='".$_POST['id']."' "); - //if(mysql_num_rows($q) && $_POST['saveid']!=$_POST['id']) - //{ - // echo "Criteria ID ".$_POST['id']." already exists!"; - //} - //else - //{ - $t = mysql_query("UPDATE eval_criteria SET ". - "scheme_id='".$_POST['scheme_id']."', ". - "criteria_id='".$_POST['criteria_id']."', ". - "criteria_weight='".$_POST['criteria_weight']."', ". - "criteria_name='".$_POST['criteria_name']."' ". - "WHERE id='".$_POST['saveid']."' "); - - - echo "Criteria Saved!"; - //} - } - else - { - echo "Error: All fields are required!"; - } -} - -if($_POST['action']=="new") -{ - if( $_POST['scheme_id'] && $_POST['criteria_id'] && $_POST['criteria_weight'] && $_POST['criteria_name'] ) - { - // $q=mysql_query("SELECT id FROM eval_criteria WHERE id='".$_POST['id']."' "); - // if(mysql_num_rows($q) && $_POST['saveid']!=$_POST['id']) - // { - // echo "Scheme ID ".$_POST['id']." already exists!"; - // } - // else - // { - mysql_query("INSERT INTO eval_criteria ( scheme_id, criteria_id, criteria_weight, criteria_name) VALUES ( ". - "'".$_POST['scheme_id']."', ". - "'".$_POST['criteria_id']."', ". - "'".$_POST['criteria_weight']."', ". - "'".$_POST['criteria_name']."' ) "); - echo "Criteria Saved!"; - // } - } - else - { - echo "Error: All fields are required!"; - } -} - -if($_GET['action']=="remove" && $_GET['remove']) -{ - mysql_query("DELETE FROM eval_criteria where id='".$_GET['remove']."' "); - echo "Criteria successfully removed"; -} - -echo "
"; - -if(! ($_GET['action']=="edit" || $_GET['action']=="new") ) -{ - echo " Add New Criteria \n"; - echo ""; - echo ""; - //echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo ""; -} - -if($_GET['action']=="edit" || $_GET['action']=="new") -{ - echo "\n"; - if($_GET['action']=="edit") - { - echo "\n"; - $q=mysql_query("SELECT * FROM eval_criteria WHERE id='".$_GET['edit']."' "); - $critr=mysql_fetch_object($q); - $buttontext="Save"; - } - else if($_GET['action']=="new") - { - $buttontext="Add"; - } - echo "
rec ID Scheme ID Criteria ID Criteria Weight Criteria Name Actions
"; - echo ""; - //echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo ""; - echo ""; -// echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo ""; - - - echo " "; - echo ""; -} -else -{ - $q=mysql_query("SELECT * FROM eval_criteria ORDER BY scheme_id, criteria_id"); - while($r=mysql_fetch_object($q)) - { - echo ""; - // echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo ""; - } -} -echo "
rec ID Scheme ID Criteria ID Criteria Weight Criteria Name Actions
id\" />scheme_id\" />criteria_id\" />criteria_weight\" />criteria_name\" />
$r->id $r->scheme_id $r->criteria_id $r->criteria_weight $r->criteria_name "; - echo "id\">Edit"; - echo "   "; - echo "id\">Remove"; - echo "
"; -echo "
"; -echo"Scheme ID must exist in Schemes!"; -echo ""; -echo ""; -// send_footer(); -?> - - diff --git a/plugins/evaluations/eval_export.php b/plugins/evaluations/eval_export.php deleted file mode 100644 index c8eae6d5..00000000 --- a/plugins/evaluations/eval_export.php +++ /dev/null @@ -1,85 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - - - - -SFIAB Evaluations Export - - - - - -Export Data

"; - -/* Options -1. Most information for preslugging scoring forms (one record per project - judgeteam assignment) (includes scheme_id and... -2. Eval_criteria Table with scheme_dscheme_name and assignto_project_when equation. -3. Eval_levels Table with scheme_id ... -4. Eval_projects_entries: One record for every project - judgeteam - criteria with current level_id -5. The Apperson format for Students Data import (Requires a special SFIAB Setup to work - details in help) -*/ - -if($_POST['action'] == "SelectOptions") -{ - $option = $_POST['option']; - $Teamnote = $_POST['teamnote']; - if($option > 0 AND $option <= 9){ - echo ""; - } - else{ - echo "You entered a non-valid file number. Please enter a correct file number from 1 to 9 in the box and click 'Select a Different File'
"; - } -} -else { - $Teamnote = "Team Project"; -} - - echo "
"; - echo ""; - echo "Available Files to export:

"; - echo "1. Apperson scanner scoring forms pre-slug data - csv file. One record per judgeteam - project assignment (includes scheme_id ).
"; - echo "2. Apperson scanner Students Data import -csv file. Requires a special SFIAB Setup to work - details in help.
"; - echo "3. Microsoft Word data merge document for pre-slugging Apperson score forms (use export file #1 as recipients data.)
"; - echo "4. Apperson score form/scanner font - Required for pre-slugging Apperson score forms (Install per your windows system instructions.)
"; - echo "5. Eval_schemes Table - csv file.
"; - echo "6. Eval_criteria Table -csv file.
"; - echo "7. Eval_levels Table - csv file.
"; - echo "8. Eval_projects Table - csv file.
"; - echo "9. Eval_projects_entries Table - csv file: One record per judgeteam - project - criteria with current level_id (entry)
"; - echo ""; - echo ""; - echo ""; - - echo "
Enter File Number to export "; - echo " Click the 'Export File #' button above after you click 'Select' here.
For File #1 only: Enter pre-slug note for team projects
"; - echo "
"; - exit; - -?> diff --git a/plugins/evaluations/eval_export_download.php b/plugins/evaluations/eval_export_download.php deleted file mode 100644 index b53f5694..00000000 --- a/plugins/evaluations/eval_export_download.php +++ /dev/null @@ -1,271 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> -"; - exit; - } - $filename = "SFIAB_Evaluations_Schemes.csv"; - // here is what I want in the data. may take several queries to get it. Need one record for each record in eval_projects_entries - $header = "\"scheme_id\",\"scheme_name\",\"selection\""; - // **********************************************write the header out to the buffer ************************************ - $download = $header."\r\n"; - $num_records = mysql_num_rows($q); - // do the work for the records - while($r=mysql_fetch_object($q)) { - $recordout = "\"".$r->scheme_id."\",\"".$r->scheme_name."\",\"".$r->assignto_project_when."\""; - $download = $download.$recordout."\r\n"; - } - // proceed to end of code for the actual export -} -//6. Eval_criteria Table with scheme_id, scheme_name and selection statement - csv file. -if ($CSVoption == 6){ -$q = mysql_query("SELECT * from eval_criteria ORDER BY scheme_id, criteria_id"); - if (!$q OR mysql_num_rows($q) == 0){ - echo "Error reading tables or no records. (You must setup Schemes, Criteria and Levels prior to exporting)
"; - exit; - } - $filename = "SFIAB_Evaluations_Criteria.csv"; - // here is what I want in the data. may take several queries to get it. Need one record for each record in eval_projects_entries - $header = "\"scheme_id\",\"criteria_id\",\"criteria_weight\",\"criteria_name\""; - // **********************************************write the header out to the buffer ************************************ - $download = $header."\r\n"; - $num_records = mysql_num_rows($q); - // do the work for the records - while($r=mysql_fetch_object($q)) { - $recordout = "\"".$r->scheme_id."\",\"".$r->criteria_id."\",\"".$r->criteria_weight."\",\"".$r->criteria_name."\""; - $download = $download.$recordout."\r\n"; - } -// proceed to end of code for the actual export -} -//7. Eval_levels Table with scheme_id - csv file. -if ($CSVoption == 7){ - $q = mysql_query("SELECT * from eval_levels ORDER BY scheme_id, level_id"); - if (!$q OR mysql_num_rows($q) == 0){ - echo "Error reading tables or no records. (You must setup Schemes, Criteria and Levels prior to exporting)
"; - exit; - } - $filename = "SFIAB_Evaluations_Levels.csv"; - // here is what I want in the data. may take several queries to get it. Need one record for each record in eval_projects_entries - $header = "\"scheme_id\",\"level_id\",\"level_value\",\"level_name\",\"spec_use\",\"spec_use_code\""; - // **********************************************write the header out to the buffer ************************************ - $download = $header."\r\n"; - $num_records = mysql_num_rows($q); - // do the work for the records - while($r=mysql_fetch_object($q)) { - $recordout = "\"".$r->scheme_id."\",\"".$r->level_id."\",\"".$r->level_value."\",\"".$r->level_name."\",\"".$r->spec_use."\",\"".$r->spec_use_code."\""; - $download = $download.$recordout."\r\n"; - } - // proceed to end of code for the actual export -} -//8. Eval_levels Table with scheme_id - csv file. -if ($CSVoption ==8){ - $q = mysql_query("SELECT * from eval_projects ORDER BY project_id"); - if (!$q OR mysql_num_rows($q) == 0){ - echo "Error reading tables or no records. (You must Link Evalueations to SFIAB data prior to exporting)
"; - exit; - } - $filename = "SFIAB_Projects.csv"; - // here is what I want in the data. may take several queries to get it. Need one record for each record in eval_projects_entries - $header = "\"project_id\",\"team\",\"scheme_id\",\"eval_score\",\"final_score\",\"eval_score_status\",\"overall_status\",\"last_change\""; - // **********************************************write the header out to the buffer ************************************ - $download = $header."\r\n"; - $num_records = mysql_num_rows($q); - // do the work for the records - while($r=mysql_fetch_object($q)) { - $recordout = "\"".$r->project_id."\",\"".$r->team."\",\"".$r->scheme_id."\",\"".$r->eval_score."\",\"".$r->final_score."\",\"".$r->eval_score_status."\",\"".$r->overall_status."\",\"".$r->last_change."\""; - $download = $download.$recordout."\r\n"; - } - // proceed to end of code for the actual export -} - -//9. Eval_projects_entries Table - csv file: One record per judgeteam - project - criteria with current level_id (entry) -if ($CSVoption == 9){ - $q = mysql_query("SELECT * from eval_projects_entries"); - if (!$q OR mysql_num_rows($q) == 0){ - echo "Error reading tables or no records. (You must Link Evalueations to SFIAB data prior to exporting)
"; - exit; - } - $filename = "SFIAB_Evaluations_ProjectsEntries.csv"; - // here is what I want in the data. may take several queries to get it. Need one record for each record in eval_projects_entries - $header = "\"event_id\",\"project_id\",\"judges_teams_id\",\"judges_timeslots_id\",\"criteria_id\",\"level_id\",\"judge_user_id\""; - // **********************************************write the header out to the buffer ************************************ - $download = $header."\r\n"; - $num_records = mysql_num_rows($q); - // do the work for the records - while($r=mysql_fetch_object($q)) { - $recordout = "\"".$r->event_id."\",\"".$r->project_id."\",\"".$r->judges_teams_id."\",\"".$r->judges_timeslots_id."\",\"".$r->criteria_id."\",\"".$r->level_id."\",\"".$r->judge_user_id."\""; - $download = $download.$recordout."\r\n"; - } - // proceed to end of code for the actual export - -} - -if ($CSVoption == 1 || $CSVoption == 2){ - // This selects from judges_teams_timeslots_projects_link as top table - gets ONLY projects with assigned teams (I.E. Status = complete when schedule assignements are made - // It gets One record for each project - judges team assignment. I.E. one record for each required evaluation (Apperson Score Form) - $qstr = "SELECT eval_projects.team AS IsTeam, eval_projects.scheme_id, projects.projectnumber, projects.`language`, projects.floornumber, projects.title, ". - "projects.shorttitle, judges_teams.num AS team_num, judges_teams.name AS team_name, projectcategories.category, ". - "projectcategories.category_shortform, projectcategories.mingrade, projectcategories.maxgrade, projectdivisions.division, ". - "projectdivisions.division_shortform, projectdivisions.cwsfdivisionid, eval_projects.eval_score, eval_projects.final_score, ". - "eval_projects.eval_score_status, eval_projects.overall_status, eval_projects.last_change, projects.`year`, judges_timeslots.`date` AS tsdate, ". - "judges_timeslots.starttime AS tsstarttime, judges_timeslots.endtime AS tsendtime, judges_timeslots.name AS tsname, ". - "judges_timeslots.type AS tstype, judges_teams_timeslots_projects_link.judges_timeslots_id, judges_teams_timeslots_projects_link.projects_id, ". - "judges_teams.id, registrations.num, registrations.status, judges_teams_timeslots_projects_link.score ". - "FROM judges_teams, judges_teams_timeslots_projects_link, judges_timeslots, projects, eval_projects, projectcategories, projectdivisions, registrations ". - "WHERE judges_teams.id = judges_teams_timeslots_projects_link.judges_teams_id AND ". - "judges_teams_timeslots_projects_link.judges_timeslots_id = judges_timeslots.id AND ". - "judges_teams_timeslots_projects_link.projects_id = eval_projects.project_id AND projects.id = eval_projects.project_id AND ". - "projects.projectcategories_id = projectcategories.id AND projects.projectdivisions_id = projectdivisions.id AND ". - "projects.registrations_id = registrations.id ". - " ORDER BY projects.projectnumber, team_num"; - $q = mysql_query($qstr); - if (!$q OR mysql_num_rows($q) == 0){ - echo "Error reading tables or no records. (Did you Link SFIAB to Evaluations? Did 'score' get added to the judges_teams_timeslots_projects_link table?)
"; - exit; - } - if ($CSVoption == 1) - { - // here is what I want in the data. may take several queries to get it. Need one record for each record in eval_projects_entries - $header = "\"ProjectNum\",\"AppersonNum\",\"ShortTitle\",\"Title\",\"IsTeamProject\",\"FloorNum\",\"Language\",\"TeamProjectNote\",\"JudgeTeamNum\",\"JudgeTeamName\",\"JudgeTeamTime\",\"JudgeTeamLeader\",\"Category\",\"CatShort\",\"Division\",\"DivShort\",\"Year\",\"AppersonBarCode\",\"scheme_Id\",\"score\""; - $filename = "SFIAB_Evauations_ScoreFormPreSlug.csv"; - } - if ($CSVoption == 2 ){ - // Apperson Scanner Student data.// "Student ID","FirstName","LastName" - $header = "\"Student ID\",\"FirstName\",\"LastName\""; - $filename = "SFIAB_Evaluations_ScannerStudentData.csv"; - - } - // **********************************************write the header out to the file ************************************ - $download = $header."\r\n"; - $num_records = mysql_num_rows($q); - while($r=mysql_fetch_object($q)) { - // get some sepecial items from the raw data. - // this is for test only at this time. will be used in the Apperson Scanner export and import. - // to create the file necessary to preslug the score forms. - // Barcode = 1 or 2 for team, 4 digits exn, 4 digits team number, 2 digits checksum? - $AppPrjNum = substr($r->projectnumber , 1); - if ( strlen($AppPrjNum) < 4 ) - { - $AppPrjNum = sprintf( "%04d",$AppPrjNum); // "0".$AppPrjNum; - } - $teamtime = $r->tsdate." ".$r->tsstarttime."-".$r->tsendtime; - $tcode = "1"; - $Teamnote = ""; - if ($r->IsTeam == "yes"){ - $tcode = "2"; - // passed $Teamworknote when page opened - $Teamnote = $Teamworknote; - } - $fmtTeamNum = sprintf("%04d", $r->team_num); - $StudentID = $tcode.$AppPrjNum.$fmtTeamNum; - // calculate the checksum - $checksum = (int)substr($StudentID,0,1); - $checksum += (int)substr($StudentID,1,1); - $checksum +=(int) substr($StudentID,2,1); - $checksum += (int)substr($StudentID,3,1); - $checksum += (int)substr($StudentID,4,1); - $checksum += (int)substr($StudentID,5,1); - $checksum += (int)substr($StudentID,6,1); - $checksum += (int)substr($StudentID,7,1); - $checksum += (int)substr($StudentID,8,1); - $checksum = sprintf("%02d",$checksum); - $AppBarCode = "<".$tcode.$AppPrjNum.$fmtTeamNum."/".$checksum.">"; - // Get the Team leader name (to be done) - $TeamLeader = "n/a"; - // ready to create the files - if($CSVoption == 1){ - // $header = "\"ProjectNum\",\"AppersonNum\",\"ShortTitle\",\"Title\",\"IsTeam\",\"FloorNum\",\"Language\",\"TeamNote\",\"TeamNum \",\"TeamName\",\"TeamTime\",\"TeamLeader\",\"Category\",\"CatShort\",\"Division\",\"DivShort\",\"Year\",\"AppersonBarCode\",\"scheme_Id\",\"criteria_id\",\"Level_id\",\"score\""; - $title = str_replace("\"","'",$r->title); - $recordout = "\"".$r->projectnumber."\",\"".$AppPrjNum."\",\"".$r->shorttitle."\",\"".$title."\",\"".$r->IsTeam."\",\"".$r->floornumber."\",\"".$r->language."\",\"".$Teamnote."\",\"". - $r->team_num."\",\"".$r->team_name."\",\"".$teamtime."\",\"".$TeamLeader."\",\"".$r->category."\",\"".$r->category_shortform."\",\"".$r->division."\",\"".$r->division_shortform."\",\"".$r->year."\",\"". - $AppBarCode."\",\"".$r->scheme_id."\",\"".$r->score."\""; - // ********************************************write the record out to the file************************************************ - $download = $download.$recordout."\r\n"; - } - if ($CSVoption == 2){ // Apperson Scanner Student data - // "TPPPPJJJJ", "PRJ PPPPP 'TEAM' TITLETruncated?","JUN JJJJ JLASTNAME, JFIRSTNAME" - $Teamnote = ""; - if ($r->IsTeam == "yes"){ - $Teamnote = "(Team Project)"; - } - $Firstname = "Proj ".$r->projectnumber." ".$Teamnote." ".$r->title; - if(strlen($Firstname) > 100){ - $Firstname = substr($Firstname,100); // limit to 100 max in Apperson Datalink - } - // replace and double quotes in $Firstname with single quotes so CSV import will work. - $Firstname = str_replace("\"","'",$Firstname); - - $recordout = "\"".$StudentID."\",\"".$Firstname."\",\"JudgeTeamNum ".$r->team_num."\""; - // ********************************************write the record out to the file************************************************ - $download = $download.$recordout."\r\n"; - } - } // while $r=mysql_fetch_object($q) -} // end of if option = 1 or 2 -// code below works for all csv files. -ob_start(); -header("Content-type: text/x-csv"); -header("Content-disposition: inline; filename=".$filename); -header("Content-length: ".strlen($download)); -header("Pragma: public"); -echo $download; -//header("Location: index.php"); -//ob_get_status() -exit; - -?> diff --git a/plugins/evaluations/eval_import.php b/plugins/evaluations/eval_import.php deleted file mode 100644 index 1b66edb6..00000000 --- a/plugins/evaluations/eval_import.php +++ /dev/null @@ -1,54 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - - - -SFIAB Evaluations Import - - - -Import Data

"; -echo "This will upload the data from an Apperson Benchmark 3000 scanner and enter the good data into the Evaluations Entries table.
"; -echo "Select a file to upload, then click the 'Upload' button.
"; -echo "The file must conform to the Apperson scanner output format - see Documentation
"; -echo " - Data from records matching an 'Apperson' project number (SFIAB project number without leading digit) and team number will be entered
"; -echo " into the eval_projects_entries table. Be sure to 'Calculate Scores' to update the project scores.
"; -echo "
"; -?> -
- - - -
- -
- - - - diff --git a/plugins/evaluations/eval_install.php b/plugins/evaluations/eval_install.php deleted file mode 100644 index e9691e97..00000000 --- a/plugins/evaluations/eval_install.php +++ /dev/null @@ -1,184 +0,0 @@ - - Copyright (C) 2005 James Grant - - New functionality: - Copyright (C) 2011 At Work Software - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -echo "\n"; -?> - - -SFIAB plug-in Installation (Evaluations) - - - -

SFIAB Evaluations Plug-in - Installation

- "; -if(file_exists("db/eval.code.version.txt")) -{ - $evaldbcodeversion_file=file("db/eval.code.version.txt"); - $evaldbcodeversion=trim($evaldbcodeversion_file[0]); -} -else -{ - echo "ERROR: Couldnt load plugins/evaluations/db/eval.code.version.txt
"; - exit; -} -echo "'Evaluations version $evaldbcodeversion
"; -echo "Checking for existing 'Evaluations' database... "; -$q=@mysql_query("SELECT db_version FROM eval_config"); -$r=@mysql_fetch_object($q); -$evaldbdbversion=$r->db_version; -if($evaldbdbversion) -{ - echo "Found version $evaldbdbversion
"; - //lets see if they match - if($evaldbcodeversion == $evaldbdbversion) - echo "Your 'Evaluations' plug-in database is already setup with the required version\n"; - else if($evaldbcodeversion<$evaldbdbversion) - echo "ERROR: evaldbcodeversion$evaldbdbversion) - echo "Your 'Evaluations' plug-in database needs to be updated. You should run the update script instead of this installer!\n"; - exit; -} -else -{ - echo "Installing 'Evaluations' plug-in database!
"; -} -$error_count = 0; -echo "Checking for database installer for 'Evaluations' version $evaldbcodeversion... "; -if(file_exists("db/db.eval.full.$evaldbcodeversion.sql")) -{ - echo "db/db.eval.full.$evaldbcodeversion.sql found
"; - echo "Setting up database tables... "; - $exit_code = 0; - $filename = 'db/db.eval.full.'.$evaldbcodeversion.'.sql'; - // Temporary variable, used to store current query - $templine = ''; - // Read in entire file - $lines = file($filename); - // Loop through each line - foreach ($lines as $line) - { - // Skip it if it's a comment - if (substr($line, 0, 2) == '--' || $line == '') - continue; - // Add this line to the current segment - $templine .= $line; - // If it has a semicolon at the end, it's the end of the query - if (substr(trim($line), -1, 1) == ';') - { - // Perform the query - if(!mysql_query($templine)){ - echo('
Error performing query!
'.$templine.'
mysqlerror: '.mysql_error().'

'); - $exit_code = -1; // do we bail out here or keep going? keep going for now, get all errors - } - // Reset temp variable to empty - $templine = ''; - } - } - echo "

"; - if($exit_code != 0) { - /* mysql failed!, what now? */ - $error_count += 1; - echo "
mysql failed to execute query(s) without error!
"; - } - echo "Done! installed valuations' database version $dbcodeversion
\n"; - echo "
"; - echo "Done!
"; - // Dennis allert if errors! - if ($error_count > 0){ - echo "THERE WERE ERRORS! The database was not created correctly!
"; - } - else{ - echo "DATABASE CREATED SUCCESSFULLY!
"; - } - echo "Proceed to Evaluations setup
"; -} -else -{ - echo "
Notice: Could not find db/db.eval.full.$evaldbcodeversion.sql
"; - echo "Trying to find an older version...
"; - for($x=$evaldbcodeversion;$x>0;$x--) - { - if(file_exists("db/db.eval.full.$x.sql")) - { - echo "Found db/db.eval.full.$x.sql!
"; - echo "Setting up 'Evaluations' database tables... "; - $exit_code = 0; - $filename = 'db/db.eval.full.'.$x.'.sql'; - // Temporary variable, used to store current query - $templine = ''; - // Read in entire file - $lines = file($filename); - // Loop through each line - foreach ($lines as $line) - { - // Skip it if it's a comment - if (substr($line, 0, 2) == '--' || $line == '') - continue; - // Add this line to the current segment - $templine .= $line; - // If it has a semicolon at the end, it's the end of the query - if (substr(trim($line), -1, 1) == ';') - { - // Perform the query - if(!mysql_query($templine)){ - echo('
Error performing query!
'.$templine.'
mysqlerror: '.mysql_error().'

'); - $exit_code = -1; // do we bail out here or keep going? keep going for now, get all errors - } - // Reset temp variable to empty - $templine = ''; - } - } - echo "

"; - if($exit_code != 0) { - /* mysql failed!, what now? */ - $error_count += 1; - } - echo "Installed 'Evaluations' database version $x
\n"; - echo "Attempting to update 'Evaluations' from $x to $evaldbcodeversion
"; - echo "
Please scroll to the bottom of this page for the link to the next step of the installation process.
"; - chdir ("db"); - include "db_eval_update.php"; - chdir ("../"); - echo "
"; - echo "Done!
"; - // Dennis allert if errors! 2011-02-18 - if ($error_count > 0){ - echo "THERE WERE ERRORS! The 'Evaluations' database was not created correctly!
"; - } - else{ - echo "DATABASE CREATED SUCCESSFULLY!
"; - } - echo "Proceed to Evaluations setup
"; - break; - } - } -} - -?> - - diff --git a/plugins/evaluations/eval_levels.php b/plugins/evaluations/eval_levels.php deleted file mode 100644 index 48ba18b3..00000000 --- a/plugins/evaluations/eval_levels.php +++ /dev/null @@ -1,191 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - -SFIAB Evaluations Levels Editor - - - -Levels Editor

"; -if($_POST['action']=="edit") -{ - if($_POST['scheme_id'] && $_POST['level_id'] && $_POST['level_value'] && $_POST['level_name'] && $_POST['spec_use'] ) - { - //$q=mysql_query("SELECT id FROM eval_criteria WHERE id='".$_POST['id']."' "); - //if(mysql_num_rows($q) && $_POST['saveid']!=$_POST['id']) - //{ - // echo "Criteria ID ".$_POST['id']." already exists!"; - //} - //else - //{ - $t = mysql_query("UPDATE eval_levels SET ". - "scheme_id='".$_POST['scheme_id']."', ". - "level_id='".$_POST['level_id']."', ". - "level_value='".$_POST['level_value']."', ". - "level_name='".$_POST['level_name']."', ". - "spec_use='".$_POST['spec_use']."', ". - "spec_use_code='".$_POST['spec_use_code']."' ". - "WHERE id='".$_POST['saveid']."' "); - - - echo "Level Saved!"; - //} - } - else - { - echo "Error: All fields are required!"; - } -} - -if($_POST['action']=="new") -{ - if($_POST['scheme_id'] && $_POST['level_id'] && $_POST['level_value'] && $_POST['level_name'] && $_POST['spec_use'] ) - { - // $q=mysql_query("SELECT id FROM eval_criteria WHERE id='".$_POST['id']."' "); - // if(mysql_num_rows($q) && $_POST['saveid']!=$_POST['id']) - // { - // echo "Scheme ID ".$_POST['id']." already exists!"; - // } - // else - // { - mysql_query("INSERT INTO eval_levels ( scheme_id, level_id, level_value, level_name, spec_use, spec_use_code) VALUES ( ". - "'".$_POST['scheme_id']."', ". - "'".$_POST['level_id']."', ". - "'".$_POST['level_value']."', ". - "'".$_POST['level_name']."', ". - "'".$_POST['spec_use']."', ". - "'".$_POST['spec_use_code']."' ) "); - echo "Level Saved!"; - // } - } - else - { - echo "Error: All fields are required!"; - } -} - -if($_GET['action']=="remove" && $_GET['remove']) -{ - mysql_query("DELETE FROM eval_levels where id='".$_GET['remove']."' "); - echo "Level successfully removed"; -} - -echo "
"; - -if(! ($_GET['action']=="edit" || $_GET['action']=="new") ) -{ - echo " Add New Level \n"; - echo ""; - echo ""; - //echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo ""; -} - -if($_GET['action']=="edit" || $_GET['action']=="new") -{ - echo "\n"; - if($_GET['action']=="edit") - { - echo "\n"; - $q=mysql_query("SELECT * FROM eval_levels WHERE id='".$_GET['edit']."' "); - $lvlr=mysql_fetch_object($q); - $buttontext="Save"; - } - else if($_GET['action']=="new") - { - $buttontext="Add"; - } - echo "
rec ID Scheme ID Level ID Level Value Level Name Special Use Special Use Code Actions
"; - echo ""; - //echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo ""; - echo ""; - //echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo ""; - echo " "; - echo ""; -} -else -{ - $q=mysql_query("SELECT * FROM eval_levels ORDER BY scheme_id, level_id"); - while($r=mysql_fetch_object($q)) - { - echo ""; - //echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo " "; - echo ""; - } -} -echo "
rec ID Scheme ID Level ID Level Value Level Name Special Use Special Use Code Actions
id\" />scheme_id\" />level_id\" />level_value\" />level_name\" />spec_use\" />spec_use_code\" />
$r->id $r->scheme_id $r->level_id $r->level_value $r->level_name $r->spec_use $r->spec_use_code "; - echo "id\">Edit"; - echo "   "; - echo "id\">Remove"; - echo "
"; -echo "
"; -echo"Scheme ID Must exist in Schemes!"; -echo ""; -echo ""; -exit; -?> - - diff --git a/plugins/evaluations/eval_link_sfiab.php b/plugins/evaluations/eval_link_sfiab.php deleted file mode 100644 index 0887781e..00000000 --- a/plugins/evaluations/eval_link_sfiab.php +++ /dev/null @@ -1,480 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - -SFIAB Evaluations Link - - - - -Link Evaluations and SFIAB Data

"; -echo "

"; -$errors = 0; -echo "Click the button to link SFIAB and Evaluations. (Be patient, may take a while)"; -echo "
"; -echo ""; -echo "
"; -echo ""; -echo "
"; -if(!$_POST['action'] == "link") -{ - exit; -} -echo "Linking Process complete - status follows:

"; -// get the eval_scheme id and eval_schemes.assignto_project_when fields -$q=mysql_query("SELECT * FROM eval_schemes"); -if (!q){ - echo "ERROR: Cannot open eval_schemes. You must have schemes set up prior to linking"; - exit; -} -// build an array of eval_schemes table -while($r=mysql_fetch_object($q)) -{ - $crit = $r->assignto_project_when; - $words = explode(' ', $crit); //this should get the parameter, '+' and the value - //echo "".$r->scheme_id." ".$words[0]." ".$words[1]." ".$words[2]."
"; - $schmidval = $r->scheme_id; - $schemes[] = array($schmidval,$words[0],$words[1],$words[2]); -} -/* - For now, the evaluations are done by the teams (judges_teams_id) - one evaluation per divisional round perhaps. - the table judges_teams_timeslots_projects_link contains the necessary fields 'Projects_id' and 'judges_teams_id' - - Eventually perhaps Another table - eval_project_assignements will link 'Who does the eval' to the 'Projects_id' to be evaluated. - table eval_projects_entries has: - Judges_teams_id (this will be always be set to a judges_teams_id whick I will assume for now is always > 0 ) - Judge_user_id (this will be set to 0 to indicate we use judges_teams. set > 0 if we use individual judges later..) criteria_id (this is which evaluation criteria is being entered (entered by team or upload or ... null => no entry) - level_id (this is the score - entered as an Id so we can get the value and calculate a score generically. null =>no entry) -(A) Using sfiab projects table and eval_projects table. - 1.) For each project in SFIAB - if project.id in eval_projects then verify entries (judges, team etc) and update - if not in eval_projects do link (insert row in eval_projects) and fill in entries (judges, team etc. - entries: project_id; team (also scheme_id <-- setup); eval_score; final_score; eval_score_status; overall_status) set scheme_id according to the values in eval_schemes.assignto_project_when fields (something = something) - 2.) For each project in eval_projects - if project_id NOT in SFIAB then remove from eval_projects -(B) Using judges_teams_timeslots_projects_link and eval_projects_entries. - See if eval_projects_entries has any entries => any criteria_id and or level_id will have non-null entries - If NO then: Empty the table and reload it from judges_teams_timeslots_projects_links SFIAB table - - If YES then: - 1 Remove all records in eval_projects_entries without entries - 2 See if we can save the ones with entries. - For each record with an entry criteria_id or level_id - If matching team/project in SFIAB then leave it - If not matching team/project in SFIAB then remove it - 3. For each record in judges_teams_timeslots_projects_links - If same project, team in eval then skip (have record and have entry) - else add record. - -this for later?? or remove -SELECT Exhibitors.Exhibit_ID, Exhibits.EXN, Exhibits.Exhibit_ID AS Expr1, Exhibitors.UserId -FROM Exhibitors LEFT OUTER JOIN - Exhibits ON Exhibitors.Exhibit_ID = Exhibits.Exhibit_ID -*/ -// projects has projectcategories_id ( ) and projectdivisions_id ( ) and as possible scheme setups valuse -// Students has grade as possilbe scheme setup values -// ************************ NOTE This gets ALL projects, even those not assigned to a judge team(open versus complete) ******************************* -$qst = "SELECT students.registrations_id, projects.registrations_id, projects.id, projects.shorttitle, students.grade, "; -$qst = $qst."projects.projectcategories_id, projects.projectdivisions_id, projects.cwsfdivisionid "; -$qst = $qst." FROM students LEFT OUTER JOIN projects ON students.registrations_id = projects.registrations_id ORDER by projects.id"; -// note the sort order is important if my code works to discover teams -$nscnt = 0; -$nprj = 0; -$ns = 0; -$pid = -1; -//echo $qst; -$q=mysql_query($qst); -if ($q) { - while($r=mysql_fetch_object($q)) - { - $ns += 1; // count students - $cwdiv = $r->cwsfdivisionid; - $grade = $r->grade; - $divid = $r->projectdivisions_id; - $cat = $r->projectcategories_id; - if ($r->id == $pid){ - // we already did this project but... it is a team project since # students > 1 - if ($r->grade > $grade) { - $grade = $r->grade; // always select the highest grade in the team (matched help.html) - } - $team = "yes"; - } - else{ - // project.id changed so save the last one - // but only if see if we did the save - if ($pid == -1){ - $pid = $r->id; // setup first time - //echo "Did First time pid = ".$pid."
"; - $team = "no"; - } - else { - // done with last so save it (note does not save the last one. - $nprj += 1; // count projects - insert_project($schemes, $pid, $divid, $team, $cat, $grade, $cwdiv); - // get ready for the next - $pid = $r->id; - $team = "no"; - } - } - } - $nprj += 1; // count projects - insert_project($schemes, $pid, $divid, $team, $cat, $grade, $cwdiv); -} -else{ - echo('
Error performing query!
'.$qst.'
mysqlerror: '.mysql_error().'

'); - echo "
Query failed
"; - $errors += 1; -} -if (errors == 0){ - echo "SFIAB has ".$ns." Students and ".$nprj." Projects.
"; - echo "
Evaluations links to SFIAB have been updated!
"; - echo " This means:
"; - echo " ** Each Project in SFIAB is now included in Evaluations' data.
"; - echo " ** Projects removed from SFIAB since the last link-up were removed from Evaluations' data.
"; - echo " Note: Project evaluations entered (if any) were retained! SFIAB projects 'newly added' will have no evaluation entries.
"; - echo "
"; -} -else{ - echo "There were errors! Review the notices and correct the problems!
"; -} -// **************** create/ update the eval_projects_entries table ************************* - -// now see if any extra records in local table (not in SFIAB) to delete - remember eval_projects contains ALL projects, not just those complete. -$loc = mysql_query("SELECT project_id from eval_projects"); // All projects = even those not assigned a judge team -while($lr =mysql_fetch_object($loc)) -{ - $q=mysql_query("SELECT id FROM projects WHERE id = '".$lr->project_id."' "); - $remr = mysql_fetch_object($q)->id; - if(mysql_num_rows($q) ==0){ // will probably find 2 for project_id = 0 (due to way $qst is formed above - $del = mysql_query("DELETE from eval_projects WHERE project_id = '".$lr->project_id."' " ); - if (! $del){ - echo "delete error project_id=".$lr->project_id."
"; - } - else { - echo "Deleted project_id ".$lr->project_id." from evaluations data.
"; - } - } -} -// could have some records left for projects that are not complete if.. was complete, then had an evaluation, then was set as incomplete -// I will not worry about this at this time. -// ***************************************************************************************************** -// Now do the work on eval_projects_entries table using SFIAB judges_teams_timeslots_projects_links -echo "
Updating Projects Evaluations Entries!
"; -$num_entries = 0; -$chknum_entries = 0; -// First delete all entries without evaluations -$q = mysql_query("DELETE FROM eval_projects_entries WHERE level_id IS NULL"); -if (!q){ - echo "Error opening table eval_projects_entries "; - exit; -} -$qst = "SELECT * FROM eval_projects_entries WHERE level_id IS NOT NULL"; -$q=mysql_query($qst); -if (!q){ - echo "Error opening table eval_projects_entries "; - exit; -} -else { - if(mysql_num_rows($q) > 0){ // will probably find 2 for project_id = 0 (due to way $qst is formed above - // Have records - $num_entries = mysql_num_rows($q); - echo "Found ".$num_entries ." records with entries
"; - // now see if those left have entries in judges_teams_timeslots_projects_link - // if not, then they also can be deleted - $q=mysql_query($qst); - while($r=mysql_fetch_object($q)) { - $qeval = mysql_query("SELECT * FROM judges_teams_timeslots_projects_link WHERE projects_id = '$r->project_id' AND judges_teams_id = '$r->judges_teams_id'"); // find matching entry - if (mysql_num_rows($qeval) == 0){ - echo "project_id andjudge_team_id not in SFIAB so removed
"; - $qremove = mysql_query("DELETE FROM eval_projects_entries WHERE project_id = '$r->project_id' AND judges_teams_id = '$r->judges_teams_id'"); - } - } - } - else { - echo "Good! No recores had entries
"; - } -} - -// Add all records from judges_teams_timeslots_projects_links NOT in eval_projects_entries -$q = mysql_query("SELECT * FROM judges_teams_timeslots_projects_link"); -$count = 0; -while($r=mysql_fetch_object($q)) { - //$skip = 0; - //$qeval = mysql_query($qst); // find all with level_id entries - //while($reval=mysql_fetch_object($qeval)) { - // if($reval->project_id == $r->projects_id ){ - // if($reval->judges_teams_id == $r->judges_teams_id) { - // $skip = 1; // found this one with at least one level_id entry non-null entries so do not add it - // } - // } - //} - //if ($skip == 0){ - // insert a record for each criteria ID that does NOT have a current level_id non null. New entries level_id will be set null - // for the project, get the scheme id. - $qprj= mysql_query("SELECT * FROM eval_projects WHERE project_id = '".$r->projects_id."' "); - if($qprj){ - // for the scheme id get all the criteria ids - while($rprj =mysql_fetch_object($qprj)) { - $qcrit= mysql_query("SELECT * FROM eval_criteria WHERE scheme_id = '".$rprj->scheme_id."' "); - if($qcrit){ - while($rcrit =mysql_fetch_object($qcrit)) { - // find this record (project, Team, criteria has an entry for level_id) - if ($num_entries > 0){ // no sense checking if no evaluations done at start. - $qcheck = mysql_query("SELECT * FROM eval_projects_entries WHERE project_id='".$r->projects_id."' AND judges_teams_id = '".$r->judges_teams_id."' AND criteria_id ='".$rcrit->criteria_id."' "); - if (mysql_num_rows($qcheck) > 0) { - $chknum_entries += 1; - } - else{ - $qadd = mysql_query("INSERT INTO eval_projects_entries (project_id, judges_teams_id, judges_timeslots_id, criteria_id) VALUES ('$r->projects_id', '$r->judges_teams_id', '$r->judges_timeslots_id', ' $rcrit->criteria_id' )"); - $count += 1; - } - } // if ($num_entries > 0) - else{ - $qadd = mysql_query("INSERT INTO eval_projects_entries (project_id, judges_teams_id, judges_timeslots_id, criteria_id) VALUES ('$r->projects_id', '$r->judges_teams_id', '$r->judges_timeslots_id', ' $rcrit->criteria_id' )"); - $count += 1; - } // else (if ($num_entries > 0) - } // while $rcrit - } // if $qcrit - } // while $rprj - } // if $qprj - //} - else { - //echo "skipped
"; - $skipped +=1; - } -} -if ($chknum_entries == $num_entries){ - -echo "
Eval_projects_entries updated! ".$num_entries." evaluation entries were retained. Total evals to do = ".($count + $num_entries)."
"; -} -else{ -echo "
ERROR num_entries =".$num_entries." not same as check of num_entries = ".$chknum_entries."
"; -} -exit; - -// ******************************** function to insert or update eval_projects table **************************** - -function insert_project($schemes, $pid, $div, $team, $cat, $grade, $cwdiv ) -{ -/* - if this project is in eval_projects then update scheme_id, team (leaves eval_score, etc) - if this project is NOT in eval_projects then insert project_id, team, scheme_id - if this project is in eval_projects_entries then update judges_teams_id, judges_timeslots_id, judge_user_id - (leave entries criteria_id, level_id) - if this project is NOT in eval_projects_entries then insert project_id, judges_teams_id, judges_timeslots_id, judge_user_id -*/ -// see if any of the possible selection parameters for this project are matched to a scheme (see help) -// The $schemes array and example -// id par con val -// 0 1 2 3 -// 1 team = no -// 2 team = yes -$proj_scheme_id = 9999; //set this as the default in case we find no matches -foreach ($schemes as $sch) -{ - $match = 0; - // get the parameter - $par = $sch[1]; - //get the condition - $con = $sch[2]; - // get the value - $val = $sch[3]; - // see if this project's values matches the parameter and condition - // for the example above this will set proj_scheme_id to 1 for team=no 2 for team=yes - if($par == 'team'){ // there is a team condition in schemes - if ($con == "="){ - if ($team == $val){ // is this projects team setting = scheme setting 'yes' or 'no' - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '!='){ - if ($team != $val){ // is this projects team setting != scheme setting != 'yes' or != 'no' - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '<'){ - if ($team < $val){ // is this projects team setting < scheme setting of 'yes' or 'no' - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '>') { - if ($team > $val){ // is this projects team setting > scheme setting of 'yes' or 'no' - $proj_scheme_id = $sch[0]; - escape; - } - } - } - if($par == 'div'){ - if ($con == "="){ - if ($div == $val){ // is this projects division setting = the setting in a scheme - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '!='){ - if ($div != $val){ // is this projects division setting != the setting in a scheme - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '<'){ - if ($div < $val){ // is this projects division setting ') { - if ($div > $val){ // is this projects division setting > the setting in a scheme - $proj_scheme_id = $sch[0]; - escape; - } - } - } - if($par == 'cat'){ - if ($con == "="){ - if ($cat == $val){ // is this projects category setting = the setting in a scheme - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '!='){ - if ($cat != $val){ // is this projects category setting != the setting in a scheme - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '<'){ - if ($cat < $val){ // is this projects category setting = the setting in a scheme - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '>') { - if ($cat > $val){ // is this projects category setting = the setting in a scheme - $proj_scheme_id = $sch[0]; - escape; - } - } - } - if($par == 'grade'){ - if ($con == "="){ - if ($grade == $val){ // is this projects team grade = the setting in a scheme - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '!='){ - if ($grade != $val){ - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '<'){ - if ($grade < $val){ - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '>') { - if ($grade> $val){ - $proj_scheme_id = $sch[0]; - escape; - } - } - } - if($par == 'cwdiv'){ // check the canada wide div id = scheme setting for cwdiv. - if ($con == "="){ - if ($cwdiv == $val){ - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '!='){ - if ($cwdiv != $val){ - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '<'){ - if ($cwdiv < $val){ - $proj_scheme_id = $sch[0]; - escape; - } - } - if ($con == '>') { - if ($cwdiv> $val){ - $proj_scheme_id = $sch[0]; - escape; - } - } - } - - -} -// echo "Save Scheme= ".$proj_scheme_id." Save pid= ".$pid." Team= ".$team." div= ".$div." cat= ".$cat." grade= ".$grade." cwdiv= ".$cwdiv."
"; -// ready to update or add the eval_projects table entry -// See if a record for this project ID -$ev = mysql_query("SELECT * FROM eval_projects WHERE project_id = $pid"); -if (mysql_num_rows($ev) > 0) { - - //echo "found - updating
"; - $ev = mysql_query("UPDATE eval_projects SET team = '$team', scheme_id = '$proj_scheme_id' WHERE project_id = $pid"); - echo mysql_error(); -} -else { - // echo "not found - adding
"; - $ev = mysql_query("INSERT INTO eval_projects (project_id, team, scheme_id) VALUES ('$pid', '$team', '$proj_scheme_id')"); -echo mysql_error(); -} -/* keep this code here until I copy it to the score entry routines -// DO NOT .. Do the same for table eval_projects_entries -// Every entry into this table must be done when we know the values for criteria_id and value-id -// because these are the entries from a judge or team or... so then... we enter the judges_team_id and timeslot -//or... in an optional method of assigning judges the judge_user_id -$ev = mysql_query("SELECT * FROM eval_projects_entries WHERE project_id = $pid"); -if (mysql_num_rows($ev) > 0) { - - //echo "found - updating
"; - $ev = mysql_query("UPDATE eval_projects_entries SET judges_teams_id = '$judges_teams_id', judges_timeslots_id = '$judges_timeslots_id', judge_user_id = '$judge_user_id' WHERE project_id = $pid"); - echo mysql_error(); -} -else { - // echo "not found - adding
"; - $ev = mysql_query("INSERT INTO eval_projects_entries (project_id, judges_teams_id, judges_timeslots_id, judge_user_id ) VALUES ('$pid', '$judges_teams_id', '$judges_timeslots_id', '$judge_user_id')"); -echo mysql_error(); -} -*/ - - -} -?> - - \ No newline at end of file diff --git a/plugins/evaluations/eval_menu_inc.php b/plugins/evaluations/eval_menu_inc.php deleted file mode 100644 index 0851a49c..00000000 --- a/plugins/evaluations/eval_menu_inc.php +++ /dev/null @@ -1,28 +0,0 @@ -"; - exit; -} -else -{ - //echo "Logged In
"; -} -*/ -echo "

SFIAB Evaluations Plug-in


"; -echo "Return to SFIAB Admin
"; -//echo "
"; -//echo "Evaluations Menu

"; -echo "Process:
"; -echo " * Link Evaluations to SFIAB "; -echo " * Export Evaluations Data (Apperson Scanners data, etc.) "; -echo " * Evaluations Web Entry "; -echo " * Import Evaluation Data (Apperson Scanners) "; -echo " * Calculate Scores
"; -echo "Setup and Help:
"; -echo " * Create / Edit Schemes "; -echo " * Create / Edit Criteria "; -echo " * Create / Edit Levels "; -echo " * Documentation

"; - -?> \ No newline at end of file diff --git a/plugins/evaluations/eval_schemes.php b/plugins/evaluations/eval_schemes.php deleted file mode 100644 index 2efa30f2..00000000 --- a/plugins/evaluations/eval_schemes.php +++ /dev/null @@ -1,173 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - -SFIAB Evaluations Schemes Editor - - - -Schemes Editor

"; - - if($_POST['action']=="edit") - { - if($_POST['id'] && $_POST['name'] && $_POST['equation'] ) - { - $q=mysql_query("SELECT scheme_id FROM eval_schemes WHERE scheme_id='".$_POST['id']."' "); - if(mysql_num_rows($q) && $_POST['saveid']!=$_POST['id']) - { - echo "Scheme ID ".$_POST['id']." already exists!"; - } - else - { - mysql_query("UPDATE eval_schemes SET ". - "scheme_id='".$_POST['id']."', ". - "scheme_name='".$_POST['name']."', ". - "assignto_project_when='".$_POST['equation']."' ". - "WHERE scheme_id='".$_POST['saveid']."' "); - - echo "Scheme Saved!"; - } - } - else - { - echo "Error: All fields are required!"; - } - } - - if($_POST['action']=="new") - { - if($_POST['id'] && $_POST['name'] && $_POST['equation'] ) - { - $q=mysql_query("SELECT scheme_id FROM eval_schemes WHERE scheme_id='".$_POST['id']."' "); - if(mysql_num_rows($q) && $_POST['saveid']!=$_POST['id']) - { - echo "Scheme ID ".$_POST['id']." already exists!"; - } - else - { - mysql_query("INSERT INTO eval_schemes (scheme_id, scheme_name, assignto_project_when) VALUES ( ". - "'".$_POST['id']."', ". - "'".$_POST['name']."', ". - "'".$_POST['equation']."' ) "); - echo "Scheme Saved!"; - } - } - else - { - echo "Error: All fields are required!"; - } - } - - if($_GET['action']=="remove" && $_GET['remove']) - { - mysql_query("DELETE FROM eval_schemes where scheme_id='".$_GET['remove']."' "); - echo "Scheme successfully removed"; - } - - echo "
"; - - if(! ($_GET['action']=="edit" || $_GET['action']=="new") ) - { - echo " Add New Scheme \n"; - echo ""; - echo ""; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo ""; - } - - if($_GET['action']=="edit" || $_GET['action']=="new") - { - echo "\n"; - if($_GET['action']=="edit") - { - echo "\n"; - $q=mysql_query("SELECT * FROM eval_schemes WHERE scheme_id='".$_GET['edit']."' "); - $schemer=mysql_fetch_object($q); - $buttontext="Save"; - } - else if($_GET['action']=="new") - { - $buttontext="Add"; - } - echo "
Scheme ID Scheme Name Selection Statement Actions
"; - echo ""; - echo "\n"; - echo "\n"; - echo "\n"; - echo "\n"; - echo ""; - - - echo ""; - echo " "; - echo " "; - echo " "; - echo ""; - - - echo " "; - echo ""; - } - else - { - $q=mysql_query("SELECT * FROM eval_schemes ORDER BY scheme_id"); - while($r=mysql_fetch_object($q)) - { - echo ""; - echo " "; - echo " "; - echo " "; - echo " "; - echo ""; - } - } - echo "
Scheme ID Scheme Name Selection Statement Actions
scheme_id\" />scheme_name\" />assignto_project_when\" />
$r->scheme_id $r->scheme_name $r->assignto_project_when "; - echo "scheme_id\">Edit"; - echo "   "; - echo "scheme_id\">Remove"; - echo "
"; - echo "
"; - echo"You should assign the 'Scheme ID's in numerical order, starting with 1."; -echo ""; -echo ""; -// send_footer(); -?> - - diff --git a/plugins/evaluations/eval_setup.php b/plugins/evaluations/eval_setup.php deleted file mode 100644 index 802b83df..00000000 --- a/plugins/evaluations/eval_setup.php +++ /dev/null @@ -1,138 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - -SFIAB Evaluations setup - - - - 0){ - if ( mysql_num_rows($q) ==1){ - $reslt = mysql_query("UPDATE config SET val = 'yes' WHERE var = 'score_entry_enable'"); - echo mysql_error(); - $actn = "Updated"; - } - else { - echo "Un-expected condition. table config has more than one entry with val = 'score_entry_enable'
"; - echo "Please resolve this ('none' or 'one' record is required to proceed)
"; - exit; - } - } - else { // no entry WHERE var = 'score_entry_enable'"); - $reslt = mysql_query("INSERT INTO config SET var = 'score_entry_enable', val = 'yes' "); - echo mysql_error(); - $actn = "Added"; - } - echo "
Table 'config': ".$actn." var = 'score_entry_enable', val = 'yes'
"; -} -else { - echo "Good! SFIAB is already configured with config table entry var = 'score_entry_enable' val = 'yes'
"; -} -// See if score is a field in `judges_teams_timeslots_projects_link` -//ALTER TABLE `judges_teams_timeslots_projects_link` ADD `score` FLOAT( 5.2 ) NULL ; -$q=mysql_query("SELECT score FROM `judges_teams_timeslots_projects_link`"); -if (!$q) { - $reslt = mysql_query("ALTER TABLE `judges_teams_timeslots_projects_link` ADD `score` FLOAT( 5,2 ) NULL"); - echo mysql_error(); - echo "Field 'score' added to `judges_teams_timeslots_projects_link` table
"; -} -else { - echo "Good! SFIAB table `judges_teams_timeslots_projects_link` already has field 'score'
"; -} -// more work needed after this point - if no scheme need to add a scheme editor, criteria editor, and values editor ... perhaps different files. -// check if table eval_schemes is setup and if has records.... -$q=mysql_query("SELECT * FROM eval_schemes"); -if(!$q){ - echo "Error: The table eval_Schemes did not get created correctly!"; - exit; -} -echo "

Evaluations Setup is Complete! Next, set up Schemes, Criteria and Values for your specific requirements.

"; -if(mysql_num_rows($q)>0) { - echo "Schemes already has records!
"; - echo " - To load a different preset Scheme, select one from the list below (TBD?)
"; - echo " - Or, use the appropriate Scheme, Criteria and Values editors in the Evaluations main menu to set up your specific requirements.
"; - echo "Return to Evaluations Main Menu
"; - exit; -} - -echo "For now, Eval will be loaded with a preset ISEF scoring scheme.
- Several other preset schemes may be added in the future.
"; -echo "Click here for help
"; -// add code and forms etc to select a setup file from those existing in the db folder -// files will have the form db.eval.setup.xxxx.sql -// for now this is hard coded. - -$setupfile = "ISEF"; -// -if(!file_exists("db/db.eval.setup.$setupfile.sql")) -{ - echo "Wops, the setup file db/db.eval.setup.$setupfile.sql does not exist!"; - echo "Return to Evaluations Main Page
"; - exit; -} -// code to load a pre-existing setup file. -echo "db/db.eval.full.$evaldbcodeversion.sql found
"; -echo "Setting up database tables... "; -$exit_code = 0; -$filename = 'db/db.eval.setup.'.$setupfile.'.sql'; -$templine = ''; -$lines = file($filename); -foreach ($lines as $line) -{ - if (substr($line, 0, 2) == '--' || $line == '') - continue; - $templine .= $line; - if (substr(trim($line), -1, 1) == ';') - { - if(!mysql_query($templine)){ - echo('
Error performing query!
'.$templine.'
mysqlerror: '.mysql_error().'

'); - $exit_code = -1; // do we bail out here or keep going? keep going for now, get all errors - } - $templine = ''; - } -} -echo "

"; -if($exit_code != 0) { - $error_count += 1; - echo "
mysql failed to execute query(s) without error!
"; -} -echo "
"; -if ($error_count > 0){ - echo "THERE WERE ERRORS! The setup was not created correctly!
"; -} -else{ - echo "SETUP for $setupfile CREATED SUCCESSFULLY!
"; -} -echo "Return to Evaluations Main Menu
"; - -?> - \ No newline at end of file diff --git a/plugins/evaluations/eval_uploader.php b/plugins/evaluations/eval_uploader.php deleted file mode 100644 index dc02e5c8..00000000 --- a/plugins/evaluations/eval_uploader.php +++ /dev/null @@ -1,161 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - 0) - { - echo "File Selection / upload Error: Return Code: " . $_FILES["file"]["error"] . "
"; - echo "

Return
"; - exit; - } - else - { - echo "Uploading: " . $_FILES["file"]["name"] . "
"; - //echo "Type: " . $_FILES["file"]["type"] . "
"; - //echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb
"; - //echo "Temp file: " . $_FILES["file"]["tmp_name"] . "
"; - - if (file_exists("uploads/" . $_FILES["file"]["name"])) - { - echo $_FILES["file"]["name"] . " already exists - OLD COPY WAS DELETED
"; - unlink("uploads/" . $_FILES["file"]["name"]); - } - //else - { - move_uploaded_file($_FILES["file"]["tmp_name"], - "uploads/" . $_FILES["file"]["name"]); - $filename = "uploads/". $_FILES["file"]["name"]; - //echo "
Stored in: ".$filename."
"; - //open the file - $fh = fopen($filename, 'r'); - //$theData = fread($fh, filesize($filename)); - while (($data = fgetcsv($fh, 60, ",")) !== FALSE) { - $num = count($data); - //echo "

$num fields in line $row:

\n"; - if ($num != 9){ - echo "Number of fields in file not equal to 9. Incorrect File - Try Again!"; - fclose($fh); - // delete the file - unlink($filename); - echo "

Return
"; - exit; - } - $row++; - // get each item in the csv record there are 9 items - $Apperson_num = $data[0]; - $team_num = $data[1]; - // IMPORTANT This only works if the setup is done following the rules for using the Apperson Scanner. - // The project numbers are all unique after removing the first digit (the Category ID) - $qstr = "SELECT judges_teams.num, projects.projectnumber, projects.projectcategories_id, ". "eval_projects_entries.criteria_id, eval_projects_entries.level_id, ". - "eval_projects_entries.id, SUBSTR(projects.projectnumber, 2) AS apppProj ". - "FROM eval_projects_entries, projects, judges_teams ". - "WHERE eval_projects_entries.project_id = projects.id AND ". - "eval_projects_entries.judges_teams_id = judges_teams.id AND ". - "(judges_teams.num = '".$team_num."') AND ". - "(SUBSTR(projects.projectnumber, 2) = '".$Apperson_num."') ORDER BY eval_projects_entries.criteria_id"; - $q = mysql_query($qstr) ; - if (!$q OR mysql_num_rows($q) == 0){ - if(!$q){ - echo "q = FALSE!
"; - } - echo "No Matching record for team number ".$team_num." and Apperson Project number ".$Apperson_num."
"; - fclose($fh); - // delete the file - unlink($filename); - echo "
Need to keep trying Ask Dennis to fix
Return
"; - exit; - } - if (mysql_num_rows($q) == 6){ // 6 criteria for each judgeteam-project is required to upload Apperson data - while($r=mysql_fetch_object($q)) { - $project_num = $r->projectnumber; - $record_id = $r->id; - switch ($r->criteria_id) - { - case 1: //Creative Ability - //echo " update CAS 1= ".$data[2 ]; - mysql_query("UPDATE eval_projects_entries SET level_id = '".$data[2]."' WHERE id = '".$record_id."'"); - break; - case 2: // Scientific Thought - //echo " update STS 2= ".$data[3 ]; - mysql_query("UPDATE eval_projects_entries SET level_id = '".$data[3]."' WHERE id = '".$record_id."'"); - break; - case 3: // Thouroughness - //echo " update THS 3= ".$data[4 ]; - mysql_query("UPDATE eval_projects_entries SET level_id = '".$data[4]."' WHERE id = '".$record_id."'"); - break; - case 4 : // Skill - //echo " update SKS 4= ".$data[5 ]; - mysql_query("UPDATE eval_projects_entries SET level_id = '".$data[5]."' WHERE id = '".$record_id."'"); - break; - case 5: //Clairity - //echo " update CLS 5= ".$data[6 ]; - mysql_query("UPDATE eval_projects_entries SET level_id = '".$data[6]."' WHERE id = '".$record_id."'"); - break; - case 6: //Teamwork - //echo " update TWS 6= ".$data[7 ]; - mysql_query("UPDATE eval_projects_entries SET level_id = '".$data[7]."' WHERE id = '".$record_id."'"); - break; - } - } // while - } - else { - echo "Evaluations table eval_projects_entries is Not setup for Apperson Data Import.
There are not exactly 6 criteria for judgeteam ".$team_num." project number ".$project_num."
"; - fclose($fh); - // delete the file - unlink($filename); - echo "

Return
"; - exit; - } - } - fclose($fh); - // delete the file - unlink($filename); - echo $row." records entered in database
"; - //echo "

File deleted
"; - } - } -} -else -{ - echo "Invalid file"; -} -echo "

Return
"; -?> diff --git a/plugins/evaluations/eval_webentry.php b/plugins/evaluations/eval_webentry.php deleted file mode 100644 index dd8ab8fe..00000000 --- a/plugins/evaluations/eval_webentry.php +++ /dev/null @@ -1,342 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - - - -SFIAB Evaluations Entry - - - -Judges' Project Evaluations

"; - -/* -This is an evaluation form(s) for a team. Here the team can evaluate each project assigned to the team. - * First input the team number - * Verify one of the team members is signed in and accessing this page (TBD) - * Fill in a drop down with project numbers and project titles (TBD for now just a list and manual input) - * Select a project number from the drop down box. (TBD) - * Create the evaluation form - pre fill with any current evaluation entries. - * Enter the evaluation (button) - * Select another project - * continue untill... - * Exit the page - */ - $newteam = false; -if($_POST['enter']=="evals") { // come here if have an evaluation entry for a given team and project - // get the values saved in the form. - $oktoupdate = true; // RFU - $project_id = $_POST['project_id']; // save in form - $project_num = $_POST['project_num']; // saved in form - $team_num = $_POST['team_num']; // saved in form - $judges_team_name = $_POST['team_name']; - $judges_teams_id = $_POST['team_id']; - if ($oktoupdate){ - /* - * for each possible critera for the project see if it was entered (will not be a POST entry if slection was made for the post) - * the posts have names CR_nnn where nnn is the criteria number. The values are the 'selected' level_id (stored in evals_projects_entries) - * if a selection, save it in the database if not set a flag not complete. - * return to the form - */ - $q = mysql_query("SELECT * FROM eval_projects WHERE project_id = '".$project_id."' "); - if (!$q OR mysql_num_rows($q) == 0){ - // what to do here? Should not happen - } - while($r=mysql_fetch_object($q)) { - $scheme_id = $r->scheme_id; - } - $q = mysql_query("SELECT * FROM eval_criteria WHERE scheme_id = '".$scheme_id."' "); - if (!$q OR mysql_num_rows($q) == 0){ - // what to do here? Should not happen - } - while($r=mysql_fetch_object($q)) { - // skip those that have criteria weight == 0 (compatibility with Apperson Scanner export/import) - if ($r->criteria_weight > 0){ - $criteria_id = $r->criteria_id; - $postname= "CR_".$criteria_id; - if ($_POST[$postname]){ - $value_id = $_POST[$postname]; - // now save this one in the database - $status = mysql_query("UPDATE eval_projects_entries SET level_id = '".$value_id."' WHERE judges_teams_id = '".$judges_teams_id."' AND project_id = '".$project_id."' AND criteria_id = '".$criteria_id."' " ); - // should work but need check if $status == false - } - } - } - } -} -if($_POST['enter']=="project_team" || $_POST['selection'] == "team_num") { - // Changed the project number and or team number - $team_num = $_POST['team_num']; - if ($_POST['prev_team_num'] != $team_num){ - $newteam = true; - } -} -if ($team_num == 0) -{ - echo "
"; - echo ""; - echo ""; - echo ""; - echo "
Team Number
"; - echo "
"; - echo ""; - exit; -} - -// have a team number if get here next gets the selected project from the drop down list -if($_POST['project']){ - $project_num = $_POST['project']; -} -if ($newteam) { - $project_num = 0; -} - //echo "
Have team number data: Number: ".$team_num." Id=",$judges_teams_id." name=".$judges_team_name."
"; - echo "
"; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - //echo ""; - echo "
Team Number
Project Number
"; - $qstr_prjs = "SELECT judges_teams_timeslots_projects_link.`year`, judges_teams_timeslots_projects_link.judges_teams_id, judges_teams.num, ". - "judges_teams.name, projects.projectnumber, projects.floornumber, projects.title, projects.shorttitle, projects.`language` ". - "FROM judges_teams, judges_teams_timeslots_projects_link, projects ". - "WHERE judges_teams.id = judges_teams_timeslots_projects_link.judges_teams_id ". - "AND judges_teams_timeslots_projects_link.projects_id = projects.id ". - "AND judges_teams.num = '$team_num' "; - $qprjs=mysql_query($qstr_prjs); - if ($qprjs) { - $num_projects = mysql_num_rows($qprjs); - if ($num_projects > 0 ){ - $cnt = 0; - //echo ""; - echo ""; - echo "
"; - echo "
"; - } - else{ - // no projects assigned or incorrect team number. - } - } - -if ($project_num == 0 ) { // if first selection of team number or if changed the team number. - echo ""; - exit; -} -// have team id and project number -$q = mysql_query("SELECT * FROM projects WHERE projectnumber = '".$project_num."' "); -if (!$q OR mysql_num_rows($q) == 0){ - echo "
No such project number! Start over:
"; - $project_num = 0; - echo "
"; - echo ""; - echo ""; - echo ""; - echo "
Team Number
"; - echo "
"; - echo ""; - exit; -} -$r=mysql_fetch_object($q); -$project_id = $r->id; -// double check this project is assigned to this team -$q = mysql_query("SELECT * FROM judges_teams_timeslots_projects_link WHERE projects_id = '".$project_id."' AND judges_teams_id = '".$judges_teams_id."'"); -if (!$q OR mysql_num_rows($q) == 0){ - echo "
Project NOT assigned to the selected team! Start over:
"; - $project_num = 0; - echo "
"; - echo ""; - echo ""; - echo ""; - echo "
Team Number
"; - echo "
"; - echo ""; - exit; -} -// At this point we have all the data necessary to create the entry form -// Get project information for display -$qst = "SELECT projects.projectdivisions_id, projectdivisions.division, projectdivisions.division_shortform, projectcategories.category, ". - "projectcategories.category_shortform, projects.projectnumber, projects.floornumber, projects.title, projects.shorttitle, ". - "projects.`language`, eval_projects.scheme_id, eval_projects.team ". - "FROM projects, eval_projects, projectcategories, projectdivisions ". - "WHERE projects.id = eval_projects.project_id AND projects.projectcategories_id = projectcategories.id ". - "AND projects.projectdivisions_id = projectdivisions.id AND projects.id = '".$project_id."'"; -$q=mysql_query($qst); -if ($q) { - while($r=mysql_fetch_object($q)) { - $ptitle = $r->title; - $pshort_title = $r->shorttitle; - $category = $r->category; - $division = $r->division; - $shortcategory = $r->category_shortform; - $division_shortform = $r->division_shortform; - $language = $r->language; - $scheme_id = $r->scheme_id; - $team = $r->team; - } -} -echo "
Current Evaluation is for:
"; -echo " Team number: ".$team_num."
"; -$IsTeam = ""; -if ($team == "yes"){ $IsTeam = " (Team Project)";} -echo " Project number: ".$project_num ." Title: ".$ptitle.$IsTeam."

"; -echo " Project Category: ".$category."
"; -echo " Project Division: ".$division."
"; -echo " Language: ".$language."
"; -// this is for test only at this time. will be used in the Apperson Scanner export and import. -// to create the file necessary to preslug the score forms. -// Barcode = 1 or 2 for team, 4 digits exn, 4 digits team number, 2 digits checksum? -//$tempprnum = substr($project_num , 1); -//if ( strlen($tempprnum) < 4 ) -// { -// $tempprnum = "0".$tempprnum; -// } -//echo "
Scanner Project number: ".$tempprnum; -echo "
"; -$errors = 0; -$criteria_row = 0; -// First find the longest string in criteria and level names so the table will look nice -$maxstrlen = 0; -$qcr=mysql_query("SELECT * FROM eval_criteria WHERE scheme_id = '$scheme_id' Order by 'criteria_id'"); -if ($qcr) { - while($rcr=mysql_fetch_object($qcr)) { - if (strlen($rcr->criteria_name) > $maxstrlen) { - $maxstrlen = strlen($rcr->criteria_name); - } - } -} -$qlv=mysql_query("SELECT * FROM eval_levels WHERE scheme_id = $scheme_id ". - "AND spec_use = 'no' ORDER BY level_value DESC"); -if ($qlv) { - while($rlv=mysql_fetch_object($qlv)){ - if (strlen($rlv->level_name) > $maxstrlen) { - $maxstrlen = strlen($rlv->level_name); - } - } -} -echo "
"; -// Build the table ************************************************************** -echo ""; -// build the top row criteria labels. If a criteria weight == 0 do not put in form (for compatibilbity with Apperson Scanners) -$qcr=mysql_query("SELECT * FROM eval_criteria WHERE scheme_id = '$scheme_id' Order by 'criteria_id'"); -echo ""; -if ($qcr) { - $total_crits = mysql_num_rows($qcr); // used to check if all criteria have a selection - $count_crits = 0; - while($rcr=mysql_fetch_object($qcr)) { - if ($rcr->criteria_weight > 0){ - $nam = $rcr->criteria_name; - if (strlen($nam) < $maxstrlen){ - $addn = $maxstrlen - strlen($nam) + 5; - for ( $icnt = 1; $icnt <= $addn; $icnt += 1) { - $nam = $nam." "; - } - } - echo ""; - } - else{ - $total_crits -= 1; // reduce the number of needed criteria marks for each criteria wiht weight = 0 - } - } -} -echo ""; -// Now add the row with the levels to select as a radio button list ********************* -// ** important to order the same as above query *** -$qcr=mysql_query("SELECT * FROM eval_criteria WHERE scheme_id = '$scheme_id' Order by 'criteria_id'"); -echo ""; -if ($qcr) { - while($rcr=mysql_fetch_object($qcr)) { - // for each, add a colunm with the input list - // except.. if the criteria weight is 0 then do not add to the form (Special case for compatibility with Export / Apperson scanners) - if ($rcr->criteria_weight > 0){ - echo ""; - } - } -} -echo ""; -echo ""; -echo ""; -echo ""; -echo ""; -echo ""; -echo ""; -if ( $total_crits == $count_crits ){ - echo "Complete! Enter changes or select another project."; -} - else{ - echo "EVALUATION NOT COMPLETE!"; -} -echo "
"; -echo ""; -echo "
".$nam."
"; - $qlv=mysql_query("SELECT * FROM eval_levels WHERE scheme_id = $scheme_id ". - "AND spec_use = 'no' ORDER BY level_value DESC"); - if ($qlv) { - while($rlv=mysql_fetch_object($qlv)){ - // see if this level for this criteria is already set in the tables - $qset=mysql_query("SELECT * FROM eval_projects_entries WHERE judges_teams_id = '".$judges_teams_id."' AND project_id = '".$project_id."' AND criteria_id ='".$rcr->criteria_id."'"); - if($qset){ - while($rset=mysql_fetch_object($qset)){ // should only be one record for this criteria - if ($rset->level_id == $rlv->level_id){ - $rbsel = "checked"; - $count_crits += 1; - } - else{ - $rbsel = ""; - } - } - } - $nam = $rlv->level_name; - echo " ".$nam."
"; - } - } - echo "
"; -echo "
"; -echo "
"; -?> - - \ No newline at end of file diff --git a/plugins/evaluations/index.php b/plugins/evaluations/index.php deleted file mode 100644 index 645dc7db..00000000 --- a/plugins/evaluations/index.php +++ /dev/null @@ -1,39 +0,0 @@ - - Copyright (C) 2011 Dennis Spanogle - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> - - - -SFIAB Evaluations Main Page - - - - - \ No newline at end of file diff --git a/plugins/evaluations/sfiab_common.inc.php b/plugins/evaluations/sfiab_common.inc.php deleted file mode 100644 index 7c68b84e..00000000 --- a/plugins/evaluations/sfiab_common.inc.php +++ /dev/null @@ -1,115 +0,0 @@ - - Copyright (C) 2005 James Grant - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation, version 2. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -?> -"; - if(file_exists($prependdir."../../data/config.inc.php")) - { - require_once($prependdir."../../data/config.inc.php"); - } - else - { - echo "SFIAB is not setup. Do that prior to starting plug-ins
"; - exit; - } - $DBUSER=substr($DBUSER,0,16); - if(!mysql_connect($DBHOST,$DBUSER,$DBPASS)) - { - echo "SFIAB ERROR"; - echo "

Science Fair In A Box - ERROR

"; - echo "Cannot connect to database!"; - echo ""; - exit; - } - if(!mysql_select_db($DBNAME)) - { - echo "SFIAB ERROR"; - echo "

Science Fair In A Box - ERROR

"; - echo "Cannot select database!"; - echo ""; - exit; - } -} - -//find out the fair year and any other 'year=0' configuration parameters (things that dont change as the years go on) -$q=@mysql_query("SELECT * FROM config WHERE year='0'"); - -//we might get an error if installation step 2 is not done (ie, the config table doesnt even exist) -if(mysql_error()) -{ - echo "SFIAB installation is not complete. Plug-ins require a complete installation!"; - echo "
"; - exit; -} -//if we have 0 (<1) then install2 is not done, which would get caught above, -//if we have 1 (<2) then insatll3 is not done (no entries for FAIRYEAR and SFIABDIRECTORY) -if(mysql_num_rows($q)<2) -{ - echo "SFIAB installation is not complete. Plug-ins require a complete installation!"; - echo "
"; - exit; -} -else -{ - if (!config) - { - while($r=mysql_fetch_object($q)) - { - $config[$r->var]=$r->val; - } - } -} - -//now pull the rest of the configuration -$q=mysql_query("SELECT * FROM config WHERE year='".$config['FAIRYEAR']."'"); -while($r=mysql_fetch_object($q)) -{ - $config[$r->var]=$r->val; -} - -//now pull the dates probably not required in plug-ins keep for now -$q=mysql_query("SELECT * FROM dates WHERE year='".$config['FAIRYEAR']."'"); -while($r=mysql_fetch_object($q)) -{ - $config['dates'][$r->name]=$r->date; -} - - -?> diff --git a/plugins/evaluations/version.txt b/plugins/evaluations/version.txt deleted file mode 100644 index 3eefcb9d..00000000 --- a/plugins/evaluations/version.txt +++ /dev/null @@ -1 +0,0 @@ -1.0.0