From fe7f159d278d788ba379be859839c18f4b4d48e7 Mon Sep 17 00:00:00 2001 From: Matthew Dudley Date: Wed, 7 Oct 2015 13:27:42 -0600 Subject: [PATCH 01/52] First pass CSS Merge --- ajax_forms.php | 14 +- ajax_htmldata.php | 8 +- css/style.css | 1778 +++++++++++++++----- images/add.gif | Bin 0 -> 180 bytes images/arrowdown.png | Bin 0 -> 184 bytes images/arrowup.png | Bin 0 -> 183 bytes images/authpage.gif | Bin 0 -> 6086 bytes images/back-header.jpg | Bin 0 -> 328 bytes images/bg-diagonal-stripes.png | Bin 0 -> 214 bytes images/bg-gray-texture.jpg | Bin 0 -> 44031 bytes images/change/coral-cancellation.png | Bin 0 -> 2075 bytes images/change/coral-change.gif | Bin 1313 -> 1119 bytes images/change/coral-licensing.gif | Bin 1044 -> 2032 bytes images/change/coral-licensing.png | Bin 0 -> 1966 bytes images/change/coral-main.gif | Bin 1109 -> 1420 bytes images/change/coral-main.png | Bin 0 -> 1923 bytes images/change/coral-organizations.gif | Bin 1122 -> 2581 bytes images/change/coral-organizations.png | Bin 0 -> 2228 bytes images/change/coral-resources.gif | Bin 1101 -> 2511 bytes images/change/coral-resources.png | Bin 0 -> 2012 bytes images/change/coral-usage.gif | Bin 811 -> 2163 bytes images/change/coral-usage.png | Bin 0 -> 2225 bytes images/favicon.ico | Bin 0 -> 1150 bytes images/login.gif | Bin 0 -> 1487 bytes images/menu/menu-admin-on.gif | Bin 748 -> 855 bytes images/menu/menu-admin-over.gif | Bin 543 -> 855 bytes images/menu/menu-admin.gif | Bin 826 -> 855 bytes images/menu/menu-fileimport-on.gif | Bin 684 -> 919 bytes images/menu/menu-fileimport-over.gif | Bin 688 -> 914 bytes images/menu/menu-fileimport.gif | Bin 1011 -> 919 bytes images/menu/menu-home-on.gif | Bin 554 -> 751 bytes images/menu/menu-home-over.gif | Bin 763 -> 751 bytes images/menu/menu-home.gif | Bin 832 -> 751 bytes images/menu/menu-reportingoptions-on.gif | Bin 1067 -> 1106 bytes images/menu/menu-reportingoptions-over.gif | Bin 1074 -> 1101 bytes images/menu/menu-reportingoptions.gif | Bin 1196 -> 1106 bytes images/menu/menu-sushi-on.gif | Bin 1404 -> 861 bytes images/menu/menu-sushi-over.gif | Bin 1840 -> 861 bytes images/menu/menu-sushi.gif | Bin 1917 -> 861 bytes images/usage-reports-button.gif | Bin 1529 -> 924 bytes images/usagetitle.gif | Bin 21478 -> 7325 bytes images/usagetitle.jpg | Bin 0 -> 18277 bytes images/xls.gif | Bin 1670 -> 1438 bytes import.php | 2 +- not_avail.php | 4 +- publisherPlatform.php | 14 +- reporting.php | 2 +- sushi.php | 4 +- templates/header.php | 21 +- 49 files changed, 1409 insertions(+), 438 deletions(-) create mode 100644 images/add.gif create mode 100644 images/arrowdown.png create mode 100644 images/arrowup.png create mode 100644 images/authpage.gif create mode 100644 images/back-header.jpg create mode 100644 images/bg-diagonal-stripes.png create mode 100644 images/bg-gray-texture.jpg create mode 100644 images/change/coral-cancellation.png create mode 100644 images/change/coral-licensing.png create mode 100644 images/change/coral-main.png create mode 100644 images/change/coral-organizations.png create mode 100644 images/change/coral-resources.png create mode 100644 images/change/coral-usage.png create mode 100644 images/favicon.ico create mode 100644 images/login.gif create mode 100644 images/usagetitle.jpg diff --git a/ajax_forms.php b/ajax_forms.php index 0108461..c72ebf9 100644 --- a/ajax_forms.php +++ b/ajax_forms.php @@ -749,17 +749,17 @@ ?>
- - + + - + @@ -784,8 +784,8 @@ //Add Identifiers case 'getAddIdentifierForm': if (isset($_GET['platformID'])) $platformID = $_GET['platformID']; else $platformID = ''; - if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; - if (isset($_GET['titleID'])) $titleID = $_GET['titleID']; + if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; + if (isset($_GET['titleID'])) $titleID = $_GET['titleID']; ?> diff --git a/ajax_htmldata.php b/ajax_htmldata.php index bcf938c..6378606 100644 --- a/ajax_htmldata.php +++ b/ajax_htmldata.php @@ -213,7 +213,7 @@ //both publishers and platforms will have organizations lookup if ($config->settings->organizationsModule == 'Y'){ - echo "


Organization Accounts

"; + echo "

Organization Accounts

"; if (isset($_GET['publisherPlatformID']) && ($_GET['publisherPlatformID'] != '')){ $publisherPlatformID = $_GET['publisherPlatformID']; @@ -1499,9 +1499,9 @@ ?>
Add New Platform for SUSHI Connection

Add New Platform for SUSHI Connection
   - - + +
- - - + + + diff --git a/css/style.css b/css/style.css index 522bde3..f689924 100644 --- a/css/style.css +++ b/css/style.css @@ -2,27 +2,39 @@ html { height: 100%; margin: 0; padding: 0; + -webkit-font-smoothing: antialiased; } body { height: 100%; text-decoration: none; - color: #2c3c42; - font-family: "arial"; - font-size: 10pt; - font-weight: heavy; - background: #FFFFFF; + color: #666; + font-family: Arial, sans-serif; + font-size: 14px; + font-weight: 30; + background: #E7E8E8; margin: 0; /* it's good practice to zero the margin and padding of the body element to account for differing browser defaults */ padding: 0; text-align: center; /* this centers the container in IE 5* browsers. The text is then set to the left aligned default in the #container selector */ - + background: #E7E8E8 url(../images/bg-gray-texture.jpg) repeat top left; + -webkit-font-smoothing: antialiased; } .wrapper { - min-height: 100%; - height: auto !important; - height: 100%; margin: 0 auto -2em; + height; 120px; + background-image: url("../images/back-header.jpg"); + background-repeat: repeat-x; + padding-bottom: 40px; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +table:nth-of-type(1) td { + padding-top: 0; } .push { @@ -59,7 +71,12 @@ a.helpfulLink {color:#526972;} .smallGreyText{font-size:85%;font-weight:normal; color:gray} .boldBlueText{font-weight:bold; color:#526972;} .boldText{font-weight:bold;} -.bigBlueText{font-size:125%; color:#526972;} + +.bigBlueText { + font-size: 125%; + color: #1B77AA; +} + .headerText {font-size:125%;font-weight:bold; } @@ -72,9 +89,6 @@ select option { color: #3D545D; font-family: "arial"; font-size: 95%; margin:1px .optionStyle { color: #3D545D; font-family: "arial"; font-size: 8pt; font-weight: medium; } -input, select, multiple, textarea{color: #3D545D; font-family: "arial"; font-size: 95%; font-weight: medium;} - - /* following is for the right panel (helpful links) in the resource page *************************/ div.rightPanel a {color:#3D545D;text-decoration:none;} @@ -332,9 +346,15 @@ div.f3 { clear: both; } -table#title {padding:0px; background-image:url('../images/organizationstitle.gif');background-repeat:no-repeat;height:84px;width:900px;} -table.headerTable {padding:1px;width:900px;min-height:40px;background-image:url('../images/header.gif');background-repeat:no-repeat;} +table#title {padding:0px; background-image:url('../images/organizationstitle.jpg');background-repeat:no-repeat;height:120px;width:900px;} +table.headerTable { + padding: 1px; + width: 900px; + min-height:40px; + background: none !important; + border-collapse: collapse; +} hr { @@ -399,230 +419,6 @@ ul.tabs a{ text-decoration: none; } -/* Coral Change Module Menu - coraldropdowns -*************************/ - -ul.coraldropdown{ - margin: 0; - padding: 0; - display: block; - position: absolute; - z-index: 999; - top: 100%; - width: 130px; - display: none; - left: 0; - border: 1px solid #b8cee4; - -moz-border-radius: 1px; - -webkit-border-radius: 1px; -} - -ul.coraldropdown ul.coraldropdown{ - top: 0; - left: 95%; -} - -ul.coraldropdown li{ - margin: 0; - padding: 0; - float: left; - position: relative; - list-style: none; - display: block; - height: 23px; - border-top: 1px solid #e2ebf4; -} - -ul.coraldropdown li a{ - display: block; - line-height:23px; - background-color:#f6f9fb; - background-repeat:no-repeat; -} - - -ul.coraldropdown li a:hover{ -background-color:white; -} - - - -/* More Custom classes... -*************************/ - - -div.grayBorder { - border-width: 1px; - border-style: solid; - border-color: #e0dfe3; -} - -table.dataTable { - border-width: 0 0 1px 1px; - border-style: solid; - border-color: #e0dfe3; - border-collapse: collapse; - border-spacing: 0; - max-width:895px; - width:895px; - font-size:90%; -} - - -table.dataTable td { - margin: 0; - padding: 2px 3px 2px 2px; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #e0dfe3; - background-color: white; - -moz-border-radius: 0px; -} - - - -table.dataTable td.alt { - margin: 0; - padding: 2px 3px 2px 2px; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #e0dfe3; - background-color: #f5f8fa; - -moz-border-radius: 0px; -} - - -table.dataTable th { - margin: 0; - padding: 2px 3px 2px 2px; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #e0dfe3; - background-color: white; - -moz-border-radius: 0px; -} - -table.dataTable tr {vertical-align: top;} - - - - - -table.sample { - padding:0px; - margin:0px; - border-width: 0px; - border-spacing: 0px; - border-style: inset inset inset inset; - border-color: white; - border-collapse: collapse; - background-color: white; -} - -table.sample td.main { - border-width: 1px 1px 1px 1px; - padding: 3px 3px 3px 3px; - border-style: solid solid solid solid; - border-color: gray gray gray white; - -moz-border-radius: 0px 0px 0px 0px; -} - -table.sample td.selected { - width:110px; - height:15px; - border-width: 1px 0px 1px 1px; - padding: 8px 3px 8px 3px; - border-style: solid solid solid solid; - border-color: gray white gray gray; - -moz-border-radius: 0px 0px 0px 0px; - -} - -table.sample td.unselected { - width:110px; - height:15px; - border-width: 1px 1px 1px 1px; - padding: 8px 3px 8px 3px; - border-style: solid solid solid solid; - border-color: gray gray gray gray; - background-color: #adc6de; - -moz-border-radius: 0px 0px 0px 0px; - -} - - -table.sample td.bottom { - width:90px; - height:auto; - border-width: 1px 1px 1px 1px; - padding: 3px 3px 3px 3px; - border-style: solid solid solid solid; - border-color: white gray white white; - -moz-border-radius: 0px 0px 0px 0px; - -} - - -.sidemenu{ - background-color: white; - border-right: 1px solid #d2d2d5; - border-top: 1px solid #d2d2d5; - width: 108px; - vertical-align: top; - text-align: left; -} - -.sidemenu a:link{text-decoration: none;} -.sidemenu a:hover {text-decoration: underline;} -.sidemenu img{vertical-align: top;} - -.sidemenu span.icon{ - float:left; - vertical-align: top; - text-align:center; - height:16px; - width:20px; -} - -.sidemenu div{ - padding: 6px 0px 6px 3px; - border-bottom: 1px solid #d2d2d5; - font-weight:normal; -} -.sidemenuselected{ - padding: 6px 0px 6px 6px; - border-bottom: 1px solid #d2d2d5; - border-left: 1px solid #d2d2d5; - background-color: white; -} -.sidemenuunselected{ - padding: 6px 0px 6px 6px; - border-bottom: 1px solid #d2d2d5; - border-left: 1px solid #d2d2d5; - background-color: #f2f5f7; - background-image:url('../images/tab.gif'); - background-repeat:no-repeat; - min-height:16px; -} - -.sidemenuunselected span.link{ - float:left; - clear:right; -} - -.mainContent{ - padding: 8px 14px 14px 14px; - background-color: white; - text-align:left; - border-top: 1px solid #d2d2d5; - border-right: 1px solid #d2d2d5; - border-bottom: 1px solid #d2d2d5; - background-color: white; - vertical-align: top; - -} - - .printContent{ padding: 24px 24px 24px 24px; @@ -795,236 +591,1410 @@ table.surroundBox tr { -table.surroundForm { - border-width: 1px 1px 0px 1px; - border-style: solid; - border-color: #e6e5e9; - border-collapse: collapse; - border-spacing: 0; - font-size:100%; -} +table.noBorder td { border:0; } +table.smallPadding td{ padding:1px; } -table.surroundForm td { - border-width: 0px 0px 1px 0px; - border-style: solid; - border-color: #e6e5e9; - border-collapse: collapse; - border-spacing: 0; - margin: 0; - padding: 5px; - background-color: white; - -moz-border-radius: 0px; -} +table.noMargin { border:0px;margin:0px; padding:0px;text-align:center; } +table.noMargin tr { border:0px;margin:0px; padding:0px; vertical-align:center; } +table.noMargin td { border:0px;margin:0px; padding:0px; } -table.surroundForm tr { - vertical-align:top; -} + +.formText {font-weight:bold;} +div.thickboxDiv{display:none;} + +table.thickboxTable{ + padding:6px; + text-decoration: none; + color: #2c3c42; + font-family: "arial"; + font-size: 8pt; + font-weight: heavy; +} +table.thickboxTable td{ + padding:1px; +} +.infoText{font-size:small;font-weight:normal; color:gray} +.span_CancellationNumber{font-size:small;font-weight:normal; color:gray} +.span_CurrentQueue{font-size:small;font-weight:normal; color:gray} +table.noBorderTable {padding:0px; width:100%; border-style:none;} +table.noBorderTable td {padding:0px; border-style:none; vertical-align:middle;} +table.noBorderTable td.alt {padding:0px; border-style:none; vertical-align:middle;background-color: #f5f8fa;} +ul li { margin-left: 1.5em;} +ul li { margin-bottom: .7em;} -table.borderedFormTable { - border-width: 0 0 1px 1px; - border-style: solid; - border-color: #e0dfe3; - border-collapse: collapse; - border-spacing: 0; - font-size:90%; +a.dp-choose-date { + float: left; + width: 16px; + height: 16px; + padding: 0; + margin: 0px 3px 0; + display: block; + text-indent: -2000px; + overflow: hidden; + background: url('../images/calendar.gif') no-repeat; } - -table.borderedFormTable td { - margin:3px; - padding:3px; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #e0dfe3; - background-color: white; - -moz-border-radius: 0px; +a.dp-choose-date.dp-disabled { + background-position: 0 -20px; + cursor: default; } - -table.borderedFormTable td.alt { - margin:3px; - padding:3px; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #e0dfe3; - background-color: #f4f8fc; - -moz-border-radius: 0px; +/* makes the input field shorter once the date picker code + * has run (to allow space for the calendar icon + */ +input.dp-applied { + width: 140px; + float: left; } +.adminAddInput{margin-top:5px;} +.licenseAddInput{margin-top:5px;margin-bottom;5px;} -table.borderedFormTable td.searchRow { - margin:3px; - padding:3px; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #e0dfe3; - background-image:url('../images/search.gif'); - background-repeat:no-repeat; - background-color: white; - -moz-border-radius: 0px; -} -table.borderedFormTable th { - margin:3px; - padding:3px; - border-width: 1px 1px 0 0; - border-style: solid; - border-color: #e0dfe3; - background-color: white; - -moz-border-radius: 0px; +.changeInput{ + padding:1px; + outline:none; +} + +select.changeSelect{ + padding:0px; +} + +select option.changeSelect{ + padding:0px; } -table.borderedFormTable tr {vertical-align: top;} +.changeDefault{ + padding:2px; + outline:none; + background:#f5f8fa; + border: solid 1px #a5acb2; + color: #526972; +} + +.focusField{ + border:solid 1px #526972; + background:#f5f8fa; + color:#2c3c42; +} +.idleField{ + background:#fbfbfb; + color: #526972; + border: solid 1px #a5acb2; +} +.changeAutocomplete{ + padding:2px; + outline:none; + background:#f5f8fa; + border: solid 1px #a5acb2; + color: #526972; +} +.changeDefaultWhite{ + border: solid 1px #a5acb2; + color: #526972; +} +/*-------------------------------------------------------------------*/ -table.borderedHeadTable { - width:947px; - border-width: 0 0 1px 1px; - border-style: solid; - border-color: #e0dfe3; - border-collapse: collapse; - border-spacing: 0; - font-size:110%; +.footer { + height: 2em; + font-size:80%; + color: #4d4d4d; text-align:center; - color:white; + width:100%; + position: absolute; +} +a { + color:#4d4d4d; } -table.borderedHeadTable td { - margin:3px; - padding:3px; - border-width: 0 1px 0 1px; - border-style: solid; - border-color: #b0932c; - background-color: #adc6de; - -moz-border-radius: 0px; +a.smallLink { + font-size: 12px; + text-decoration: none; + color: #1B76A9; } -table.borderedHeadTable tr { - vertical-align:middle; +table.queueMenuTable { + margin-right: 10px; } +table.queueMenuTable td { + padding: 10px; + background-color: #1b77aa; + border-bottom: 1px solid #5295ba; + width: 150px !important; +} +table.queueMenuTable td.selected { + background-color: #DAE6EA; + width: 150px; + vertical-align: top; + text-align: left; + color: #fff; +} -table.noBorder td { border:0; } -table.smallPadding td{ padding:1px; } +table.queueMenuTable td.selected:last-child { + border-bottom: 1px solid #DAE6EA; +} -table.noMargin { border:0px;margin:0px; padding:0px;text-align:center; } -table.noMargin tr { border:0px;margin:0px; padding:0px; vertical-align:center; } -table.noMargin td { border:0px;margin:0px; padding:0px; } +table.queueMenuTable td.selected a { + color: #1b77aa !important; + text-decoration: none; +} +table.headerTable { + padding: 1px; + width: 900px; + min-height:40px; + background: none !important; + border-collapse: collapse; +} -.formText {font-weight:bold;} +hr { + border:0; + border-bottom: 1px solid #e0dfe3; + height: 0; + width: auto !important; + background: #e0dfe3; +} +span.searchLetter { + margin: 0px; + padding-left: 1px; + padding-right: 1px; + color: #fff; + font-family: Courier, monospace; +} -div.thickboxDiv{display:none;} +span.searchLetter a { + color: #fff; +} -table.thickboxTable{ - padding:6px; - text-decoration: none; - color: #2c3c42; - font-family: "arial"; - font-size: 8pt; - font-weight: heavy; +span.searchLetterSelected { + margin: 0px; + padding-left: 1px; + padding-right: 1px; + background-color: #A9D0E0; + color: #fff; } -table.thickboxTable td{ - padding:1px; +span.searchLetter a:hover { + text-decoration: none; + background-color: #4d4d4d; + margin: 0px; } -.infoText{font-size:small;font-weight:normal; color:gray} -.span_CancellationNumber{font-size:small;font-weight:normal; color:gray} -.span_CurrentQueue{font-size:small;font-weight:normal; color:gray} -table.noBorderTable {padding:0px; width:100%; border-style:none;} -table.noBorderTable td {padding:0px; border-style:none; vertical-align:middle;} -table.noBorderTable td.alt {padding:0px; border-style:none; vertical-align:middle;background-color: #f5f8fa;} +/* Coral Change Module Menu - tabs +*************************/ -ul li { margin-left: 1.5em;} -ul li { margin-bottom: .7em;} +ul.tabs{ + display: table; + margin: 0; + padding: 0; + list-style: none; + position: relative; +} + +ul.tabs li{ + margin: 0; + padding: 0; + list-style: none; + display: table-cell; + float: left; + position: relative; + width: 150px; + height: 40px; +} +ul.tabs a{ + position: relative; + display: block; + text-decoration: none; +} +/* Coral Change Module Menu - coraldropdowns +*************************/ -a.dp-choose-date { - float: left; - width: 16px; - height: 16px; +ul.coraldropdown{ + margin: 0; padding: 0; - margin: 0px 3px 0; display: block; - text-indent: -2000px; - overflow: hidden; - background: url('../images/calendar.gif') no-repeat; + position: absolute; + z-index: 999; + top: 100%; + width: 154px; + display: none; + left: 0; } -a.dp-choose-date.dp-disabled { - background-position: 0 -20px; - cursor: default; + +ul.coraldropdown ul.coraldropdown{ + top: 0; + left: 95%; } -/* makes the input field shorter once the date picker code - * has run (to allow space for the calendar icon - */ -input.dp-applied { - width: 140px; + +ul.coraldropdown li { + margin: 0; + padding: 0; float: left; + position: relative; + list-style: none; + display: block; + height: 40px; + width: 154px; + border-top: solid 1px #5a5a5a; } -.adminAddInput{margin-top:5px;} -.licenseAddInput{margin-top:5px;margin-bottom;5px;} +ul.coraldropdown li:first-child { + border-top: solid 1px #6195B2; +} +ul.coraldropdown li a { + display: block; + line-height: 23px; + background-color: #4d4d4d; + background-repeat: no-repeat; + padding-left: 0px; +} -.changeInput{ - padding:1px; - outline:none; -} +ul.coraldropdown li a:hover{ + background-color: #1b76a9; + cursor: pointer; +} -select.changeSelect{ - padding:0px; -} +/* More Custom classes... +*************************/ -select option.changeSelect{ - padding:0px; + +table.dataTable { + border-width: 0 0 1px 1px; + border-style: solid; + border-color: #e0dfe3; + border-collapse: collapse; + border-spacing: 0; + max-width:895px; + width:895px; + font-size:90%; + margin-top: 11px; + margin-bottom: 10px; } -.changeDefault{ - padding:2px; - outline:none; - background:#f5f8fa; - border: solid 1px #a5acb2; - color: #526972; -} +table.dataTable td { + margin: 0; + padding: 6px; + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #e0dfe3; + -moz-border-radius: 0px; + vertical-align: middle; + background-color: #f3f3f3; +} -.focusField{ - border:solid 1px #526972; - background:#f5f8fa; - color:#2c3c42; -} -.idleField{ - background:#fbfbfb; - color: #526972; - border: solid 1px #a5acb2; -} +table.dataTable td.alt { + margin: 0; + padding: 6px; + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #e0dfe3; + background-color: #fff; + -moz-border-radius: 0px; + vertical-align: middle; +} -.changeAutocomplete{ - padding:2px; - outline:none; - background:#f5f8fa; - border: solid 1px #a5acb2; - color: #526972; -} +table.dataTable th { + margin: 0; + padding: 6px; + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #C9C9C9; + background-color: #CAD7E1; + -moz-border-radius: 0px; + vertical-align: middle; + font-weight: 300; + color: #000; + background: rgba(200, 200, 200, 0.5) url(../images/bg-diagonal-stripes.png) repeat top left !important; + border-bottom: 1px solid #C9C9C9 !important; +} +table.dataTable tr {vertical-align: top;} -.changeDefaultWhite{ - border: solid 1px #a5acb2; - color: #526972; -} +.sidemenu { + background-color: #1b77aa; + width: 120px; + vertical-align: top; + text-align: left; + font-size: 12px; + color: #fff; +} + +.sidemenu a:link { + text-decoration: none; + color: #fff; +} + +.sidemenu a:hover { + text-decoration: none; + color: #ccc; +} + +.sidemenu span.icon{ + display: none; +} + +.sidemenuselected { + padding: 10px; + border-bottom: 1px solid #1b77aa; + background-color: #DAE6EA; + width: 150px !important; +} + +.sidemenuselected:last-child { + border-bottom: 1px solid #DAE6EA ; +} + +.sidemenuunselected { + padding: 10px; + border-bottom: 1px solid #5295ba; + width: 150px !important; +} + +.sidemenuselected a { + color: #1b77aa !important; +} + +.mainContent{ + background-color: #f9fafb; + text-align:left; + vertical-align: top; + border: solid 1px #e0dfe3; +} + +.printContent{ + padding: 24px 24px 24px 24px; + background-color: white; + text-align:left; + background-color: white; + vertical-align: top; +} + + + +table.formTable td { + margin:4px; + padding:4px; +} + +table.formTable tr { + vertical-align:top; +} + + +table.formTable td.alt { + margin:4px; + padding:4px; + background-color:#f0f2f4; +} + + +table.verticalFormTable { + border-width: 0 0 1px 1px; + border-style: solid; + border-color: #e0dfe3; + border-collapse: collapse; + border-spacing: 0; + font-size:90%; +} + +table.verticalFormTable td { + margin: 0; + padding: 3px 3px 3px 3px; + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #e0dfe3; + background-color: white; + -moz-border-radius: 0px; +} + +table.verticalFormTable th { + margin: 0; + padding: 2px 3px 2px 2px; + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #e0dfe3; + background-color: #e5ebef; + -moz-border-radius: 0px; +} + +table.verticalFormTable tr { + vertical-align:top; +} + + +table.verticalFormTable td.complete { + background-color:#f2f5f7; +} + +table.verticalFormTable td.outstanding { + background-color:#fdf2e7; +} + +table.linedFormTable { + border-width: 0 1px 1px 1px; + border-style: solid; + border-color: #e6e5e9; + border-collapse: collapse; + border-spacing: 0; + font-size:90%; +} + +table.linedFormTable td { + margin: 0; + padding: 6px; + border: solid 1px #e6e5e9; + background-color: white; + -moz-border-radius: 0px; +} + + +table.linedFormTable td.bottom { + margin: 0; + padding: 6px; + border: solid 1px #e6e5e9; + background-color: white; + -moz-border-radius: 0px; +} + +table.linedFormTable th { + margin: 0; + padding: 6px; + border: solid 1px #e6e5e9; + background-color: #e9edf0; + -moz-border-radius: 0px; + background: rgba(200, 200, 200, 0.5) url(../images/bg-diagonal-stripes.png) repeat top left !important; +} + +table.linedFormTable tr { + vertical-align:top; +} + +table.linedFormTable tr.lightGrayBackground td { + background-color:#ebebeb; +} + +table.linedFormTable td.outstanding { + background-color:#fdf2e7; +} + +div.formTitle { + width: auto !important; + margin: 0; + padding: 6px; + border-width: 1px 0 0 0; + border-style: solid; + border-color: #e6e5e9; + background-color: #cad7e1; + -moz-border-radius: 0px; + background: rgba(200, 200, 200, 0.5) url(../images/bg-diagonal-stripes.png) repeat top left !important; +} + +span.surroundBoxTitle { + background-color:white; + position:relative; + top:8px; + left:5px; + font-size:110%; +} + +table.surroundBox { + border-width: 1px; + border-style: solid; + border-color: #e6e5e9; + border-collapse: collapse; + border-spacing: 0; + font-size:100%; +} + +table.surroundBox td { + margin: 0; + padding: 3px; + background-color: white; + -moz-border-radius: 0px; +} + +table.surroundBox tr { + vertical-align:top; +} + +table.surroundForm { + border-width: 1px 1px 0px 1px; + border-style: solid; + border-color: #e6e5e9; + border-collapse: collapse; + border-spacing: 0; + font-size:100%; +} + +table.surroundForm td { + border-width: 0px 0px 1px 0px; + border-style: solid; + border-color: #e6e5e9; + border-collapse: collapse; + border-spacing: 0; + margin: 0; + padding: 5px; + background-color: white; + -moz-border-radius: 0px; +} + +table.surroundForm tr { + vertical-align:top; +} + +table.borderedFormTable { + border-width: 0; + border-style: solid; + border-color: #5295ba; + border-collapse: collapse; + border-spacing: 0; + font-size:90%; +} + +table.borderedFormTable td { + margin:3px; + padding:3px; + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #6195B2; + background-color: #1B77AA; + -moz-border-radius: 0px; +} + +table.borderedFormTable td.alt { + margin:3px; + padding:3px; + border: solid 1px #e0dfe3; + background-color: #f4f8fc; + -moz-border-radius: 0px; +} + +table.borderedFormTable td.searchRow { + margin: 3px; + padding: 10px; + background-color: #1B77AA; + -moz-border-radius: 0px; +} + +table.borderedFormTable td.searchRow label b { + color: #fff; + font-weight: 100; + font-size: 11px; +} + +table.borderedFormTable th { + margin:3px; + padding:3px; + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #e0dfe3; + background-color: white; + -moz-border-radius: 0px; +} + +table.borderedFormTable tr {vertical-align: top;} + +table.borderedHeadTable { + width:947px; + border-width: 0 0 1px 1px; + border-style: solid; + border-color: #e0dfe3; + border-collapse: collapse; + border-spacing: 0; + font-size:110%; + text-align:center; + color:white; +} + +table.borderedHeadTable td { + margin:3px; + padding:3px; + border-width: 0 1px 0 1px; + border-style: solid; + border-color: #b0932c; + background-color: #adc6de; + -moz-border-radius: 0px; +} + +table.borderedHeadTable tr { + vertical-align:middle; +} + +table.noBorder td { border:0; } + +table.smallPadding td { + padding:1px; +} + +table.noMargin { border:0px;margin:0px; padding:0px;text-align:center; } +table.noMargin tr { border:0px;margin:0px; padding:0px; vertical-align:center; } +table.noMargin td { border:0px;margin:0px; padding:0px; } + + +.formText {font-weight:bold;} + + +div.thickboxDiv{display:none;} + +table.thickboxTable{ + padding:6px; + text-decoration: none; + color: #2c3c42; + font-family: "arial"; + font-size: 8pt; + font-weight: heavy; +} + +table.thickboxTable td{ + padding:1px; +} + +.smallText{font-size:small;} + +.infoText{font-size:small;font-weight:normal; color:gray} +.span_CancellationNumber{font-size:small;font-weight:normal; color:gray} +.span_CurrentQueue{font-size:small;font-weight:normal; color:gray} + +table.noBorderTable {padding:0px; width:100%; border-style:none;} +table.noBorderTable td {padding:0px; border-style:none; vertical-align:middle;} +table.noBorderTable td.alt {padding:0px; border-style:none; vertical-align:middle;background-color: #f5f8fa;} + +ul li { margin-left: 1.5em;} + +a.dp-choose-date { + float: left; + width: 16px; + height: 16px; + padding: 0; + margin: 0px 3px 0; + display: block; + text-indent: -2000px; + overflow: hidden; + background: url('../images/calendar.gif') no-repeat; +} +a.dp-choose-date.dp-disabled { + background-position: 0 -20px; + cursor: default; +} +/* makes the input field shorter once the date picker code + * has run (to allow space for the calendar icon + */ +input.dp-applied { + width: 140px; + float: left; +} + +.adminAddInput{margin-top:5px;} +.licenseAddInput{margin-top:5px;margin-bottom;5px;} + + + +.changeInput{ + padding:1px; + outline:none; +} + +select.changeSelect{ + padding:0px; +} + +select option.changeSelect{ + padding:0px; +} + +.changeDefault{ + padding:2px; + outline:none; + background:#f5f8fa; + border: solid 1px #a5acb2; + color: #526972; +} + +.focusField{ + border:solid 1px #526972; + background:#f5f8fa; + color:#2c3c42; +} +.idleField{ + background:#fbfbfb; + color: #526972; + border: solid 1px #a5acb2; +} + +.changeAutocomplete{ + padding:2px; + outline:none; + background:#f5f8fa; + border: solid 1px #a5acb2; + color: #526972; +} + + +.changeDefaultWhite{ + border: solid 1px #a5acb2; + color: #526972; +} + +/*--- Additional Custom CSS ---*/ + +.titleTable { + height: 120px; + margin-bottom: 25px; +} + +.titleTable td { + height: 40px !important; + padding-top: 20px !important; +} + +.titleTable td a { + padding-left: 0px; +} + +.titleTable ul.tabs { + padding-right: 15px; +} + +.titleTable tr:first-child td div { + padding-right: 20px; +} + +.titleTable tr:first-child td div a:hover { + color: #ccc; +} + +#menu-end { + display: none; +} + +.noBorder > tbody > tr > td:nth-child(1) { + width: 100px !important; + padding-bottom: 20px; + padding-left: 20px; +} + +a.newSearch:hover { + color: #ccc; +} + +a#showMoreOptions:hover { + color: #ccc; +} + +#hideShowOptions { + padding: 10px; +} + +#div_searchName { + margin-left: 0 !important; + margin-top: 6px; +} + +#div_searchISBNOrISSN { + margin-left: 0 !important; + margin-top: 6px; +} + +#div_searchFund { + margin-left: 0 !important; + margin-top: 6px; +} + +#div_searchID { + margin-left: 0 !important; + margin-top: 6px; +} + +#div_searchResourceNote { + margin-left: 0 !important; + margin-top: 6px; +} + +.searchButton { + text-transform: uppercase; +} + +#searchResourceIDButton { + text-transform: uppercase; +} + +#searchCreateDateEnd { + margin-left: 7px; + margin-bottom: 10px; +} + +img[src*="menu-bar.gif"] { + display: none; +} + +img[src*="arrowup.png"] { + padding-left: 6px; +} + +.noBorderTable td { + vertical-align: middle !important; +} + +/*--- Table Column Widths ---*/ + +table.dataTable th:nth-of-type(1) { + min-width: 36px; +} + +table.dataTable th:nth-of-type(2) { + min-width: 250px; +} + +table.dataTable th:nth-of-type(3) { + min-width: 68px; +} + +table.dataTable th:nth-of-type(4) { + min-width: 100px; +} + +table.dataTable th:nth-of-type(5) { + min-width: 120px; +} + +table.dataTable th:nth-of-type(6) { + min-width: 68px; +} + +/*-----*/ + +#div_searchResults { + padding: 20px; + padding: 20px; +} + +#div_searchResults > span:nth-child(2) { + padding-right: 20px; +} + +a.setPage:hover { + text-decoration: none; + color: #ccc; +} + +.noBorderTable tr td { + background: none; +} + +/*--- Links with Icons ---*/ + +a.newSearch:before { + font-family: FontAwesome; + content: "\f00e"; + font-size: 11px; + margin-right: 3px; +} + +a.newSearch { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.newSearch:hover { + color: #ccc; +} + +a#logout:before { + font-family: FontAwesome; + content: "\f007"; + font-size: 11px; + margin-right: 3px; +} + +a#logout { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; + position: relative; + top: 4px; + left: -4px; +} + +a#logout:hover { + color: #ccc; +} + +a#showMoreOptions:before { + font-family: FontAwesome; + content: "\f055"; + font-size: 11px; + margin-right: 3px; +} + +a#showMoreOptions { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a#showMoreOptions:hover { + color: #ccc; +} + +#print-view a:before { + font-family: FontAwesome; + content: "\f02f"; + font-size: 11px; + margin-right: 3px; +} + +#print-view a { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +#print-view a:hover { + color: #ccc; +} + +/*--- Resources Side Menu Icons ---*/ + +a.showProduct:before { + font-family: FontAwesome; + content: "\f02d"; + font-size: 11px; + margin-right: 5px; +} + +a.showProduct { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showProduct:hover { + color: #ccc; +} + +a.showAcquisitions:before { + font-family: FontAwesome; + content: "\f12e"; + font-size: 11px; + margin-right: 5px; +} + +a.showAcquisitions { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showAcquisitions:hover { + color: #ccc; +} + +a.showAccess:before { + font-family: FontAwesome; + content: "\f13e"; + font-size: 11px; + margin-right: 5px; +} + +a.showAccess { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showAccess:hover { + color: #ccc; +} + +a.showCataloging:before { + font-family: FontAwesome; + content: "\f00b"; + font-size: 11px; + margin-right: 5px; +} + +a.showCataloging { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showCataloging:hover { + color: #ccc; +} + +a.showContacts:before { + font-family: FontAwesome; + content: "\f234"; + font-size: 11px; + margin-right: 5px; +} + +a.showContacts { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showContacts:hover { + color: #ccc; +} + +a.showAttachments:before { + font-family: FontAwesome; + content: "\f0c6"; + font-size: 11px; + margin-right: 5px; +} + +a.showAttachments { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showAttachments:hover { + color: #ccc; +} + +a.showRouting:before { + font-family: FontAwesome; + content: "\f064"; + font-size: 11px; + margin-right: 5px; +} + +a.showRouting { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showRouting:hover { + color: #ccc; +} + + +/*-- Add New Platform SUSHI ---*/ + +a#uploadDocument:before { + font-family: FontAwesome; + content: "\f0fe"; + font-size: 12px; + margin-right: 5px; +} + +a#uploadDocument { + text-decoration: none; + text-transform: capitalize; + font-size: 13px; + color: #1b77aa; +} + +a#uploadDocument:hover { + color: #ccc; +} + +/*---------------*/ + +td.searchRow > b { + color: #fff; + font-weight: normal; + position: relative; + top: 6px; +} + +td.searchRow input, +td.searchRow select, +td.searchRow multiple, +td.searchRow textarea { + margin-top: 5px; +} + +#div_additionalSearch > table > tbody > tr:nth-child(3) > td a.dp-choose-date { + margin-top: 5px; +} + +#span_resourceName { + padding: 25px 20px; + padding-top: 0; +} + +.span_AttachmentNumber { + color: #FFF654; + margin-left: 0px !important; +} + +.sidemenuselected .span_AttachmentNumber { + color: #666672; +} + +.resource_tab_content { + width: 630px !important; +} + +.sidemenu { + width: 170px; + float: left; + margin-right: 20px; +} + +.mainContent { + width: 100%; + padding: 20px; +} + +.linedFormTable { + width: 430px !important; +} + +.rightPanel { + text-align: left; +} + +div.rightPanelLink { + margin: 0; + font-size: 12px; +} + +div.rightPanelHeader { + color: #1B76A9; + margin-bottom: 5px; +} + +=#title-search { + padding: 20px; + padding-top: 0; +} + +input[type="button"]:hover { + cursor: pointer; +} + +table.surroundBox table.noBorder { + margin: 15px !important; +} + +#resourcePromptForm table.noBorderTable input { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; +} + +/*--- My Queue Page Side Menu ---*/ + +a#OutstandingTasks:before { + font-family: FontAwesome; + content: "\f192"; + font-size: 11px; + margin-right: 5px; +} + +a#OutstandingTasks { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a#OutstandingTasks:hover { + color: #ccc; +} + +a#SavedRequests:before { + font-family: FontAwesome; + content: "\f0fe"; + font-size: 11px; + margin-right: 5px; +} + +a#SavedRequests { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a#SavedRequests:hover { + color: #ccc; +} + +a#SubmittedRequests:before { + font-family: FontAwesome; + content: "\f045"; + font-size: 11px; + margin-right: 5px; +} + +a#SubmittedRequests { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a#SubmittedRequests:hover { + color: #ccc; +} + +.span_OutstandingTasksNumber { + color: #FFF654; + font-size: 85%; + margin-left: 15px !important; +} + +.span_SubmittedRequestsNumber { + color: #FFF654; + font-size: 85%; + margin-left: 15px !important; +} + +.span_SavedRequestsNumber { + color: #FFF654; + font-size: 85%; + margin-left: 15px !important; +} + +.selected .span_OutstandingTasksNumber { + color: #666672; + font-size: 85%; + margin-left: 15px !important; +} + +.selected .span_SubmittedRequestsNumber { + color: #666672; + font-size: 85%; + margin-left: 15px !important; +} + +.selected .span_SavedRequestsNumber { + color: #666672; + font-size: 85%; + margin-left: 15px !important; +} + +#print-view a.helpfulLink { + text-decoration: underline !important; +} + +a.helpfulLink { + text-decoration: underline !important; +} + +.headerTable #form1 b { + float: left; + margin-bottom: 5px; + width: 100%; +} + +.headerTable .bigBlueText { + margin-bottom: 10px; + width: 100%; +} + +.headerTable input#submitFile { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + cursor: pointer; +} + +.headerTable input#submitFile:hover { + cursor: pointer; + background: #999; +} + +#import-file { + width: 450px; +} + +input#submitPlatformForm { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + cursor: pointer; +} + +input#submitPlatformForm:hover { + cursor: pointer; + background: #999; +} + +.noBorderTable input#cancel-button { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + cursor: pointer; + float: left; +} + +.noBorderTable input#cancel-button:hover { + cursor: pointer; + background: #999; +} + +#title-sushi { + margin: 0; + padding: 6px; + border-width: 1px 1px 0 0; + border-style: solid; + border-color: #C9C9C9; + background-color: #CAD7E1; + -moz-border-radius: 0px; + vertical-align: middle; + font-weight: 300; + color: #000; + background: rgba(200, 200, 200, 0.5) url(../images/bg-diagonal-stripes.png) repeat top left !important; + border-bottom: 1px solid #C9C9C9 !important; +} + +#TB_ajaxContent { + height: auto !important; +} + +#div_addPlatformForm .thickboxTable { + width: 100% !important; +} + +a#usage-reports { + position: relative; + top: -9px; +} diff --git a/images/add.gif b/images/add.gif new file mode 100644 index 0000000000000000000000000000000000000000..1eacfbdf52f7f874ad0ee47f47e375202d6cfa9e GIT binary patch literal 180 zcmV;l089TzNk%w1VI=?%0J8u9bfLoE=hSfGwa$dA$h*(qPmQ)>m%OgW z*`dDF)8Oj=|Nk3ysQ>@~A^8LV00000EC2ui03`qr000DG(8)=wy*TU5yZ>Nl8G~Rg z426mkLlkE^ts*iQ!Q3=Ky6ipH;@}u09DoKuKwu=7P1XS5P!Jb62MQ~pfegD{iK}Ih iy&v<0QFt<)%6G_Sk`!{k2E(`8v;KgAf`fz;5db^GMo{1Y literal 0 HcmV?d00001 diff --git a/images/arrowdown.png b/images/arrowdown.png new file mode 100644 index 0000000000000000000000000000000000000000..6b3a006660c8e0c96e98f5e98820256224013c5e GIT binary patch literal 184 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 MzxkXG$^iiYJGBM&y#N3J literal 0 HcmV?d00001 diff --git a/images/back-header.jpg b/images/back-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ca4142673918c36473be806f3d5dda87449e0a5 GIT binary patch literal 328 zcmex=7m;9+J2n$0Z8V9&4}YAWNLMT-|tU|?YWe-i)> C10TWw literal 0 HcmV?d00001 diff --git a/images/bg-diagonal-stripes.png b/images/bg-diagonal-stripes.png new file mode 100644 index 0000000000000000000000000000000000000000..e94c385caa72860a15b4c0fcc64d511332fc9ed7 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5XDm+~rLn>}1r8%%3ayY|rWPhd#A6rZSYl!glLrN!oTnpLE zWb_tvSqKaKclsn`v|yTr*Aauu0Wx|gU7ZVmEmg|u>R+~K;)Jdv1raWyg#i(N*^}%P z{`IN3136m1+LXVoRJEJcW2dX00o}mh>FVdQ I&MBb@0DFr_TmS$7 literal 0 HcmV?d00001 diff --git a/images/bg-gray-texture.jpg b/images/bg-gray-texture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ef0afea753467848066e42ed791927baebe5bd9a GIT binary patch literal 44031 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 yc0mc^Oc(J`DDai_-mXaiA+3MEJ;j* z`M$rizfVhDv%ovhn?|E8NKTTaQ)fN(hR^e)sOQu@4Rz2-c_z7@P?09sfYIVnA_rq6 z>)>209fMIzeh(H+qq!S3%1km-kpdxvjt#qX*k+xcLepr`v1UDtPkq37c8C zF=W<)3^O7Ijh@sHIKyQT&LIj&36qNSRSG)2Lh;%#Zk#C;RWiT~>j99>0dzW7UN5zc zWIFcWFy5$bR9f^Hkd7IN0s}(zLlrU$rfT==j$DdVG|*auhH46|l@UmR4#UZ0nS@Dw zVWS!p5{s}LF)D&tFoz4X_#hu)pi10;XAqxdTA&Z}bidisM zC}P1Xlou&dp?nYqnKO9w|1BOs1qHY!2{8N;nNVI z^uJwM$xyeTaqk{suH-cAlXI7RlHSp`x|p@38v3j}yk_#la?xZ|ujzYp=hKn?v+HtB z`EEBaAKlTvrzrNt=#I4$hi{BGg(^-!C_g!|h9cFMLg@;M{6g9qqOjOX3akr;JvzOD zsvEvKQKk#UI=mVlFTUs#Gq=jlN_#LBTDP`l%Du46XZS$S>B^;1O?!SY1xqMmIy=3Y}9=Upt5n#$&fcMKTW`F9e3e)ja78vL`@RXY&;^pNdwYhTI; zi&2xMcYN`!UAxmhQp8#xPsahM}Iq_n?Qi-=x03t2+oU+WgoNnF|zkH?;cfvAunBmUpn~sJvLKlpYOh#5f4+$T|UbHQM@#cb&A4e&qT;1obVZkurJo`{(Ml ztnp)AT3(>v$@1e5%3tidwJ6C$yZFAd`pfHuJ1wx$0Zwm9Dm=WA-hXh_?|K|jRo$iH z&^ybFT@jz}y(=Abi}8ppy*9i9&uw%E5^_wOCra6LN%8QCRqY3!CCt^xVnfK9No|oc zF*TnZ@CSiCPrPbe8CdMcuU{hw4O!YI5m)Va@9Rw~hn5T04HsB_hCz{AQ(06tug>59 z=?e4NfqqYApFlr>@5wPB zYPow*Y+UhgTc4@gUi^66*yaQ;P7r&WLHD}m+NLi{U(lnyG^ZE7?bhBMsPC!is9GwW zwi0$Dez8C7Xz!Y@gW0tsVJ&@?wKrwN&!@en78F{i6Ji#H(%b%2`Ns{VAKkj+EWPm% zEZQ?9zHp_yx^iVQw?6dqWQyrg|F6_HR!eiIT|Mu&C2!}%ao6uUS)M98nviY%54X`k A$^ZZW literal 0 HcmV?d00001 diff --git a/images/change/coral-change.gif b/images/change/coral-change.gif index 6953e6f4bced1c1b7af32c772e538d6b6bcd10db..67ba1b9d963b4ad0813da8a46f638534077ef24c 100644 GIT binary patch literal 1119 zcmcJM{WIGK0EfTiMdBq*x-e&@;V3q`bTcvSwnSBjy|pX5vr@J0o43*| z-hw8?OJX#MsQ0LsAQ2^wYrRCzTbfXHL>Mhfm2BPru+I z01D)f#tlYMw^qOOcRWv#BI^AzyVbb9we{+C0KH*g@_FZDeciwmQ>HnRDs@h+aY?Hg zTUg8QdNT5CH6XL);J}Q#Av=0Qwz2(sZguklzsKuV9RZa7RMEp#Xy?~91MkR>rqx_3 zRpoSQ%loE%!1}O4MY42|+x5gdT{3Jiea5U6sHZ%Czkhc5dzN;pvUp z9a{O=GtE=ud46{&w=+pPcu}BqPZOVF%Wu|dst0wm#uoQ{*#lPlbe^%EhsFy%i|Z92ujP!D}}#FS3y~lqnlJK!I255KLQ&1qVifWl@0Ekg4_P zIEPFm1fqu_tf@MEl}?Fv^b^jur>snmIt4*p96i6NRYb;+0Xme?fmyezI|3m=mA3c? zh_a5;rk}%;HBhGTL*L^}oF7;rx@OUo4^76+fHbQ$8Ywx77QqD2iSI;81R#VC<@oV% zVhxSTVTTQzuywrWjl@C|nv390QFw3z6GBH@W6elcO8Phjg10-2+aXiF=R*+ir#1=s zU{{K3ape`Frb3B_K%w||4WPx%NSmX_N48{N14tDA<77iZrIRy4)%IeL#q*$&!F-V= z3)P+?_*QGg5pHn zNvo0HD5+-9ibzEHa_M$19CRP1B35|@PCPXiiE%>5|6AzOucul2P?Y39?3TX$bs3K* zy6IvG+Oy-)sd3@BYQ`f4K}&-vONNR$5e`_+SD9&GLfkcQSB4F+gaQ_J78T*{3VKf67kddc?qpC%!(%d2)3E=Fsd*&igVh#o%#~I7X8cNk%w1VTAw`0Oo%HTj;_h8*ag&{+ikF|Rxx%2S zud=+wu)D)sX>pI6p{umIj+vpYxx$g0qF-!sPhMrZ!N)mBPK=nKUTbomsIFXUaX3g$ zw7J6PDNB&bb*Msz{Y2FeBkEn#?I74Q(2aytDL8;)7s$C*xp1_TDrx~LsMDN z+~vH)$lKuJ+~n$Lc71Ahe$ds>`TP9*{r=bE?*IS)A^8LW004ggEC2ui z0EGY)000O7fO>+1goTEOh>41ejE#l$Dm3n3xVgH!yuH4^z`?&>!gj{T$jQevFUro((9zP*%+S@-(@WUKblu+H zSyE&;I8NOIIp6B*?CtD017+S<18nZ!=bW!-o(f zLX0xN$G|fcB@$#Pk)y_s0|S5@_@<;ulTEaoG&!Jxf&(NE+fAw;cQx_0rp&G2D@+8Yucd_JdTVa7?kT6a{EM$I4}la0nVFw9P`1q-_G8H=gButiVH*7zumA)qxUm5M20*}}hX5=v zK!_tI=pce8nrNVe2At5}i!k2tB8D6A(4QPQ=9ps)An2Im01V&=q#Ra&z{Ld`2pOdR z97ArfB$9GmP=b#-YQO*!1Ax$@1{cT?Lzi+eutAsu{1_yZQ6|Y`kUUc9=9_ZdK_!-G zPzlGKc;dN&2PWW|z?}p92}huVngNFq9RMmQp*DyBM*<}z+5(?4M1#nCesiKd1&?y|2UTUkYKisNo0KE3<>k%Tb&_DwS@H#*Q z#v+S=2O=opL9xds8^8<*5NkvOydFUT1;qLqKm*7|Q0%wku1Y}F!J(MTt)^wLZ#J;&2fM=kZ#R99{F)mUdeH33|A?RD1$d@c6a1o%e8eON* diff --git a/images/change/coral-licensing.gif b/images/change/coral-licensing.gif index 8503045ab51f55d8dd50335857e482922e2cf3f9..6c2f48353a5240566a398e94acf09244cff816ba 100644 GIT binary patch literal 2032 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 DoT?UP literal 0 HcmV?d00001 diff --git a/images/change/coral-main.gif b/images/change/coral-main.gif index 793a3c8d0b878f9255940b539ab7a254bac790c6..ef8376e0e08ff269c9aabca0ccf1995d08811850 100644 GIT binary patch literal 1420 zcmZ?wbhEHbtY8pl*v!wc|N4VhpT2InaC_dNi*d6yb#6UgynIjHx`S7qy!!IvSLVX) z_g{aQvggdnyH8i1y!QY9f5rdY5xxNmE{P?HK-$K>q98FjJGDe1DK$Ma&sORE?)^#% znJKnP;ikR@z6H*y8JQkcMXAA6ej&+K*~ykEO7?aNHWgMCxdpkYC5Z|ZxjA{oRu#5N zi7EL>sa8NXNLXJ<0j#7X+g8aDB%uJZ(>cE=Rl!uxR5#hc$WX!DQqR!T#M01EN5ROz z&{*HlK;Otx*U-?)#N5izOaTg%fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj%k|2Q_413- z^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5FD$Tv3bRMVDIQ9=jZBIBo^o!>KTB%1XJkii(hGOE?jkSNl+@ny;uz{4yi0i)elN7 z&Mz%WP6aAg23b{L*(J3ovn(~mttdZN0qke1Ox$j9#%Uf@ZwhX= zxZu>Q4|I$^C}xpj8YToxJ|HGM-2yrAl%JXhOzuU%bj|qx-`_vKfBpRN{oB_spFe&4 z@c!M~H?Lp4eDVC*(TITuzuazHLF*xT(NxF(j|)*EnF~v-rPB}XU&{3ecIG1 zlP67_(BIeF)7{nC(caeD(%jV8P+wPDQ(aYAQC?PBQe0G6ke`>Elbw~Bk)D>ClAM&7 z5FZyC6CD*95gryA5*!p5;P2<_Vr&G=PT0Sg%1Vj~@^Z2=(o&KV;$osA!a{-q{CvDT++3U->};$o%uI|742nNlfFwVI z4g(N?3K#~K{~u0zuHI|$`t0ui2^xJVne#GMt;>16uR!N~N$&j}TpCk@6WR`>9atg5 zVtHqsqv0P9X4j-m0Sc4N8Ww0U^2}S@_~4gB$Hqtp#~&IB^Q;dgW>v88urnnFNb2wj zak5A8bFx;|lvh>@l?pL2WGFC9@nGa(^k)iA<}YPrnaJrV!pz9b!5`JaJTaAb!J;L7 z{1Yb0Pifk^!Jn^+#bbVh(2Avu95t+*Eo}P_Fdj}_xnR?&IQQ>9$ z?A)#`7lm#gxh#D3n)D40cD@H&r@7Dj{`S~bcAtpCNP&jATZ(+dBnm|RnYR^jzq@-@2O>Q;LOnd{Qcd; z$ou&C>fPU=S!IwqNUd>unoC*U$;^BcB<9%Lh9)-Q(bTqpiM4-;xrB|Ze2L7ZtiqC- zpjBeYpQgv0qpojx@#pF9<>&3-srgvw(_@@$&N3*x5){ zTaK5SI!RBtzQF(g|Nj2|{{R2}{r>*_{r>*{|Nj1~XmixHy8QkA(y_MM(AVM3(b2QH z-p0!0&C!P`IQH@KonUXWgOAs`zqNgb^6Tu_zQe41ejE#S}prxj#hGc6| zC2fQWVnV31w2u>de_1IYgAoo!wZX!MBLISNBu-d=Ll7Z75%83Ee4&m@uNXO2W6KVF;D9DDzAO(9GvZ3!E z5E}{qgVd`zppPHgLDXG$nMCkj3jzFLL<1DO@c;!b{2>Gf6g1F|d|VOY z6(KoX^al^~X~csM1mW=HT{pqF7DN)^M4Al^IhWuc3-Z_r0CWhD;RhsCkR$|9 zXvjqpisa)1KM4UO5JqIN)&mgA5!jGH{FpVIf(elp1Q1&8<6oMeJYazXU$A{CEA6z@R%@*%fdBwIiyAKG diff --git a/images/change/coral-main.png b/images/change/coral-main.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4548e848ac448b297642699a768c22231a4099 GIT binary patch literal 1923 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 literal 1122 zcmV-o1fBawNk%w1VR!%+0Oo%HN^3h?a$a|vS96JKU3OYpeM#~1^7#4rg{fs}kVVne z(`0;H?eXkQa6VFVNJU~qPIEL|enWhhXoZ%1Wr|Bzc}ZJ?J4$Ir{Qdl5giFK8#=Xn6 z_4oE;jY3p)NmF%4nW~gIS~hu(b5L|aw!OGTWEGez;Z%4=)Y;TuflIW&uSsb_O>96~c1UuDba#w!cZ+$B zt$3iWomYZ2ikydRkx*ZVJI>S3P;^MJzo|!SICY;-@bL0dbVG8WMNe%^f~rb^r(bug zKe@uUmZp)~;Mtg_nSz;eny!khzMy-oM|GG&iI41ejE#JXM;LVh%-1ZI6O3`F))*U zFS|OV3SJK(B~319CKm*Fc}pTgLKuZJHkyAhH~OA11|H?8AxOrySPY7U0fQohixn3f zK&;@PgatijI+&5Np^y!NgLdrrBg2mYKblJVq2Z^XA3rl(o-`>4<-V6MLC$!o35Jaq zEn$HCv$ICPeKk}LQh9XI1|Vueq?oA0M1cwwJQTQ)K!5-QOgIpt5u+*58~b9s$RR_< z4VW+gV$_^5;|4((F?h__5$;bnk}zP*h>_zDOBg$Bki@aW8#qBZUcktKqoxfWFmSYV zOV^*G17hB|_))-WmJB}}d~i|$fDtwZ>=nX0TQ1&%Id}-7O$cb(o^t(q8}y>@Al|DCAb2*9z&1a^F}fC?%sKn4j0 z4A4OtCnRDGHrnhKoFFy4utN>{*)Zr0Gmu!NH*po$WnDbfaE)O%gaaTA#o-XsnBhG6 zf(qeIvfy$4+jV`M+6ptP>Q6+@S=kdVbp<$4rD+fK@^){>PHTs)@o}m ohn$ds1U__PKw!p3dk7MA^dRlEu=Ic|w%m5>?YH2Dn@Au4JEGwE&j0`b diff --git a/images/change/coral-organizations.png b/images/change/coral-organizations.png new file mode 100644 index 0000000000000000000000000000000000000000..2e3c8305399091c5afefc946faa88b9919fa9e8e GIT binary patch literal 2228 zcmbVOdsGu=7LNsT)cT^xBH$xLi!7K-CYd}Y5Hw_nfPg$Aue$0a8AyO+VlqI2iU^A0 ziXIT;u?PyXYO5glJe9?0@qr4FMMco9SX~1?8Z4_~x73}e*#6<^A3NvFeD{9e{oQ-N z`#Mt?6}fckWRJ-d3T0|&2ogiCRpje4kxG84V-MBj;!Xr75V3eNk%j6pidc!uFfk=o57bh#t?4U`6O8m`WXzt;b@sBV~&0GzF}rFAk&y7=@$)4Mw0eqb6Nz5E@1FcY1{+ zZQlmyw09yznuz}1sf36qngrKlG%l0NP_Wn_jSn+HE(C+%A{v_oasZG8uwe!W3L(A_ z2%QiBva+(6SsW&=PXRy}h5;5EV6z#d1jAs`5~z`( zHOwE^fM5oNUace4xRz$uh|2K{LPRG$eSZawE+XQiVy)prpvaH`MpOrYOctQg*zfgD z+Cao$zq#>AX@kt9!+;pffM@6xWImGTkAunB{jnjtAnA>8xn4~s1x-hAMTQ2`5}}BQ zPM$E8YNZesU~*U~Kp7~DjWQq*QZVEk1)ss?@Ia1&$Cq>Yig7)k!XpSvDiw>x2p5rp zU@#N}3b-&I;qo{zAL2r+acrp8K%iO$Hf~!@+Wvrr{}3yb=rNSQ^)eh!AFqNa6;9v= z6|SR6Bs8B0RH4?|`9Irp^!~~SrdMZTN~s>#(B1`EsQ!cl0uY7d%4CSa;>lSINB}1@ zyJlR-ZH177+61`i;e0_>IYyUH2gBFoWEe(VF1`PfOAmTVtA*(Y<+ zs1ORpu{RVE%Z&ZcsyfqFu9$Vn1{KtS`}qeF_+w|nVpX)k_7L&iJeREK6W+YPWJQ&k`IdP^G)QCZ z6t^m@=oB*}S3C??IBYC|=XxqVZq1dYyR>C^9B-opeg2WH~xG+Wrw^r*Sf@i*Yy0; z=4%5B1f3A}c&PWueF@uHvzN$qkD|ICb7bb%Y&$V2igGRdtK{!@QX6+44LCAsKs(UZ zyKM4xJP4ljBJGhVFQqS&$0pjS-f()&gpK*f2NvsQ{o<5lb{TLR_8y(}%LJ`{6p{?R z^yu~ZDQo6vwXJf0pVNkYH znp#?0*GyHhw-!O>=grSs>$3ncy(Y$F1KN!~5uI2QLhy4csREBTuT&0^`O|j%l2HFy^Opfim@E?m0 z=^NWGjUfHe=p(S%#yR@keb7T7tzUOx^MjT=-(rsUm5Cz@D{?BVQq!W2klCz%EkXVh z`Ql7R{J!SaZBM5izwXt2xZvXP$Y)5s=u~A>nChOBGnxc1^jqtHD%cWTXPOuz$vo86>t5F&ULQR@4t5@@7IynzPP?`)a(mYvm)A;vM2v{a3+`q} ztaJf2IT+yp==9u!Vz>Ew`f^ITyQC))AOGb@bj}QRZt1cf#|um1Uif}@G@#a15?v?l zPipD*V|d)-W$!6&=q`&3pl6o{S>|P|4s5b*w|4xb&oaP)FlnCeK6BJ?P13a z*}kD7Uf0#ZAKKfBDlVECx~*jzk5{~&Qyh)k>&s7NYs}Q5&+EerN1}aM8)By5joX5F zO>=5~NL#Nhf32(!l_|q^7gFm_JeR%twI#f~$pCaj$(Y-oKC6QJp;2nO9F`s$jZSvOfpNmF*^sJfs9SN)E)o;-3hz4T>J zaerHOp&=)=$@)3Rt$pNxWbakiy*@K+)6z0FuRJu;*YcBpr^<8e_8aXwbFm;VP&5c#k3O&N26;w@Sb1nrC)OdHFQ=jo*z05x1_zdrBXFV_sg} zbZ6HSw~8#kQu)n61roBQz;%U-6!N#+4c+L{VmP!p;b_CfrxRA}_UODit7HAh`n!o^ zDVJgc+RTF)w-U!LCEiYruRkpF|M6u(n0-Y2Zf@8o$oSm&I=ScVXHzI%X1~obyPY%b P{}G|Vkw|0En!Nu3hWwGJ literal 0 HcmV?d00001 diff --git a/images/change/coral-resources.gif b/images/change/coral-resources.gif index e69c256d3e11be756e2f435d8c26c281bf8f75be..ba7b5fb5421de5bfcb47b16b08d8185ec982e0d5 100644 GIT binary patch literal 2511 zcmeHISwK@)8omi(iELpJ5m9dfDk33^ASMz`NT5Imi|8m*86_l9Qq5u#AZT^MAd9uy zpwzJ{EvVyGmY|}LAVSzgQNkjk6h#aWStNvgZ{moZhhg64ZO+5J=Rf!RzW@Kv`R=`6 z1O;p)(8a(KU@R5bbK$o6&4Pz7+K=Uy-Bq>TdfVBf8+p^KJyB3SG&%FLvVM4c@`0vT z-rXa-UYuTBo3HM!`=HI~=o*}yx>?gaIWzOLU)!Ya8JU{R?dbaTZD*raH!?k4+}-<7 z(>ppf`+8`ksH>+*s~eo0&hF@P$SFGTq)|IDRnyj~8Jlby8i}k{Ey*eB9-Tnu7yA?` zueW#EWfy*3@vLz`x3@~g&bsfMCr1~Q5{k+dU46^*6b0&@P4e;&6VnX?x|HX?U3;T$ z92knNYhEc+ydD}u-7Y2;mGf$w!jw_jcuz6?qE(l4_E?Qqk4>Wob>%*c7Iq^lAT~W^^+8aYO(3)PwFm`<%jMx$>G` zty8Z2UT2R_p|ZALcSO~~s8-3|y?4%2yd565ymc?{ohG|O^X!98+R}EhwPW?2lBjBx z^{so9;;O#!sg?PP;i=ipipqG^3yYft5tVgdzT%;#AAi5BMAN^wx^90>gX)9s*4yq@ z-Dt<~_}tta@c;3@-vQ*Dd3Z=DNTZAB`n&HIF`v#jz!HH`to>{*2{oX2hyvM65^9%s z2sVUIWks_C4+~h^4{zPUIDCLXV4}8c27SduF^A7#iRhr1bC4?}ib*IslNZGz>gR@K z3<~@R5gj0*D24~1At#k5V1eGA-e?9Ej{|)Oo;YtW0uJW^;<32(7#tRZC!ldSqL&X5 zw*mY#Q2J~F=00K=E#OlweMCYJ^U4B`q!bS{GxL?fZ}5}s@}lj!Y_qXhWl{HRnf zFC5O_%g@K(i{ee$=(TZ!55=G6H_xT<7%?0cS2WLM{=ua#$TfI@!`Ek~u>|Z`7BfJ= z|1^C+4(H4-tGduuOV}@ zGt*O(6XRo}Bf~?wLG8eY{=VLx_nPjmPW8Kvx9x9UxBb@o>SfD|=I2d~4fU$JXHRRN zJg#|ET~%38t}H8kSn{A)AulStf3M)~o!j}cyxg4ZUvJ&KasApquU@&FmHErh8J8|z z`04yV&i$Bv_Dq`ehtsFNKl$B>)Rg3;947Phv7S9_+bKObAS!pIZ&2amS|?@9`Q()Ri1)y3BDAVf4KsVawJQE zgoISM1NA%S37H?v(%98Yt0MbBEN$GSmx6?@dS#~@8xxS$$#(8e_K~Go*XplWtrNLL zCY=1<5pww)!oI>U!3v-DO&bvlZNzVY7G@?U2Q1D{$PQ?KJgR}&BF&OWXHaDsFmy4@ zt-%!rml_)bj=t^W)^aN!djRP|J_EywWvVNyDHni5vVBWrC;&--nSd*Dq?BYET*Os3 z`^?ien<25zw$yzz6O)WB=GheaeTtdoW>|PyyRkVoEEXm^D+!iZTY_qnQ)JLsX^udG z2Z8z+z{=vt+zJhl27ws?h;VJB3`#R?FhWG`nN6&>^^G)>T{k_s4h~B_ZUsM&08CZ{ zs$NC{peh3xK%xL+Q<_^T6lx*O06I^t35_?YT_c5#m0i!En@0x%M^iPij(lak6tG&Q z&NQ~;tEG~~b^bmXDT}ZznQ_(;*voV%i7!b>mAG9Xf3?W|vUG`uL;`I)weOV~eY`$t z86=%w=u?ineccua&`;(JleU rmmWeqA5fbAbo@-PM-i;C#A4UChybTU>TNQIxW2(^FvVjV8QAnYW=W=! literal 1101 zcmV-T1hV@_Nk%w1VR!%+0Oo%H_TCoMu>=18{p-;L>gLMiy#nOR0@bVnwVMy|^78H3 z4g1~#<1gx7V^4bCQ)C20%4%O0)-pc~y(Nj_Tu>W?&#A>+`a}`{@41ejE#mxco2jao zc`H^VBoeYo6hB~PtGT+20!|MyOAB>rDM={+6e=ceN4w6?e;mt0)|vUCnru51#jL!I5x(HvL#9q z;S+RW#J`J#%27c91Ihp|Zxkqi03nMC8$a6Ixv>M$#6K_paJXd)7x2~|U+?|# zK?eGb2pJ(CXrS7DK|JsP4-8mQ!VE+NZ~zen#DEzC4Cv>bi0WOS0aP~G6oN&6c%a&< z27+lI(*_{MrkjK|S)f{xf{4J|E@~ja#smf!P(=v=^l^ZhR5;+n15w=b;CD8O0Hp;w zfnWiXH+i6eTsQ3r!drhynE(hHfUwx0Q1ZqBc^e$3ixCan5Jmw86cIrHW%}^M5PN)q z3PzwxLIwg4L{LHrMPQ1+3oo4TX{fM1Lck4A1P}op5gc%U3j`4GYOKKWa>5n|Ou@ww TzXq%9vdlK??6c4=8wdb9Xy*d3 diff --git a/images/change/coral-resources.png b/images/change/coral-resources.png new file mode 100644 index 0000000000000000000000000000000000000000..efa34219be97c4105bb33e8ae16d53a0058bd005 GIT binary patch literal 2012 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 diff --git a/images/change/coral-usage.png b/images/change/coral-usage.png new file mode 100644 index 0000000000000000000000000000000000000000..a17c093d677b0992ec070f0beea8736aef534a5e GIT binary patch literal 2225 zcmbVOc~leU7EghIQb1%0OIc!Q5tJ;Gm5D?Pga|@Ffuod)W|B-6A&W`aR1EN35EPEZ z4G%_Lh$fna``}arcO%wUp@OkA0u3)9kpV0NBmguj2ml^fG6|p%0TPi6;sJn3WiSCc zcHzMx)>J|fGnCC)u!V3eoJ6BhGKs|a_;^A*g`iN0i2w+KL=u@uCgTwaygE^?ffDd? zwacOgHmnw?q)LrcA;;=8LVQK6hJ`~s{cr`DlFR+5Sgu|O6cRFG0;D7Y1QJmu)7|U6 zv|1Ai|K-LfrPbkyN|+c5s}->-0g?}q%OV(w-9H=B2_oJwLsU{EDNqbsA&8a1a!ml6 zg+opVLaC4mdcu5A=n3H=5*fl%0jdDcrwAB$8ifu}1atO9! zGzzsup~U+7V%@lqKq}Yq?z$X(xH217N#kH4N2QQq-v^l~{e%Oa07T^rMN~YA&L`oi zo}dWNrwKjrbSlW_douWB5x~GL;D!Hh@Q8?0L|vu)t#TH(kaEVT6j*jo@_lGg ziH@@87IX4W-fVJGF7HUz-ZFVL3OU|cf3Xrhdp9R{I*^2>{|lTjZ}I3#y+iGnO}NzQ z4-QY1_Uw{(<-E|l@?)~L(T2wwd0?bXF6KG=FPp{J-IN`-zf?+39Wgn2vXQ|nE*f*$ zBwpHw-rMu-Sum0a_FIXoEQb!7xdvW7ELzh^4~tUOk|j0$XPm2YNCwNh+#kpB?kxRt zm}q{l-D6)z4smldHX6@uKx~524~em>Hn0Z8GKJtvr#K~E9dj)Jbc*Q3&8|u7>YYTEt zS#prOsUY5A9VRJ&o2++#zt@EpNA~lfl@kUp{Rg8lFZGR@R>-x6o$1VwzL~^>Z`;rIh_nSsr$$|W(aV}%?NOSN zcHikr-sUyij};r&5utpOSH*2$XSG{-Y133Ev%Gn1bxkHbkf)BRxr%9MrKemJ-*nxf zHnRo@`hvo3eVMJs}@1fpWXMFVL_NiOJQ`z$m8p1kG;h$}C(q4c@ z9i~b!%~70Vm)V|W)w0f=1oSp-N^G-PH9J4H^i5KE)(CBm*Rgg((!Oa-t0?qvl>dy{ z&}pE1&Z_LQWsMi!>`orPJyX@W$}D)tHPdsW`n5>|MLApHuf7vVB1fIoPr(yor>%6a@*}ubN<$vw&q(+-N z-^tq=+m`i0OLn$9k@dp*08njAQB1DvwP==7v!5RsXjnSeQM%{oD~G%NF?B~o$Lyu6 zXYKc(H!I&g8rnjzkl#+zO$yr99~t2~;_rh385tkv$dTMZV-kw8YE8eY5S^f4o65!_Vr3VE^!@^Cdn>IhEP^%)X)LXT6e1)BM1vrv2!a|Uh}h)N z_yM8>v4}{}B+6-wS?5jMWj&AFgqNM0d2e=iW{E=l3x|pShiST>Xpo3T864tBH_i(Y z=Yni2J``iDF)kQQMw?M#WEjz2`d^OXwHH!;HCW>W=K=a_fTYZ`Uz6KSj45sHmdpC4{!~ZFDZ_)Nw6_@L6}^%;_Rw~gjT>%md0cfm-;&BM zjF>p<&{OnTV(0rw;k><6ZI1X(E}oHqE zV(3?py;kpRJ@&>KBz9BW6nX8TY;(k~Kiy02_H@V2;qK^x#LydU2dk5Y2Va|~f9O4C zV7U2}2~AaBpYH-4D5mEO4;t=K4DX2jlwAYn+a literal 0 HcmV?d00001 diff --git a/images/login.gif b/images/login.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f55239aa2e4b4d16262c34783efc532f025710f GIT binary patch literal 1487 zcmZ?wbhEHbY-W&S*v!BX7Z-Q_{P~)in)U0~@7lF%`t<3KA3y%~?c33#M{nM|xp?v7 zyu7@wuCBLl-~Rvq-`Cey@jrKjZ-9bJVo4&9wz01$NKDR7Em25HP0!4;ReHaBzmh^` zimg((sjq==fpcm`rbks#YH*cbNODznvSo^ry`6$hg;hmvL2hbEqC!P(PF}H9g{@Lz zN`6wR6_5=Q)>l#hD=EpgRdNJLD1hvA&M!(;Fx4~FO*SwxR4}*HGc+}^G&IyvFfuSS z);BcJH?q_er{{GxPy zLrY6beFGzXBO_g)3fZE`@j@ zx4_pIZg5_)9@s;A$@#hZ6^RAz*Q}aqZU2K(rGI}YQDOPEg7DkpS$tk)? z$%!etCW%IAx=F@qCc36csmbQXMivI9i6$^}u<182Hg+>KGc|QFb+a%ubTx4@v@o?a zcQG|Hwlp^}H8Ftc^~@_SNz6-5h1s16v>U3|1g~Bz=c3falKi5O{QMkPDhSBPFUc>? z$S+WEc2>~vO-#NJFPuMj_RQ&1Cr=zdcJ#>MLkAD+-?w+q?p-@~Y~QwZ%jQiRH>_W`cFpQl zD_1OEwsgtjMGF_qpEq~T>{&BsOrJJ&%H&BCC-nFA_H=i3cC@#(wlp_2Hq_VE)>Kzj zR+N{OmJ}Bi7UbvU=45AOW~8U3rX(jNCd9|Z#zaR&Mudljh6D!%2Kf8=`gnVJdbqo} zx;Q&II@sIU+E`mzT9})eniv}aGpL@fj<%MjhPs-nin5ZTg1nrpjI@-bgt(Zfh_H~L z06!lu4>uPl2Rj=p3o{cV1B2pE76uT|0TG}Ai-G0;hm)SG_gcI@yZe8FMqf(iyo^=r za$fH%&^cd{d%t4c`l=#edn!Nexqtt?=EwTB zBb#zw8a?!uaQ}Jh?c?b!qKC`b`KDAZNH~4C{M8qY9Y69IWZ60SXB5bIZd!73vPST# K7)>Q625SI^w=>)T literal 0 HcmV?d00001 diff --git a/images/menu/menu-admin-on.gif b/images/menu/menu-admin-on.gif index 79c0a94396e318937a0b7d3506c14e18a52fb646..60770590e1276daf6c4effc2e46965e29ae31601 100644 GIT binary patch delta 716 zcmV;-0yF*W1=j|DM@dFFIbl!$C;;XF08*8@)8Ojr@b$aT-;=e@PmQ+q_xd=3u*cZt z-{|jRm%MbL!lAy@ajMDN>hgrE$f3vFuE*J`%-o(;qCOJ$lR#Q-uL?ayVm7@N07R)(BjD6>iPTqGljBb zqQyy(x{bTkwbJ9p-RVP)xa#uvbF0eZ?)4{qt)|J{(d6!;$K0O9+hd``aH+{lle_l% z{7RC$Z>hI3nU|WK zo{OBHqNAasrkbUvs*|a!u8gg(vWKy=wvV^Dw7R^5wY{ppz^1~(qQy%_4GuaJgd0C1 zhyn(Q0RfFl1gMcR7B>|=gCHYHHHQlZ1`mkWw#YLOI3yiQ9~^%UMJk5_2>$KZW+7_; zBt?=DG&F=bg6Mz&0tA#C7_>lu5&;6R2}ocuL4gEHJTB2zKuLg(1tK9^vLgotB@#HS zNJPNEfdfhyEO9tsNkokX6cjKZK&XKTBMFpDa9}7>M=J**!Jq^Kh(!OEAi(xONy;S& zG$I%zVC<3rJxPD&9OMq_Bp4F3TAYB{!Gs~4O7i9{5RuRTjXjqL2#hvq$!%u?Hd>j% zgAx}TL~2q{qFnUL=V3M@ck1RR{S;nRtYJ1X&F`Jf5Q y8hkLOn!P~x@8Q3SDxXz-SM=|@)qg5Ke^CDs6Cf!A9#h~a{vB9If(i~22mm|4pITx7 delta 535 zcmV+y0_gqM2J8iYM@dFFIbk>e69DD_0Em{JEIdMom7b}#z@DqMTWN5Km!FfMsZL#F zaDRu1mYz39O{=%Te2S7dM^1f;lg!xTLsD75&DUjgd!eniwZhE9&e+-I@2a=Ja)5{2 z=J0-tljiO8w!+NXi!&?%Cw;+U4)t=J4n4_1x$1-RJS&=<(p`^5X0B*W>Py@tl$YKa-6C4SzTQ6951Q z|A01vgM@{Khlq)ai;RtqkC2g)lM(`xmxTiX1c#c90xOt^2@wgM0gVzBqJ|I)2LTX+ z5CQ@Os5S=!6}C2&2Z95@xdQ{emj|X1mVyWk1PHh*2nhrW4b`tUpn}uS3j>!3;SC6a z1QEf~6W#1KE0)~vrti#$EPwd<`X2!R03iW7umG?EABF(uIlOP)-*vgON|Y1G)vxwGfb ZphJruT?2;c)2LIcUd_6-YZ!q506QLG2J8R; diff --git a/images/menu/menu-admin-over.gif b/images/menu/menu-admin-over.gif index b423145b0afa54259cdd5967e1b215b10e3beeb7..216d22939dc20c69cd9ef154d8ac6af6dc50303e 100644 GIT binary patch literal 855 zcmZ?wbhEHb3}Db;c*ejGGXLSeS7ri(Z!1w=jG*n`}Qp^F7EN;$LG(Vuc@i& z>gw9Ncki}s+t#mNKViaz>C>n0+O;b`KR-G;Iv^n6&!0axZrlh83fjGU_ly}c8XFt^ z{rwLdIMCeOynXxjjEsz*KYxDw_;JUM9sT|NhYlUuv}sdYTU$v<$>hnCfBpJ(=gyrg zSFW5obt)<mU%q_#;>C+)%a-ljxicpxCoC-N$B!Rd zwrojANC*rJymaYOadB~BVd3rDwWXEIOtUa83N zY{{9>aMQ6#agOt+XSxCtFEI4lc5-m^m}Q>KO=mWX`g!os1V(n7kP9D^Tol>O*ey#g zgdSY5wuzZPZFbm7vu$08u30uJCpeX)983fP7Yj5kZ)W2t=*Vq6c_D>!x?N9H>Jm}s zkQ=H@DlW~O8XTGuk7iDI&&s8f#3D0i%fri^z1B$&lPxFmo|cO-ST<{~!}s?O_jhT{ n53LRV@_zT#dM*33fM@dFFIbk>e69Cl!0PE}PnWn13$jf_-l7*C-o2RUgoubCf&cn&f zovE&(t+B+)%*@f##mmj0tFNxNyQHqO;^XAu;^Tmjm)F|cW_p5La(bt+wQ+-rke;Ks zz{8fKsA+wLy~M|Be}-p!f_jUQtF^h#($v}9-LJU3v%9`0eU6lKg^g8gby;tCVt0RD zb9-%ph;xRGXncf$l9-mIs(Or*QfYFL;U|-g0S$jR022TJ2LC{ra7Zi~kI1BQ$!t2G z(5Q4;2~4lW0f2DSHUk1I@81@?xDy= diff --git a/images/menu/menu-admin.gif b/images/menu/menu-admin.gif index 45727dca398c95d6d886d227564c372ceae0f5cf..60770590e1276daf6c4effc2e46965e29ae31601 100644 GIT binary patch delta 721 zcmV;?0xtc!2G<6EM@dFFIbl!$C;;XF08*8@)8Ojr@b$aT-;=e@PmQ+q_xd=3u*cZt z-{|jRm%MbL!lAy@ajMDN>hgrE$f3vFuE*J`%-o(;qCOJ$lR#Q-uL?ayVm7@N07R)(BjD6>iPTqGljBb zqQyy(x{bTkwbJ9p-RVP)xa#uvbF0eZ?)4{qt)|J{(d6!;$K0O9+hd``aH+{lle_l% z{7RC$Z>hc{wtFDZ#ud;`+v$l`7xwN{xgSEY?zrd!#!=lAYMhy-+ z6NDQ-B8UP8i2(tPN(88pG8Q)#J%b=4N;QWI1_lp^*S5$r5I7_qOCKD64n-=50|@@@ z*k&PX03=0{5i~S}ID+Va0RjY+92m4ffD!=$un9r2qOuUOmJW*Qb#KXA;F*o1BgWbmLS0P zKuO9a2{a-YBw*~406j^6<{ab>>LeHvv|5~i*};S%oJ#WMEfA5=0F6DD2ndWeX~}J8 z12$Tj!GjVP8$<}<5yM9z1~vydWYAT?psj)f4`!QIsW!HXVMS`J#0HTi8c0B(5Ta0m zr-KFvaENVz$v6%Nl$zrkcG#_wV7qiYlK~eOL7FyVZXxKYvjF5fdOO10GZ0C;lB+NP-Fu5(of0 D{XtrI delta 738 zcmV<80v-L=2D%1+M@dFFIbk>e69DD_0ORZQ@%8!b^7t$~LXVrFU2Ab$YH^O4p^BHE zUTbn+Y;ug4pj>Kkm7k=dtFSppPE%lJt+l(n#K^L|#pLPjk({E2k(aNxyf{csUu|=N zj+J?Zi)(m(z{ko`U}m?##(am2lbxfWsjs50w?tD}v%0;1w7ig`u6$z`TP9-{{H*?{oLm9+U4;4{r=wQ@!90> z*W>Qkv$O-ayGl&Ezpz!p!^FZMJ0QivO9RTzIWW%B z!U5IR*8vm{4g(a{6b%g*1Jw=^F5&@A4Gz^3?E&Tz>Dbo-_kZ~L0wNm%Lm~JeScm{& zz`YC*Hbi(}LE!@t0zzasC~)Blefg+p+{lrNhYwVsc+l9wiN+5DG%Dbrk|h-d6{u8D zpz?^ym>oAp*~znKj{yV-AQ>8WpP4o;?9*-O5#ih6!L# zXaI1afYu2Ew0{;jpq4FwwPcsgzI6+iE7vJ_^XkQ*BCin)Q*>akF-6D#ybKl~Ry-x~ zlm!eHOV+Dbisj3fM;O2igvAIcK1jSkFu<|_1g23-IV}aj=GCfMW5%qdw(Z-vbL-yC zySJ7tz=I1PPQ1ABi-vmhSeamAZ7H!qedD_4oRrzSK{Rw%_RQ zVwb$G$Jvv$&Nzaw@%H-u{{J0!s`B^xCVZ{x^7rZT_x=9+|@e z$lbHi;&!de{QdqXey-*3^_aof9CxXEu+6vB41ejE#Uxqq^qv0t*^4Bv9q?E zwYR#Jxx2oOy}!bV!NbOc#mC0Ug&s&jP0F&&ge(|NIuD2gPTk%E1OQLrjQ|0v1C!K) zHZo2iA=^#|iR6stf2juNlIu@NGfrR(kw*`ay+!y=C4?lYga#ESocy@Z;}ExkgvgOg zfS?k&~9=GYsR}Uz{#P5JWJLr zwo#1_E0_==VI+nG2_hoTn@p4~14SYCCFHF4317d23Iv`_8rY)@-d>=X;6$en*%$|@ zWl$g~0|ZG6f90;bkF%4ZC$&1^nqV~C!j5=2Slqrj-li!ydXV~v~Kh~p(X?#PRezXSpR0XtB}tHl5S delta 659 zcmV;E0&M-42do8uM@dFFIbm1;69Cl!0I9aXhn1d)mY%@P*UZ@CTWN5UpsA|2z@{hfZB&iI$$Lx52Er!nMN8LsMBpQdv)4Wr>%cxWvsjM@?mPdz7K7!_L^Y z!pxzqwztE~)7|B-y25dPhh}tqI7d#cxx#XQh?SzMlcA|F&)ekA+T*Ud!dhu?EIdNn z=J49(@7Uz-+2rrs=kVR<@!#n2=kE33>GI<1^Vj3w$000L6z?yJK zEE1{RrqY&9ti3kntp zu@-=97XS-pH3%sHe+UdhYbgj23k(3OSYTp+q+e;YLMZ`6hbb4-+OF1XnFJ~W;afGQ zHEVNZyiYCe@9-@u2k-(Z?(;34Vksr?2P)j95Fn7CK7s(>%}ZFY1;ZBh;z^X~qN2r% zE>t+UXs@D17a%@hwCF%Z#epXUq;yfzq6!TfOs;HMvE#^_e->Hj+{u%Lipc~#8>G({Vjvqqspw(Z-jW9Z(^ySMM(z=QMd;6b?Y(i%C|M20%rcIkdLqo&D!tUL>clz|{ z*RNl1*|O#D-@g$N5o_13efaQUKtMoXU|?cm;`i_0&z?Q|^5x5KY#wKSFb*P{1_Y@JY&X;b?eq$x^!vYym=KB6}NBSE-fv6^5jW#b8}f)+4=M5 zPnJuubbS8&`N)wY|NsB@_4Q>Knn3X<3)ta0AQBWO4DA0Kn4FqhTHD$? zI=i}idi(mD`X^1EGId(p#ObqU&zUlF?t+Dj<}X^hY~J#ft9qBLUblMf`b|qWZr(O$ z>-Jq!ckbTTw|D=c&Vz@KwH!Tu>}0EirZDrVO=nt^B^|~1JD45s-eYEAaC+Fwz_{w- zq$|xlrjD$)+V8M;KIwV3lJ)tkDe77`l(w-hY(H^Nsb;x=)1)ViuG~V7F?Sv)<}Xkz zdLp9mV%cK>I|ep0sQ?Crj>e2+d8tPOz|Z|^RAbjXmy z!Qn(B11C={&nBV9#$_BWQ$)-^AMlyNyi;}RuKb5f`0v&|5b&5F;Km@*q#+SW#Enrd%7JNO+MUwoBQB&sVJL9 zWW$AL$EWW#o3vr!AwDU~nuZ1j#_w$WXjp^gZ=oTym)8W^fn$K}v zyur)(=Kx3HVO~iUhh5YD9%Px#boYYU9AzVy2M3zCodg_MjQ=RbXubAuKGCu~BqK3n zRmP5oCh~1B5<50b*zvGKEp5gk6ODBiUERmGa3rf6o!jBrYZlj(+&7hliNP8G*vfbL delta 671 zcmV;Q0$}};2e1WyM@dFFIbm1;69Cl!0DFv*!pO^+rmALog2TzoTylDkoubCf&V7!Q zaf6D)%FLv$vz@7~g_N3`r>umNnV_q$fRLBW(bI>PoUXUK*V@~nt+B<+&3%rQxWL2V z;^WZN)s~~Ec8HJI+uV?zqk4;x+1%aY+9=ccYjrEbzXCOS#Nl4frxX4jc9y?fs&Y(rK)<2lTvANlY0Rle^>w$ z000L6z?^VMEExI%kAb|l7KiT2nbz(CBWrvBhkb`;+$5l z-9*Ep4IcswbV3CJT19s`1^@{H4LJh>fQ|x#lS2)V1wxO50|6CqYXJ)h6cPZdSYTp+q+e;YLIDCqhXEPX+OF1X znFTHb;afSUIcsxdyiG9f@9^&~2=ERB?(;AN6$Jey@CaPEBj8|QL45@S%0r;gAdH4E z?8Tc1Plm;d7%#erfRTX$iyLL2IFa#U1Q!++Fi5#lhDsSHHFoHLk|oTVe=({Vj%brcUwrm3~Z0p|bnuhP+z=I1PPQ18q z6)lV_U+x=+^XJf`OP@}?y7lYWt=rhny}S4C;KPd_Prm&48|c%kU(de1`}gqU%ZDEX F06YDpL9PG* diff --git a/images/menu/menu-fileimport.gif b/images/menu/menu-fileimport.gif index 41190667f617547163c154cf1c184db48646e973..cbf35a95c6b4df4b25e3421e637dfcac66691cef 100644 GIT binary patch delta 790 zcmV+x1L^$p2bTwbM@dFFIbmu5C;;XF0K3oM>hSeamAZ7H!qedD_4oRrzSK{Rw%_RQ zVwb$G$Jvv$&Nzaw@%H-u{{J0!s`B^xCVZ{x^7rZT_x=9+|@e z$lbHi;&!de{QdqXey-*3^_aof9CxXEu+6vBrY8DPGAg?M-P#`Mfgr7ge0ki1{Eiq{J7BL5VwMa$dOBcpc{}w_y82>SReraCk4`( zBe`IZf^Gp?a_eZo8^1{{C^&K8ghmdF-ntnWCoUX=00f>K2%x}FNGB~36o`u8$w_fF z57bmSk6Tl#`xs8b(anMhf`&AI0;u35!5{+#^qig(If(8PeOBWRDqsMCxV;Lvxdp54 zk&6fqQf%nJ;mHleg)XKo3SdFdZgL50#=9`U$)SThOV%v5QH>8Pm=GahB!&bDA|lV5 zOq4AHMIrYkIUZ9xZM5hng7ze3kP#`G-1W5~j<*vJrvy-7G zwL0ONU^Lvqj(9j&-wncuB}a-tr@gVG69mx-C)_=Eq>}*YJn_tUS+~H(qN}jK#mU{|>Q7!}IY>@ZU}n0-&aJh(;O6XqzR1v^sjrx%tZR6FyvEPK z$I3-iTB5GE$kN-dx4hBV-gSbBo~W+M(A3S@w7S_l-r-PRWz^l~c!Y}G=kez5_2B99gij)dB15?d$>+?GzpB@aq$Q1OyE3 z6awoV6lM^35r6>!dIbsKQ^@Yc!3paO;$xtshdy^0*A3Xnu_H$T2s-YFuo2{dA5KV| z2vMRV0s$K%h_FB+#08omP7HV{1c3#T11>~Ba6!bzmk}=9upk0KOOH?o0GLX(DpdhU z4jhmHpu&Nv0yqG$F=gt33RO9O2r!$1ty#2c|33iuAOHqk7*kn10ibrsRIgS8SFJ+0 zu;Ic25*T(+fN!D@kI!Zv8+2>je#d2fqURN^jUEO!yXVeEAjHyQ8zVLcO~6>H-vhSeKxIdUh)c zc&MN*#kv9k)HO&*zut;^@B+r8*g$;)3M(!IxPV_>LX_(OT1Ulz1Qtl301yk|Kk1e8&74+SFJmKvt{*( zS0BFaK7T)H`X09lJ1v?v$W^S0n0=sT!&%4P?H|AWI{Wa=qjz5}J$cu(<-&!>Z|5Do z?Kx@pyRSbF+#Lu-*|ra^{1b|{{~Fk8#Z&lQ{N7Q=8eDq{IzJ`a_au;Nqes) zEjTjmz>T+Ge*FLcU%G51!{7soKUu(z(gBg6IALJ_-{9BO+|t_C-qG3B-P7CGKVjme z$y26In?7Uatl4ws&YQnr;iAP$mM&YqV&$sUYu2utXJ~J*einz6jJTL|JA*G%Govr# zmUeSlF+KrLAFsB(`WQ`j$NYVM+A3dW9PFDb$my=q)`O?3e~7 z7FNTE3;YcG=UOouL`aqjH%a+=aTGZ$Jjt=_LIT%h&&z7pRz>;)C7m5}*cgy+i+Vb-9 Vis038XLoIVeSJgnW-b;6YXGz~IfwuN literal 554 zcmV+_0@eLTNk%w1VL1R30M$7FsIa(%ijY)TTUA(FsIj<^m!7GyxxdQO=kN7wadj~= zGODthShSOHDmKK+oCYJwHI`@AXMcPVV#g zcz%OoWocGeTlM(+g^Q8y^!VxT_0HJhhKrG4WN7R0_L7*MwZ6x0a(4Lo{K3oAVP$9~ zB_-J8?%U?@+U4)rR0|Nj60000000000000000 z00000A^8LW0021vEC2ui0672?000L6z+7%~!x@jrq;kn@GIKJgbV_Z0s@Sa5r0sf* zh-pB8YyrO6uykBLqpNBs`)D>o0)d0^5O@^&IDdLZ009M4aZPhZbqy8`1qylqEdmV* z6(yGzMjQzM0s&HqOaTf4r~-8rhd2owIFt~vEwhw34=s}lQW-A4z`?&01Hml>F2}>g z1TDYK&(6&Q)WyQW88O=1+}a=m+${z%3ga;#EHMTx+UxD?C@m}9^xGmZ`1$(yBm?>_ z3t%{KfDgk77z$FD|6epdrFV1}#pee1Y=f zg$@`zbkIms0*#wEbL!m5v!~BTpEM}c7)rFL(W6L{DqUKG$c?8^qe`7hwW`&tDr{)o s%C)Q4uVBN9wUHyljI(Ids$I*rt=qRkK2VTBx31m0c=PJrt2YP$JO6uyulDx#y1KgA+1cac<9vL4 z&(F_JPEKB4UhVDemzS4sZ*RrL#cFD5+S=Ob>FL+9>7n3(kR^kZXV+}zxq zot;llPqwzUU0q$Co}TaT@6OK7(9qC+etuO|RjH||jg5_C`uh5NdwbsA-n6u|@bK{Y z`T5Am$aZ#iadB~kgoNzu?4hBd*4Ea(zP_ugtINyFkB^Vt-QDEmwX z00;koMuLNcg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~edp`xRtrKYE-sj922t*)LP zK^U)^3MmvB5-x`TMFN8XMFF&jBOnqE8#+TThP}Un!NbIa9TO1?IWiDH7cm=z&%nae zg9sG`JVbv*MJgga6)X#b;?d*)1ndJw0!0Sw4-n)tAPAqnP9ZD^slkq&4+|JFAfVT< zVt`=#dI9KnU_pZ-9X~ceP-I`Q2A)t4S);R$WFir80_PufCLU2f*@RT;Md+TgC(z8EsPa2 e&~l(diylq7wCU5RQ>$Lhy0z=quw%0d1OPibav~)F delta 598 zcmV-c0;&D)1^WemM@dFFIbk^f69DEz0GXz$dyJC8$jigY%zciOfRLA&r>u{iqGo!6 zg_N3ymYlA)yM&XOTylD|yS{OQis9npo2RVT+S|Rv$HmLd(A3qWuCvV1)5grsq_DN3 zt+Ab{u4{jWr?a@0qo|swt-8X+m!+y~fQQ)I+@PzkXM2KL(%9O>%FLgvv7V~0p{=sG z!Nt_t+_b*JbA^q#z{8xWuXc!!;p5}9y}-1+!r9#2;^yb;>+527e^qRCS#Nk=b9)m8y=cho*)P z000Pv2mlQSy+Xgbh5-Nvld+AnhP4S22?r3m0XG5(3l}ff5{4EF0RjM$$&3IH0_Xy@ ze;3C>3l>7u5Aiqi)Itq6(-4v$IsX6y{);dm;0*#f4h}3x;Ksj(4;?lfK(U}efiQGv z+{jVmh7%lb6wo1Kq>c?BbQHLuab-)EF>Z+HNONO~9XNC9#7TmJ&KnGNIB1M0b?fNfiZ-t5~yM)qo-Ea18}GILxR}LBmxAH_oQTf%Yng2{l+SOwdYK z1(3UV^XlEpx3Ay7Kr;9kOt`S&!-x|rUhIR$kH?TBOP)-*vgOM^Yy{cNxwGfbphJru k9c0Lg9;j2RUd_6->({UanaIGSw(Z-vbL-yCdv_oJJ31CA>;M1& diff --git a/images/menu/menu-home.gif b/images/menu/menu-home.gif index 2478b84a7afd3cb4069a644030e3dee4385457ad..3cbb341c0810ad09572b5f53aff43767f6574cb2 100644 GIT binary patch delta 625 zcmV-%0*?K_2JZ!bM@dFFIblu!C;;XF0F$-ObfLmejkck_)b;oJ)8Ojg=ht$+smW}o$oKmEtj*wmXr#uJzt^G1+>yQ3w z+vwBf?tHP%TAab_^Y}N1vxBtI=J58s*XFp@yo|JVxYv9z}W5d`2YX^ z8+NGx0001!B>`xYFaaljA^8LV00000EC2ui08RiX000O7fKGyggoTEOh>41ejE#E~E<~W$uwsB<`+5QBXW)T?CLKR2XwYO| zFa@4GRBSk;P(3Ho5-b>Wz(Bu!Hw85TkbnTq1Dz0rXu<*m1{6V>M@dFFIbk^f69DF00P*$t>hSjM^7t$~LY1GSw7+$!ZtFYJH;WQ|{r=hH@7(6``TP9X41ejE#(gRFRUCl$Dm3n3)<{oSmMZprN9p zq*_u}sHv)}tgWuEuvbz~w6(UhF+a8gL$|)az`;*1QpLu{#YHT~13Adg(9zOTIsn$! z*wzF%*aI8ZCEzZM1QOZu04@Ud_xScD4)_BQ0tzrFph3Zg00;vd zC}@Dh$U+SEd^CXIphUilDFSHR$WfyZ3JgLr7=R$aiW?ev>YVFs8nAPGwf z9djOG!n3DOo*oSN98iD>QJ_K#4B)Ah=~ATzq6+=_GlG+=ShHRgAtUR5fCElcfOR4Q zh?4^YuA)_&w#EPxTAkx!4bY^n-Me*RShzbNL6Zj$>Q+$FB*B2Xh7libVj*yo9(W^j zSVFn7Wy%>wSRSxoNr)g9E@Ys*U;t^;OG;A?L88J45|?8Wu|m7H?c2C>>)y@V3WqGf zg9{%{ytwh>$g@PK!o0aQ^XJf`OP@}?iUus$vuoeZy}S4C;IV9pFr~ct^XSv7U(de1 VpcW^f$e&NYzWw|7^WzT$06SMpl3)M; diff --git a/images/menu/menu-reportingoptions-on.gif b/images/menu/menu-reportingoptions-on.gif index 0c2bf7aa6fde581fce39c9953441afd2fa3e43e0..9601fb45e33812dde813ba0859b46f19858e832c 100644 GIT binary patch delta 994 zcmV<810DRU2+|0DM@dFFIbnkUC;;XF08fp!leNxLmAaw6)YIVV>hSgT_xd=3uws|I z-{|kV&);;R!pGRc#HiolqsK~R?;(oHu(d6!b>+|?0eXXp`;5dl1^Z5Je z^7nnQ&TXg2D}b-lES_vP>P zpT*nK(gBwpG;%rDTHw6G80tOCzI$$7QApiylC|pp0fuaEgXzd&1 z;s}WoQkXa(XmAjMDfT)6z-Nd6fkG!89#W8T)MMAqHF74jPaU>&XYi2d$Jj)N+3z%)(du z?i{v3O)3o1Mt4cYK!UcArg8Y7LPCbxxAP9#drmQD-AtFS$LD-GM&*>94mJc_K9!)< z;lte^&^g520!tAflr)b(@j((3EP=!gQ8Y0SPz4PqTmuOhvQk^bUFFbm_f5v!VjU6^ z(}%-NR}((g{idCPFX?4~MXrB2;sX^m$Pk1OM6@sh5F{OB005v3Rlu(Rg#m!TW{f$O zKmiAocn^5WMKn8CF^afyGX zkebUhrRGP9skoq83ag{QT8pdN)Jg@dwnl?%uFdSq>o&gztBbJ265?yIy&Q||smlth QY_qdM`|GpP!V(AoJBB{?p8x;= delta 947 zcmV;k15EtV2&)KxM@dFFIbm-A69DD_0Ed;HEIdMpmY%7$z*}i>PF-Y^ps7PrS-{QL zo~yNdijs+zp3KW^{a8YH@Oah`Ywly2Z|aPF`evi<7Ll!CPu@thvHw zb$qY7!pG6t!p_*!-R1fF{NwBMpslrkjFgk1srC5#{QdrZi<9K*^XTsNeTtLK+2iN$ z^`ES@x5Lc(`~B_n_;G)SL{nLoqpDhIaNFka+U4)q_g|NoN_0eq7n0TF*8`2+y~08jud00000ZvYbj00;koPlAJlg@%WSiHeJi zjgEpwF)&b%m6n&7nS@6*nx3DanMTHl8N&m!5EO7&=vX0Q4Ij4Z z1>o1Yh!ZOcA|f$CgCi*4*UsID_v8U&BquUG{P^8GGtio*{~lxpg!sHUpw Vs;su^>Z`EES}G4f*Z@T!06T)y$$S6+ diff --git a/images/menu/menu-reportingoptions-over.gif b/images/menu/menu-reportingoptions-over.gif index 7fa87514b9fa31caa5ab201ffa076a68765a3ee1..037161f6a6d5a59d183d98c544608498438c8c1a 100644 GIT binary patch delta 952 zcmV;p14sO_2+at8M@dFFIbnkUC;;XF0B&w>qobqQ+1XN+y05RV?d|RM_V!+0UVMCf zXy1Kfdp`o6ho|l)Ga&mIJySv-l+i!1gQ&Usr<>ln$+9>p#Kc!uS5;M2Y;0`z_xJGd@agI4zP`R=`1ts?wziCnjE;_ujg5_B zVq(e3$+Wbz?(XhnWMtgj+*?~)@9*!4iHXqA(B0kLtgNh5R8&@0R%2shrlzLn=jU*6 za8OWC_4W0orKO~#q|MFEQBhHpl$654!vFvOO-)UcF#%kYKmkpE001HR1ONa4001li z0001k04M+e2mgQrMuUWfhKGoWii?bmj*pOwf{~P!mY0~7lbM{Io}Y=EprfRvj-sZi zs->u_uCJG^u(Pz1wYRv4vbnskyS>1szrn_$ZauG12OA22E6d^j*y1OOoc1`d2WU?5*1 z00smoR8U}nA_4_y?Hi;)1P2@%WIP~fa1eqb_BsK;XGnm6LMI&_VvupxMk60aIGFGt z!^lGCN*X!IE`R}a^j69%BGJf!r3v0)JUWli0hWaXEKrJnP9lMH_wpG(lk^l6fv~aw0ssXV7!gnaK;MjCA(X{x5~U%U zg%2k-LURy4!Sv1rSef7e#0CuEetmc95e6X_IP7q6Apl;2>CnDwV1Uqqt!xJoNQm_$ zgyDl$${cEcxe(^yMv!+7+n}bA1!G3sJ zjxjl9r-KdshHoV3bbQ+l@|;84DX^3PLP_IV1ttX0!4D+p(7`}J6(n464J2U5N^K2y zl|#nWH`#KFX-G&+917Rle*skITXqD#q?Z8}wdTlw2}T5=fCnfLp@Ii9kaUm%0Dv}B z0R$8V0IC9;G3HnT1sovaJ>Ml4(L@Ejq$HDyAs3dB=Ol@hODQ4-myM0E5JChLM8E@^ zY`##TP!MUjmPMqYQ{z+UL=~NN3lwoCApiu5&Y5`@QR7KPeApjVNsal^T1}zJ2n`ds zq^V0sHMDREf2M$%%QT_hM~bMpkXj0=qp(_ws@lYA1gx?~Lu;+g+=}ZqyY{M!ufP(b aYp}fxOYEq}`f6;luQI#qvd+R12mm_>xxkhH delta 994 zcmV<810DR$2(k!&M@dFFIbm-A69DF50GXz$>+9=#jFQ60%f`&k%+b@2oub3Z%$ujI z*V@}=dV-y)u7#AEaf6DWtFOe$%v^GMq^`4~t+B<+&91k*(A3p^j+AG6g4o;KfRLBr z;^Tdem5`pJ;p5|Le}nTwjB&(qb&&CqOshlZA%&C=6@lbW%+zm1!q@$>Ysy1nJ- z>3fZnnWwC=xxL!m-g=9X(bd-2+T6Lp#B_#^>Fn)_n4X%atgE%TV0C_9bbZv?+`Pla zr?It%m!4KHZFQWet&yLkg_WDm($r#ie_nHYRcv)xZ+LBih;xRGXncg0rK*9Fn0kzp zQfYFL@nC-;`2+y~0AK(t00000ZvYbj00;koUxI^#g@%WSiHeJijgEp!Q#@dgm6n&7 znS@YGnx3DanJA&8rKXPo1p^uYr-=|0ss*i%1GKJ<0RmqQ0S%@R28XkP5G4_c1HZfq zxQ@Dl&|eS$0L@350(N0nOvwf(8K;!Unt3-{J8B0^s8C zpr8Rz_eDVh1_m@h_%e`!0AgPXL=Z3l8N&p#6clh+=vX0Q4Ij4Z1>o1Yh!ZOc8X%E@ zhFuI2WDAw5K!Jr{B2ZY_3P1rtF~0;Y7+~Q*oF@q-<;n1;P=eCV4Q01*z|Jq{j#j$D zwX1*E02WXLK*9Auf&*x!TtRSvtAzk-|J!l}8@KBL1YWrk8IjipUbb%GUZH#CZr!;S z3gcCLWr>Xri}On6ilwsU%K)cpY`-VN-@{tZ7Vk^gDrMZ9e=K)|?xq!ie6&NOhG{0cQ0S4|NLRjh5 zzzPWr%^gf|KEcIv=Q6BMZ{oiDcPrtW2guQUf_3udp=X7E{aMGI74f~NpmS9;=-`6^ ztkB>J0c=nO2qzFg00&h_Z~_Yz5a2TY3H4I=4s~*G3e>%pMciMXP|@@3TP2tB&z75 zj5g}%qmV`_>78GHED(a}Dmb&Q^MsT6(s;su^>Z`EED(kGY Q)@rM&NZ_CY7=Zu)JJ2rjHUIzs diff --git a/images/menu/menu-reportingoptions.gif b/images/menu/menu-reportingoptions.gif index ded934cef281468223e8bf1b2569adb77af6c7ea..9601fb45e33812dde813ba0859b46f19858e832c 100644 GIT binary patch literal 1106 zcmc(c`8V4K0KmUNh|UqAd+UfMv_os9d#a+Fk=8ld2t8hFuWh!rTHW4k*0Rzif*?Uu zg4WELkVX!Yx?5>P6BN1DjyWR4Eld!{HhbMavCj{mpFi(?Lc>G+P}hloJ1_$P=kl71 zo(*E@?Nu+-D$T;e>c)m~$1k0aE9sn=Tj>~@NU9P`f7fxP!$hGxgDs1A)G;`@oYkzz zX;ltsm+Sk-L#gef3v1(xhKVHusYU7jkXtJoJ)FvMebC_YQ-jlemT#8e+j^Nmp?%mi zsF>C-8n)chI1K|DzigplYj=LlnASM>O`Ys0o~P2SgcY`*Bnj>?q;-Ac4^1s+iKp*S-=erxKXbgDLDrxfYSa7LUxWZ|_pt zRhv71DW;ZZRyP+6M%~IrMb96~X?=}sG_OPLiRbO@?K$3K0slA1ZL|LpJm2}<6To5* zZxTz)$jl;T=j4(pdHDrYa(W?+UR+X2FM9k-`L7i@WtBCxjQnaQ>nWq2&E=JF_yXah zXDzMSO>LdLj^`p~*Gox7caN-8+WWe&e?U$diuETUoKGuyRqjN@XU?(k!>6)9F>`a^ z_i8L4B*1Lml(G~X1LCUo6CKaFXzzx3p9BL)6LXtX|7(b=NWdK89*4mbszKoRWyfhP zB*z|G>W7H`4w~+<=?@a!$_5B%H@GvFn)oK zJ_5sX{Q9T<1#(bvCd3<)dsd52GOis6jtIU@@UXPXFGsH^ga=~xa2c1XkfzpFpId_A zNr)hE(fa$5Df}kD1OPi=kQg9vf^zjBt>+Gmfqar_>&8U?01bG#J_x?_SOZARtsF7i zJ9@RNP4F?ksA^Jd)@i1yN_#5;kmgs0Z9b$z7ke!v791K%{XO!v_~NeKsW~X>h?O$r zet1t{dNY-oxK)WpXN|NNY(^fOJ$`E}vVVSF51O!7Bwy;}iN>f`qc}JWrXqDmU9=B)^Eb1c z;5B~(AIwE*P4}OWK{KFdgx)65L-4NwpwjxhhzDeX@S>X(RB<54f|hKX+!yQ<4e~m% zU5o3@q)($FaXJ_|n^pXkD{2)WfT5z*nKF-S?ha?*+#7bc=QLXm{?VL!aMPIja0rl5 zUGq^zj3!y>;POxCdF;&>!V578pWr06b{P45otIx?&d*HhlYSq@OlU5vwes>lc8%yV ynLVP80CSo{hzZ<*rM^YqE^{`SFM(+j8lO9nmstJ#*mng2^zNcSDTYCSQ~v@bOz+$z_g^OBga8zPv%hcSy$k1nXd|PR8P+w)j&e(~Q zm^epHbAX7!%F)^0;l|F?x5Lf0!pwk;l=u4ltGB_Rsjr2QmiPJmuDQZSRa(*5-stc4 zQDA18rLDKX#<07?X?A^_r>%U4jDe1oFn=A zQ(0-_m`lgVQzEp^!RRif8goz=I-_C@b=^D z^z`@o_WAqT41ejE#xVgH!yuH4^z`?k4bj8NU#RE4dD=Em&(9zPyU{=dF&eO*y+1lRF zbK&CS;sXhD9s?fa?CtL1J_hYKYvEsRKJRmE>*zxI00C|RK(L@eg60q=ASeR?f(!%` z7|4LYKtUM>5SS<^kz#@-Y!DnY(8OSd0T4S@BxqoO6^jNI0>G%TV9W$HBd$Ei6M%r9 zK!g4q5JA8K4nJdX=#XRu7o!|%M3}JP=Y$OrENu9BlxmC#QiYz`8k8zjsb+@^STIC@ zg{lJou4W}`;cAB!MLTeakVL3o0d3+49!yy9fDnj32v*`kFoXti8iWvB0z;h2f}IRd z+yH~(IFAd1hDt|IZ`EEDr>9^>@e%CxaR6=t-AK=>#a}JA?&ck7He#= zGuUwKvdlIsY_iTqEA6sR*kSFp*k-G3wmlTF?YH2DYi+mUmTT^}H1whFy6m>=?z`~D zEAPDY)@yION9dvNzWny<@4o;CEbzbt7i=)UH2iVL!VEX;@WT*CEb+t?S8TBf#V}-y Kg%*>x diff --git a/images/menu/menu-sushi-on.gif b/images/menu/menu-sushi-on.gif index 91e366777524371c345a650e4d329248802c1fe2..903672f20d0eac1da6f29b5e20c93988dda5515b 100644 GIT binary patch delta 787 zcmV+u1MK|#3f%^OM@dFFIbl-(C;;XF08*8@)8Oj6&)@3s^^>*EPmQ+U=UgsaGZTAaa-yVX>fzlpfhl)u+k zn!wrU@j8jLDu1s!iM2+Mx|P4zQ<%OTcdF9l?s=}w@Adi6%P4-XF@v$wSu4Cw{JSs>*({&X2s+N07R*(c;3|=qrD(b*#%kjJLqq=WC|NLyowDw9lx^-q`2x zmB82e`~8q3yw$_o=r4k>OOv~|)a23Q?R2cmH-@u$uFQC@%>V!Y8+NIYQ5=zA4Uu3C zkzfsxU=5LA4Uu3Ce*gd>`2+v}0000i00000QvfIc00;ko09%8Eg@%WSiHeJijfH}a zk&=^?hme(+nVN%_o1UMGouH$nqNJyrrl_lws;sY#uCTL+vb49HxVp8wy@a;DtiZvj z!-WbL5*oyq#)Aqo6;DH33N8wV1O{4K1_*-#0)+tqgWBBQf8gST>6j$#SFtju0IvXbECy z0k?1k)REj`e^m=saNNRbSqU*#Bq$S%L_tC2Mg^%Hx)2=*sO1~c073`NXZ~P~e0c5eJ9}4B*CG zZvu4R%x%}w{VrgnlzgQ4aD~|sO01g<6fdnF0 Rih`pQ$e}z8=bW4*rn4qp49hDows`Hq4T#( z8oTU#f>&(Wf8)vfDGOI;l-AyS^8WIJw+zGq#sAz9z5xm@i6x0Z+Qz=3ATc>RwL~E) zH9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypu zi3%0DIeEoa6}C!=DfvmMRzNmLSYJs2tfVB{R>=`0p#ZYeIlm}X!Bo#!H`&0@P{GVh z&(Orw%*;?n!N|bSNZ$a6%ybP+tW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}g zyu4hm+*mKaC|%#s($W%ShLMpjP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1 zr6smXK$k+ikXryZHm_I@>>a)2{9OHt!~%UoJp+)JUEg{v+u2}(t{7puX= zA(aKG`a!A1`K3k4sX*n*AgcnUy@&(kzb(T9Bihb;hUJ8 znFkWk1ncniwerj>E=kNwPW5!LRRWr!mzkMj}p`@YGC2&Y-s3e>}2WY=w@hW z>}F|d;A&{;2-EA5pIn-onpXnTn}X2mhEp#nG2|8iZFWg5$}CGwaVyHtRRDY1Die!a zEDSB2jg8H5n+MgKg2gQmy%q*I-J%b4j6Nu8k)j$V1WZ35COqK+Iq;;Png>kpMZkp3 z`2XMEKfizd{PF$U*Ds$xef;qL-P<>>U%h}$>=IY|?mo_rKzE=rmCW>q^KY-Co3Z@B`F~;CMqH&FX#K^#)_>%=(jOc(!P>ICAdRsxEHzjjk#;SG8PV6gKv#Tg~{g<`xcUlQJ zw5k{?2&%TTF5Do&D|BoTOVWg|0iA~&g;v-pELqQTaf*%GgwGy2f-Gy+vmZQS)~py5 zWW|%WKRH~Ti-#jRyS7Y-mnkcwHz%(^pG|;=x4lN0mz52JEqFT+dZrI$3L8eD~4#)0Zb-zrX+SON~$P-+u;XE*Xyv3l26YGB8*J06w_) ANB{r; diff --git a/images/menu/menu-sushi-over.gif b/images/menu/menu-sushi-over.gif index b8353d0fafd51c1e32b7762cdf378a09f808a46b..c425f17e8b0f8260c82251117b4f0c211433a1bd 100644 GIT binary patch delta 731 zcmV<10wn#g4&4TSM@dFFIbl-(C;;XF08*8@+1c5}#l`LI?W3ckZfScH7(AVq#+c{{D!Fh_<%2ySuxSlaq{$jBRag+}zy9$H!h?UZX@f`2+v}0000i00000QvfIc00;ko08N90g@%WSiHeJijfH}ak&=^? zhme(+nVN%_o1UMGouH$nqNJyrrl_lws;sY#uCTL+vb49HxVp8wy@a;DtiZvj!-WbT z7&XM0#)Aq9AW9-l3J?m11O`k@1_*-#0)+tqgWBBQ;NpLT8#5^h{Me*gs%TsNrQyLgV~aY*4ILW>edh+u$Fhyas92^K6g*u*19kpX~7P+)?a1`CJ?4B*CGZvu4R z%x!1V{Vrgnl#mb*;)2;EXYM`0kFRMy{bu)P+0Xx;|EvA}p%>sO01g<6fdnF0ih`pQ N$efHIIYd5}r{o2MqZ1v`C>$dH@boJWpyLVeB&6u@xrWKm^PL;_{r1c^7_8n3+#iUvTIv9r_DKX z^7M}V2a8*KlFI8tb4ufit0VI(GHP0K8#{{IdK)LrsOp*AH+OMRW)Z_s0E+*)BYXoC zToOwXfwYZ%ML}Y6c4~=2Qfhi;o~_dR-TRdkGE;1o!cBb*d<&dYGcrA@ic*8C{6dne zvXd=SlxV%Qmue&kg&dz0$52&wylyQNJ0T* zr*nQ$s)DJWv2L<~p`n7AnVzAEshOFfj)IYap^?4;5Si&3npl~dSs9rtK!Fm_wxX0Y zs~{IQs9ivwtx`rwNr9EVetCJhUb(Seeo?xx^|#0uTKVr7^K zE~&-IMVSR9nfZANAQKal@=Hr>m4GgVcpucqiS6q^qmz?V9Vygr+LoYKk#mddd%-Pkz z%*?>T)!ER{)!50>&C$)!(Adq=)WFry(h;WDB|o_|H#M&WrZ)wl*Bqx_P-4g}0NU)5 zT9jFqn&MWJpQ`}&v{fcw_8kc>eUB2MjsTlNKp+F0;V4j6P|E^9C*@C z%>$zB`;K7M%r?(Lh`uU@`*{_N?K$B!O9xPR~No!hr= z-nf44>XplvE?zi)?(CVz2)%Hf~tIZta@Y zt5&X9zHI4|#fug$m_KjsoY}Kx&X_)J>XgZoCQj(@>+R|8>g;H5Yi((6YHX;ltF5W7 zs;nq4D=jH5DlEv)%gxEo%FIYlOHD~mN=%54i;annii`*k3k?Yl3Jmb~^Y!ue^7L?b zb9Hfca&)k_v$e6dva~QaGc_?bGBnWF)78<|($r8_Q&mw`QdE$ala-N{l9Uh^6BQ8_ z5)|O)%pEcWKW;ZL_LP-x!)|RCnf}(8fqRp(F%a?gD@K2i8$;mG0!Lf~zq2+*w z!a5JeW`+~Zhdr1$w)Zo#wVgeFkYRJnsY3_PU6{C|LsCFt&zXDIJw%vJpL}=r{KbBL z1_6;5cbi4n*|u$AXW-zm@Q7O?WG|!@b7DecgQ&fPNq|P+LS8w6s6QD88Xg^yXYwDxOD4jsmQD{)a+5ogF8znx!5SS&+Q+{A9HT4q2~|7i|mW?HE1=D7Oc2 zD>cZ7T0LeJ;Ff7C+Mp29(7q_4bJ+*SZEGSou^0%bSGNzHlgSNIpH!clWlpw|Ar;*EqC$`}_L`nz`lu{%r43J~3H4{@k9OpPyft J&d$VO4FIWbplSdB diff --git a/images/menu/menu-sushi.gif b/images/menu/menu-sushi.gif index 508a554445dea3bef96b902c536613d6ae59dbd2..903672f20d0eac1da6f29b5e20c93988dda5515b 100644 GIT binary patch delta 775 zcmV+i1Ni*?4&4TSM@dFFIbl-(C;;XF08*8@)8Oj6&)@3s^^>*EPmQ+U=UgsaGZTAaa-yVX>fzlpfhl)u+k zn!wrU@j8jLDu1s!iM2+Mx|P4zQ<%OTcdF9l?s=}w@Adi6%P4-XF@v$wSu4Cw{JSs>*({&X2s+N07R*(c;3|=qrD(b*#%kjJLqq=WC|NLyowDw9lx^-q`2x zmB82e`~8q3yw$_o=r4k>OOv~|)a23Q?R2cmH-@u$uFQC@%>V!Y8+NIaQ2{)YU;!>6j$#SFtju0IvXbECy0k?1k)REkOVpR)P zaNNRbSqU*#Bq$S%L_tC2Mg^%Hx)2=*sO1~c073`NXZ~P~e0c5eJ9}4B*CGZvu4R%x%}w{Vrgn zlzgQ4aD~|sO01g<6fdnF0ih`pQ$ej6)DXXgFlO18I8P-tXDO-prihm8~CMRh~anb0d4xARJ$m%eyY-!5@> zKag8gR$N&dn{xB``6y#6hsu|Nz|)~`+k2bZKZeI%Nxhxh_CX@*>fa7RCe{wM4b4xh z1a*zgojrZkjiPs*{inh&iMt0b#3YACC%1PG6qHpJJ+1Qc31|?u+d44>O&xWjo}9wc zO;!$#;@-0n(JdW)O&xs@jJAF3&&ezF4h(r*@iMoha{E5$jqn5LfxHuUeC+*HR{8pT zR7^~A3WLLYSX^G$CK(v|+WqN^xMxuK;Zxt>u&8UGQQS8^KHebi9T^=P9vQ6@NgCRF zN5{tN+azy9J(&MJR!=DJq}u>yAPP#q21a}?$Z&^Hzy)$;ai~~HULh7>F{#)cdUOJv zYYMrswj4qr`$JX^j6?1WG81cL2pI4wd^VR2p&-C#dvJIZJ{1cxVHb!Zoy)>_EHDW{ z-Kkh(*#;oXX$m6{poi1dW)O%(fJDL(*Xxl;L@hvvK-9q#qz_4(xSpa%qUdY@z74E2 z8^YXAu`{E6%Ozb=v2G~JrQq>iUS2paT^x+K;)!H3S*D?*qb)^f^Sn7I$k*oZG^P~H zARYr@aZwh`0c47x3+#zfvC>NaZh_66mgVqplkMObFdNSYxp*RuAZuv~NT>fdl+B(- z^H4kJd%gcE%yaPOLU=of2YVt6ND9}GrQ%Xd5eP(K!~upqrv9Rh8;rs{H<$~U+LHiH zI>=ygWPx>)3_6`+!Qr7GhXGlbQL$1D9E-)I&~!+q<^+-sLEqezNHo_qA=8X$M4~Q@ ztVb{>l8vXhW-!B(4RO#ZF7rEAcSf$v3~a76vl)c24nj;C0<(e1rYWqMYaz_2_l?V( zxfbG#T)eaxyzFTIanw^GsefeCY2!*4)7FPLQokcoW6Mp9kByFe9sV-(d2pcrQ(v#7 zr~6}9=ZB8>;`TPtyH;UKb5rBnhWffUwKdg(*RNhyy?9<(@$6~&ld{ssCB=`53JdZd z<~_*0e=p~5cGjKSnYV7XqcA#Dw^`*qG?cm!cvgE{2C)I3IfM?3vRc zr%nc+I35%j;P2<_bL{Am!-u^2UI#r<9&&&SbJ!m4f3n+KT>%e)G5^Mu3XU*Pm16lS`l(s9yydc%7BBwiY zvEsu5t>BDK3sSFPGZl-We0C$ zPuVto>$$o`2SVD{@4oyrVZzoeXCIa?Jhj!7&!+XK?kzohvug37ofjWx&)A(hWyiw(*E`mp z+J62~(cFETPCqDHaG-PD>FAzKjVq3|uRXQ-?1Pxz&700V$eFp@v2y8#)A!rfoXncO zt9jK4%aVnyt53|{eP!e6`v$pl_FR6-Fl2!a$mO88U||2>;MmmM(%RPE(b?7A)7#fS zVdA98Q>IRvK4a#r*>mR3o4;V;qQy&=E?d50<*F_{QPWl(z7__?7EY#l3=X?@bI#&s zSfOTMZr>`PxOr>y_MHyRTr4|gFdkecsBUef)gmb_acbKR?%k~Hj!Z1O*_xR4o_BoW zuy6B+CeAm^j1DZ!jtneZ44exbChTEh7vOoq>e8?;_L@y0!@^`IZgv%xvp+5@6woc? zX;82bSkUOi_M$;Uf+6JqW8(`Bjf#_b6V^F0FOgL^;3v)$`-bO=kkzIGOs%{uq1-_Y zb9WcdtFV}%u!6md-7zU6;$h)UTSi4*5uGIk4UMc#PDZ}J`WyT?$|6v1}$_=bCX894qK=De`* z@K(4MG3~1~%R$E#b9Dj~rZ^qymWkj#DXWrup^@cpgG9!G?M1iJ8wKx%L@97EZ~yvk z)tk35srSzc-sX}^O=j+Mw$9%5ThrL1nTer$TgpqJv?ooRvu8zOP%{dvuCF9vl%n3WZEhghg-2}KAGSmmic6&huX?yMg<0I E00qz`mMRbuy!elmY>w$>iqTWqOiF9`SYr_yIgX6k)5P~ zlbprS+R)tRzR=;&r*P}?_|4Yc@AUdaQ(5@>{PgYPxW&);|Nom}82IqzI7d#t#mV63 z?Yo9RZ-b0aUS*l6u<_!~%GTg~j+W~6|JUH@)x)d){riEAmAK5`cZ!tV=keU;@&5n+ zQfYE5JVLg>#pv($y2sF^vbmGJgV z`tkMo_WAqSQq=<)ph{`>s>`TP9-{{H{}|NsC0A^8LW004ggEC2ui z0Dk}z000O7fPZv*eT9aHh>41ejE#n3x7fCY_$09UY!WFPWyNsHv)} ztgWuEuzEIow6!KQ0=c?;IT$x|xfn;a#Kp$P$jQpf%+1bwHkHzRCUkz+*gFnC4Jp@h zCez~MU`d=GDspqJf45Wc2u<@#3P%C_OH!kzlf=%a<@O7AbN?!3r=jbLx~+;KELq zbAk#rFh}DPKQTa%=@X_xh7&Z13Kfb{=*p>BvufQclxENaP`HX6JI52@xlN~kvM5*0D-asbXq7?7+i)zdjp2fP#ECdopyrn-xk`^JL*6O8YJ_s z$*}Odc@!zX`%c&pWy6FBzBgE>Ze0ow=-ydOkWvFXfdS2npqLJ1gl`ljeE4ACUbK(` zK8lFVP=i3ZW%rF6g%{4dy91uom0R|fRk-`GTAy?0G5q9`ogaAkY z#|%*bFhhqCemKAY5lR3694ks81prZW$N_CDKoB7VC_n%K3mm`!0TdBFumT(?Fc9JY z2uH#J#RCy?fC7XsK!L&wC}s)A8(eldVTCFD0Kx({4CluL7Idj*6bEz}B9{jkrUaJ| z5P*dQY`)=QmwQT3g9Ly|pe6?i;K4uwT|xl_2aF2w#*ke?ng9opLct{z5Ohgsq^miq z=BIDOA?m0w$Z$;(Y*awP0!g?v1q`Fc$^#0cDj`9v2k-zu95w732b*!MIBF2P4nRPx zv2u|>94eCM98gd(sd`}9f&8ca|UJ%;ebd&*Ym~_iC2#J z10zsi`R1G_ZU7G-bS}E+9glAM>73W0`syLba6$|VWPr`=*SrzJ>bU2w`|h|?FhB_< z)DQ&k#25bn6vZd6{O)!%?|cYlWZ^>uSp;DH_1BLPg7e&W@BR1O8=wGI@L+&%{`q#e z&<6VKx9|KLGT-KH<@V-V-|TAJ1Z{GiuHs$DW|4aPS-oyRX(yF-?|H*{r|hT2JvX9jzVuV6 zYrDlirgB=wW!>@z7dD|cUUyBeRrk(GKgfNQ-BI~-HnVZ`!P0I@PTOGf2(4*ovAByey0%x@HPyek-7~jI zENpsF+qt-NSk^&Z+CA)={uNZ%RNY67sc8L1nHyc&%xxRY|326_Jo|log)}^q*EX2m z)HAZO+d^3)&uomY?U!|rW`6A{>7tbXm>gc-?VMaA4K7r5Pg9mQD}GFV>7DDJTm3P$ zUePtxIJnS4nVs997j;p_SGIo6uD<;8BeSU|wxX@9o8p~Y*FLdI{dJJtIxx1p`E_LW z^AF1OFM38(PfU3$%gvOY+11$%ddtYt*wW_63ca?EN?F?*rfv2vY<(MDZXQ|sKCxQb zMXC8YQ%#;3U8Pf2_ojZ)qsv>HDYK;=6E%I**oxM-O+5-81--MYGr#EHD6_Gpy`Y&nU`>AyUlfARQlBx!tmG`~)(mB4oSwA#W+BH42 zxB)`H%x@b^tnHj$r@v|Z8I<4k;C0i&)_&I{ZEj-^j(eX}+X=h%27K++%mzK;GkIuX z6L|GyIeF%7!^qE>_1xBpCwbkznXO)#ZGnYN&nx>2J7=1YvpT)bW|{h-ainc*IUuL= zMMbY|5~+J;Rl+%Ebd8R{f7E(ZtmIi>7GA}0^(DjAWYXYbejBy0W3q2yt9fL0YlYGsOs>)U$S9=|oT z2zXnp3(gB}hjVap(-c{&Z4iMw*=veeDw`rq@p?E%CnJ9k+zo#-bF9A$R?S{S>mpo( zpiXebyW+fT;RM$QZl3A{O%YprcRQT=vHW*gUIhLxh?k3|h|b>)_+OiP?jAU}vYfIk z7NLNItE$N%m6gJN~-Ee75Kl0$gwpK`}^wG^$q@Q>v*Oq z;^^gtSC^Of_4SqWRg`o0aF9o;sj0~$6yy~YWRDTDo_=m#wgg!>Ptkug=;J)G9!_{K zCwDjaUyZhQ?%rOSBFCQoPYAAfQ`7$_cJq|`S3q)DcUO6WEnXfehmd!5{TtW6(4Jn` zasSti|BCiB_rv4luj4%3y*;qFW4P!)fv;JD7Fvu-Lc-TI5#h2 zeNB<$9XWd^dvyf`RVAb{3L&e2wZqCPVU_G;QMPJIvRDOGI|XH1gsK`6_m7_c#z!HQ zbQSdVRrU0g5J==DC0*4^N;=9qC?%ANs?H^S-G8{oZk}GYZdlwuww;b`|C_7wzjD>} zJaD#N?jGju?hpQ{0<@#Mm%FEq^EB>bsjwk==B%IrE`*8c7ZHbzf?0s;eq1 z%F9Yiii4H{o(z)tjvt`w{Ox?Q(nJ%nfxLt@p(f0v$)upr_oW75#eE> zA;Ce!z$XEZANl(ce0{vVJUt%b-Q8RtxHvmGI^4(EW9@7)HuvsY-?@Fu%F^Pd`Hkz> z&{xe&uUs}UHZnB0q_3x|qpfvOQ{#fV8cJ0~SxHghxIyJ)Wu&DfCB((fpA!`khMzri zTIiIZ06!lu5BJFvTrf@!b~aWPW+o_v5exz{006>!V8GuY^Y`)h0tPT00gjl3jEXWE zLzqrVS+^BsevN>Mnxq*OXSF=#S9Bh2D}LAd46YX~WL)z8d!odReCzKeA39zluDnPIr%lRof4(zHl)Bqqme-querNK=q&&a>qgAQ%SbO=$!Oxhl z(Wft06bzR-_U7O1sQ5&w#80=sxm;N|R!i8VjdfIho@gL~SkGLkLQJ46+V!jTpmDq? zuT_0X?D@FKj#r8< zX%h|QGPk~pRsNc8OO&?h`r_9ucnAU#6G<5_2 zz0|n(#70A2TM&DF{qF<%=F-Gb-wE#CyhScXJ|`g{i1pTk1V&bb&~pgiwS~+PF0_>g zA2a{`T;cFT?}f<-c({bfwWQ_Dl+(`U4}q+AVyIJ3<=q;am~ZCVMmRr0+x-j|6l@la zxP&tTv7hI5vQN<48T$E5z@qtFyr_ZXY?8T!F~5XZb_G~W+@4|jCFcG^px9+9Q@g$( zN8ViGxm@Fr=i1Cp@0q;@jB^rtAhvfoViM(u6Yf-WiFq6>hA;>fc-|KtG81CZp8qo%sL5t!<_N)AQQQfxm)E> zM3#cqUU4$V%#*9UDp;iR1YFo$avvy2y0@K+IJjCNkWK}$NtG=tuptVTXy4$Q^t=l1 zLYi}}QuorQH|lH4g$=vOLLQAq;-9v9=*38=GifwK`zeRk0SAyTG=rp?`{SCmUapUf zBFm}7T3U@b;mhX?)mCRuiiwn@gO?xAFITSpIq)^THs|Ei?4ft!{e{aqwA>5$X{XE7BwZtIxuN0$ zKIB5nN{>p}NFJ5Nl1^E%GpKvrFYU;?{Ics@WhsZ*D%PVWm4$8rl1~$XNa#;0+}DYl z*X)MKzRQ5#Etgwabaj7xV|?5S&18GXet-Py+xDXes!c*Qun5gG45LF^vnAIL^Yy1$ z+&M-qg;or=oQ+7oHw^Qbt%-p=Xua|RQhZS(hu{6kAb~#>`d?yU!RkpF%jAK^HrZU+^9AtSn~^MjnPagxCs1J0Z4-*~H; z#BQf?crO#QdCqwWN+cy1L4<4te*p9Z!ren@I@QalYh`f$r?H8*Kez8^spsDb#y!tdw%&_Ig@~h1hMiIIh+x7YJ&n=WG&oD{uTUJs2*f4!nFr|@CVf-;vg)@@mb=>a7pwPl`OVOGXPYx8 z`d;hJ>3F1ed1hJ}3Y0c|ph1J|gZS(+B6$j^Z}($n*p`PQ;a}hhr_L{Mq+5nWb@8z4 z5I$l##Tf9fBbx3)wC%g+G5BwU)8tV`(*ttWk& z{n7Z8KpogsAIRc!UGw_xGQKzPvL@X1j7{p`m(R4se3Zn;h76_=$OU?%m@LRSH$GhU zmCyAtI^bw0Gg|&9kVlmt>W58&(BEgURmt*oOby>rSRgX8#*8t!AVT0uJGIgTJ=k^r z5M8((7tM5Bm%tY8@+A&3UWSU8}M=jza zHZX{I4w;klv_~QqKeM(0KjOM?ka@D60y;+>`gDD$IH6@doac&27xGo5KmkIC+jcDN3 z7j7~0W;kg_0`rjwX)+Yo*x7?DeKuie8f=;EEj;?tR;;_z<6yq!gYYw`;37}cOI$+N zh+J)OE|bWh6ZY^B`G8C)mcS+Mj{(cPy!jA8(qTV@g#aJ(jU1HwaCpE$XGVDnWQ^YN zo7he~3=E=-j_a__)q#k$kxM|Lu z>s^%p1s3Zp=g>W30yeLiEE_pgfRnzJbvl@NV#XMhpA&U*BACUj&542I1Oo*FID_TF z6y!`B={*L{+&9WFuy{YHz{%C6v*ss6eMp&v%Lo1q zK4l$cM*_4P8RQ~`&)F@BzS8F;V_dRN$fd{t^x0z8S9KHbj&B*rtG=!r;xSL-M8can zz~jL|^O#i|Ljq^Tib&z30I-v<=e+!ry_iJH$xKc?uA=yfoq7PXE(+xz^pTp?f4EcC zUH4*vD5zJ2nMW}8BFG8qoJ!LWngm3>YciI#DEPVz0_?m1*q-dF8MyobQ|P@O3@4wW zrmpQAG0{@n=B0M(c;k<5Awtr*+dTee%N5RjiY)Al8p_kj7 z0(O}fdOSr3{#5l^+@Oyv0vtjNOm21k^8!zSJV}H4yIJ_K(*vfUHj_|M zHH;;F#@J>X$TBao9fp%y_elNlNQDrBiad)a3i?sczuh@sfM)=qIZwqiRO2}hJwfjb zByYt-a~Yuh;@*Rn-mGN`>&*eJYNrffGPf|=E+dMn1an4SjZwWfVBqJ52&b#Muk79x$_?8(QnArM z`@GAEly8chgyP#^pcmAzpUNP~c^lttJH-V<po>anE;VpO@7Iq^dfZ>DYufBkD5+E~};|UWBPkiaw#1z`ZDNfgq^K^th=KpbB8n z+ZAagCFFTBaFasK2!d#oHe;DxqeRHbP>t&jG4f5W!7z{-75w5z;z39Y(P;?ShYECs zfdT;$+rEJ>pn#pq*fBBi-St=>4}+;Hs~fx^O%jwr98V*-7ghq-n4a-35Vuf{MuaB>5a}bC$WA@}3e)(kYWnkl@oXJOmdm{N5 zh88@i9SyPBU>PE5%@SG3;sH520s0^8EKy;Aa?QunK!v^Y1R_}C9Me1aqZky>j11PJ z+W#7Yjzk7U3_&+@0*T4Grmr!><+!0TtF@Z|H5iC1K5~Qc9`E+Oyy_GU-e<|GPkbwY z@~Fg2wG@lj$rS4lo;Lwm0-)F<7^if+5n{&!34KMYe!FbUtLiJL zX8B5*%9*>)@C**@MM!Rv0cT*WJP3xaCNDEX=}X=Q9i9OM?*|v`(ck#}pQC`-^;9)j zAmRiA5&BN)*~P5_dl8m z+j8Hq<%2LB_Ok73UqO^Go(~t4;0=SqKt?-P!2@xZ$V@0_8=gU^9sEFN zAys??kBBl86?Mx!#B8z9+rw${h#J-!p*S z{DHd1#$WDG1qz^+Mn?zk=cEPUgDz2?C}1+VielDk%!if5f12kdr+_qzyt84Ce6v}Q z#PYkZ1Cao*@tu3RaH~fqj?cWU-EKZKTd$GdV63}CSi9-q#22NK{UY*%#tOmVIvSji zqT*XyIZ|6U+QC(y1SB1K*?xv`v{Tucs2pJzfVYaSqySa)uglf6+`Xg?nF_P9LW6e@ zHwz=4h+>LP=O*8q_W|xg$MVxE0pQo_fwhmmXcD2RDH*KiJ|CViecT(j116#bqBLM^ z?2jBY;z7mYBn`@^Z>Jt2$r0Bqz_l1c(-NTz4mN`M15oj(+hDYhwPJ_=9=An@sO8SA zMJ5SdBjq$qsWW)oZ1e>NPX*p;_7nwh)W>r!UI2>24RRiW?ad9qWmPfzI|Y3e zphE;$bYdZ~V5S2eHja5V`CzE#I^!?PA}krirOnhn3=Dxen2?~^)xbCy$brPP>&0A( zXXGbkg&!p<46kFO!;G$LCT;FG_TX_XyRndLQ$h9NtcE0Vgk4$>9N|7>F{NMRy(iNyEyHlmx}QSf(_$f9dRy z(aOE1Wv0<0mjzm1*Rqk))@L-5{swGV2kVlsIaKJ=dEEvgQx?_U0P+1AFC>vCpf@rUo(g&efqEA)<(`*~InaET=FIyza+KjnxxekVs{S^Vsk-VU9%I&{nbR7`! z(P;4GEYROEm0so_e#wJ9R(Fx@)^DqNmUt(kB2YLP7-6_1g5JMt63{$Z9I67Goy2~fj#1RRSg&v~o(rbxa(O5;p0U^D@6%b`n4JM9LSDqbAjTo8fIZ)Q zhxukEu$QwohT=DU8}%++DVsI}E14>(J-Rm^1)8JS&HJv-!JB8UK3Rx7GV`>`61>xM zeos`)-cF1UDR-E4;UM^;kf%|GNTfrnEYgMv6uGR zO|#&lM&Vmp#3rq*kQPRme9DJT8#&+?0DG1n&P3At6zQt9sTWty8BB~HHX%-Y5{=1-7J zgA$z41I}CmXWxKxDG2kFoHOiQG1wGE)>nDwS$)SDvs7THacVWX3SgUcZku1cN8)@9 z!khKKgt~7{+1lmVo>|B|vpjhQu4TK)b#91#xKQ&WLoD_5*-eEbtxZ9O(>*$;QR%<| z+cAUUja0db>=kJxtu1|y5keLOVHxkZ(4?>?>;%& zCCYQ3I7<(;p@#?3Bh%^84fL1^dfX8`{_Ng!t-U0hz2v~XSLu5x4SQ)5dvA~SGS2R2 zY3;wa+0PE#&rRRYZ`d!G*e^WVFFJcrqIFPab5Id@P?dgA({S)*;-LQMfOPh-N$arL z=I~qKVO#oPd&6Pp#9`ObA^Gg@9GxMLHvg&&YNpk|V4qzDo7@pb0E$v>D$y*1f#MS+e*1zid z=VsUTPtGpe#+PgQ=Gww!j!rL}g5%=ztJZdp2M8NwKlwYcD^m+Qn|mj4H0k29wcroY#g?ZEiZMacTcYF9-c05AOG+SZW>xd3@$YF z;X$%*_?7LW3^=N)3;X)L#`xS;S?g$Z`(X3%0(N1isdrM%@cY^EUf=Z6 z!rUAhyU;Z;zrJ@;-#ywkI&bvT6E#HYnp&0D*6kdfS>8IT!p!a*o*kZCRAOeUduJCm z4^bmaO~Z=^$LACC+sz}3`$y+}_;q0!rTT&S#-W9l(WUXZ?eZSd{?Xau)?q(>y?1&Y zgIlXWlX|Duc8|`Qh8Lz5c6)JaEu+hSe|7)(Z14CSgIn(-tS@XHpr_ZS7I%<;Cz;<` z+CJLEwFP`;-(Q|M+FrUmJ-oU&y*OC8zCIr>v@S#SHx7{M(UX@~*RbxH^NXu{XH6j!m=;W5asJL-7OC zL;@*p2sJV}I!K5fSio&ycDGtqW~L^OTXxQam-dzy>L_IDZ)Du}-QHDX6xg0=vc9~` zPfcOXY190t143yjlH2<3uE_J=)7?zf=tpa>(kzR=$@uV#RwYbV%)NK!{8=R<8CB2+ zx%c~eTs5|+E9~W1S6b1i_@n79pf(_upPu=gh<`|WV zZA|-Xk{5bmCI8q2GyFa%H&WSgP)7R2-M(;1arjhpR`qZ4M*UW8m;Zv&Oe(u|IVSGL z%>kLorzQxCTQu)Aw1+K5f8UAxm)YaRe}jSQj9T81WBG%kM|&%dg_Ynpcp&FfA1h~3Dx{#6*>gMRtdfQ#R&N$%jLcj!#7lV``g z0U^PseC9n%@8`b>;NBZL2>T>|ixjOo?Ym>T_&)b%=MpOE}`?`^>!iC)pG_p$=sLl%=1msN7pv}UL+!LiB3 z50f>t)U4v3$u$bZhA-zl%*wwlSOhZV^H|Li;y6#wPjp~d4=wPKdQz^~8}Y!t@S1a@ zFt#9Mxw7m1`btd7b(kPnp-y$98X@IT>N{+}C=l+w%wU;n{IS=%BJms7_iDE~58Lde z>&EpM#NgU`+yRZyQv@dG+@?9{TFo(iY*h70vgtBjv{brrO|+Q7SARKOcwMjSAEg?z zJ#rVjW!YXgx2;hSt3ZvqZM9qu*Iu5Zkm@g(K#zMFh9YHCuupVo)4G+v-YajQtXKGV zuj~f*qZR0a_sM+tkoVbIq_X|X1#@Y+>hV;|r{^0%hA7vG%9H`A zrR2=3*Nd4qwmr8!c1%2%UVXn7pZY}$^P2S=D|g%I@w{%>5A?nFmf;E2?A6I^sOUBM zbTQJGf>k|>_p)+a+_CXMn4~E~+Wf60yZ?#w)cfjKo#kRJ*ORmkUy&s3mH(hy%mm(A zZMm3s^eC4$+bMZ0!*IRj%f6V2Nz4jD&uIqS66QW+2$jE_uy@I8ngu?QQ2JL(Ea(PR z`W%y$V&_`9&jIBeK%Tt=IlUVsW@HZFpliOh4i9=3WX|%cL7uNXCM1>X8~KOw+uQp( zE-Ei`nC@B0V$Yl+H9B(`Yo}TTmNkQ2=d%7W7!ILq*aJC5<#Mm6C`-{~QQy+Z@Et9bq#j)|37x+BF=qoWibQ^YiNuO}JvG5Mo)N>m=d{h7+wrH}Dmd5c1yrhCk3 zekb}pC=fEtQ`TPEPwrT>c$UA`Z+-u!=8%`gW6PM|7K$kEoI+fbiO|QH|wtEBbnSYH6QFJTi`%}#Drv@^7-%l5*fk!?+`;j zN5^wTT$VKDRY$+eIcE|Hf;y9D16dvi`I)5;qxjTDJsWHO1A;8I!q-22zdezoO`a&c z_k!U|2{f@lKD|hK4AaJ6!v}DnQl!WBV(S`@U{0V71I5{Hz`y2&$`VTa2L@k}LjD!W zRKjK#(8>1OUlT)!8|D)dQ>{;LSH@h~S_CubcQIh$KK7fMqMrJ)HeahUHSO+8O6&Is zVXGlWwx%DN^e5E*)K>gwXRZIlu&?oU6?kCFo(Hctg8N#8>=ORZ)^@m}{dEIe)4?vZ z6yLR6SJg+o9m=Q3F`sjpqm-*o$)N{oE&T2F$N z|L!X_K8qJe4P3#T$GA*!e{MJJ!bE+#)JdBr;x$z7MNK|25|12oTXUI3$pL{E`f^fk zZI{8j_n5hf%Rf>YxtHO-l>NqY-z3`aX26`Ao_ssL4Q?v{!2{TsjN3CNKtOb5v}^wY z@5O14)O!Wv$l1C3TxVz%t*ZEx{>4YqXBeI6s>Gz`pobb~y?TRH$&p4&BA#b`W)8nn zIy9D_r=Im&X;njAq?cbcoeeleSEsFLtVm@d2L24b0PhJe3svs{`2bZ})Wftqq zrj3>%emYpT4(5rpv$=VJFZHRbGbe7ERYUQ!yhn&a`)w!P3*y$FSIw57Etf*i@m18H zW~8R0_YG;>A@2$D4CLTR*-WI?c5SanckA8HDbUvc&bM$lP zbfQ}Jyk1xCcrD{{h|Bk+X6JIbg5<9rQ>bSVu4T>uS*F(*XUcfVX-9FQ$SG=t6YEg1<=w|0m#K zC=pV268vV$#kwfOi9PfeILPue@Y`vKgI*}ZaG-}osEN3V`$N zqVIqBfXao=oL0_kth7OoobO2lc%lPdo(88)g=d_GXElT?>xFrtLm(0n+2GLhu!!ub zi2T(EV}S@rLqs)QWQ|p1K|^@CRcIMFGRrCyRTP;g5#==%8B7-iw~Fd^i%gS<=sS%x zVvlM#jp}cRG*ST#qa%9VB5L(O11h0i>>yGY88mYmj&_T#Rf*1M0Bufzpr@ez)u?TO zsCIPZd>ClIC>m7+nil{y(8XZD(Fbl(l#mE&)u;u!=nilU!75^ZHD*I1_S7wwH9QDw z6^Uk#*)ED9)5TsC1ujj+(Wu6-oyFbKkEg@Lu?xllCF6M|K_VQHI}PzwtFc#f2@lrd zmsR3mMbUrssKeX{;HOVzu64wO!#MycR+w-bYk(Pj3P)^! zvp#iZLrQi-N{Ar%w<_2x9DIM89PTd(4s!>`NCt+|gX1vZ$g`LiyFi{{2+uCiR}}*0 z04EfK^THv?#o%)GWaeQg^Dspb0vs<1btz7%Jq!N424#tb)(b*QBvb12Af~FR(HyBD zL1^+>aDqNKr8uoKJgp9s8jFA;_0zC|sofmutq^dHHMH_9b&Ni;g+60gH3L(eK4YDM z$E5W^Ab81)LP&bQV0uq+`rumnoO{~3YQ`EQy>Kn%>wW1l{qDkA;VI%`rN zO3RS7V`R+X{`+OJ(RD<&PQGRyHQ-S8Gs8PM?rC?^IR4d6- zjHP(Pnf$>cpL!PX#RICCmG=mqZ&sYg3@88^BvCsRd>6_Rbt z2DI}iw6p;lNELc96!JI~TH^|T*%VkZqy~5tg+YrV8jGTEMbYO)v7E*6QpJe|#mOGU zU}!P4u{aG^oN->9#aWUgRQOCP_sw+J>k?QloB%iYmM_yhyP=FOIYL=(l zSZZcnTE~#g1ITY$&v!m6bzTE>aONxOl%mw2+^qQ;oZxPovTq(xlt<|swITyS*i;0N z15ng&LoOpQ6wIp?ObQh)8RV}q6yPEX?Qj5M1PsYpv2b40a$dM&P&Uw8cCcQsqLzZQ zDcZnQ7)rsvn8B$GD;9++sMRZ&8H?#`%b9FpH@Py&=N0s&6$Bgj24^Ku3U=$F@}6|z zB(9Rb3GQW6#nDv7c~QWZTE*{Kc_CEw(i8spNhNPzg@`&_a-&FytNa#Mr7U9&pLET- zNA+{tn%9w4w{I@VN)YOAp%ju8F_+fG)ALe=fp)wOYyHXzUeAKW&tX@|CHnQRxXbD4*9GbLQ*0 zlk+87DSRW#FeQ0HyY-(+fx7E}MCpoe(3-@JQXE4?;stC6hscwzJuql2N^LA@YD_N$ zZl5=1^)*)6Hoi7&JdG&u^=zy*Y@}#vLR~bqay7S0H+M2NH})aA@Q9w&=6-zhJL%@W zjpk8leO$CDY#=>zP3_`4g=l`wSF}Ns&P^>v$odRQ1d8IsYOuI*-?we z=1J@(KjLds<)oxYYq^ou(pZv5t52%$qMt%I+uT`sNtRJz0c9QfF*)Kx#JGO|Uv6@pmnQ10)L zlIawep=23`R7`h$oh|*e24TtSP`2xoZ|+bN?)pXmc(it&a&>1wC}i#0?b13GjJnm* zI*ppU-=(#LPduT= zt{>y9(Gx}J4v#`-%V6vY=+evH9Bxdga34^n*1Nw;qO4a?qc?*a)6CR&s~HVr>TQqe zD75Q^GWA#6^`&q23YPU2Hg{!R_SG`=hIh!rBOfnkC-|W8E+(Xb9h?VKQ;2zvMhdAlI0+87YMz9(Qi&bEdt;*a>9Zz`dSmKxJ9La98d1Y zDi}|ih|nx=jQ-~h)EU6q5huK_u*N)t{#TlT^9cuzKn5GRo{Keq_#%*0vZOf-@(%tPuQz@5S-XEaHDS9n15 zB+`DeRFgOYn`FDf6Evr<(@7&&(-WZ9Y9iLccp7^}0-|tbFhULp_g!-~P-d3NXZqB0 zhMO1vh=ssyGRwa`%f5{jE63k?O2&zr%&j439nxn92XOApxFvg%oCEcPr!z8ILn}zq za{6L9ksyo0KS#~j5f_EzW?V& zR$Sq2wia(+FFlVYeY~E&0xg>|FBqi*0eqAc@Gvd?M9v~-kEZXgSyqu>!v#espT`0} z?5?H~DQ+?mb(q(52HI3`Q^NxkSEaP6pz+Uslrau#pVRZ0btrQ));~Cngd2{>Z%~z> z*5SO=-_+I;uU9kG*DUSFk{vdZXEsvP*HKS5>IQKwTANxrlts~-JwBT?JXEeYie|a> zJ3Jd70MlJ2TOYDEhp)&R5D@kRG!rwpH7&Q%zD<=++#1)yw>oU$O(;9cxAq;j(SOgh zygR9y+es!nhl99txvf^Yol}R+DxYl%`K=3|-Ielf`j+jB!QJDT*&Dta8$O%8KD#)F zwZ-VY6NfRf)-D@qk6~zMT5g|Pdv}m`AE3RzIk_` zOx_U`Jv6zoXBcz%#&N@}V*QTD5!;P}S3AcFH%@Lk?*Cm!pP7*)0brm{uKVnF7r#|! zb*m^AK=cfiW-NJK({D}r92nzp8b+dWn5BunOC53pp~6X(=y)2Mc^30@P1Oci!m>^+ zc9#3J0K0vf7M-@tmqS_ams(l`no?1Q)@nGGEuAnvFgjPT( zKrLrj7RqnaP@Y(d5Jvz9>lFupGNIz4W9YJbXS>JuGCHP^$M3S@#`OmPrK>(}bmu(8 zx4RsZ)S`W%nMKPn+h}J49Ic>5YhNE#T(wsKJ8#hO@UYNmeh5|P;Gm9*Vu|3O2@Um# z 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 diff --git a/images/usagetitle.jpg b/images/usagetitle.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b180393455229da80eab388febe1d24e445c4c7 GIT binary patch literal 18277 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[`RD6&$ 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 U-yr>eB>&F>|NpT-@b%>X2P#Aey#N3J literal 0 HcmV?d00001 diff --git a/images/xls.gif b/images/xls.gif index cf589688cb4c31124cce03b20353de406e374bf0..21f7d2c09fe289898a556fffdbeda0e412a71073 100644 GIT binary patch literal 1438 zcmV;P1!4L}Nk%w1VH^M)0Qdg@JBD2`gjYw6XGV=?wb8;Sc}-WBbNKrC0AejIeN*S~ z>y5af8E`>@v6fkycGcwE6?8#VmU0wxKrw(;6>mOdpMI*zxunOmGJ;o@y{H#)Kq-1o z7;Qj)uatVMk2iu@3THMfeo-=fRAHQZ4Qo0TaX%MqK0t_J4Qx6JY&j2UIXr?~0%kG* zWH1|YLl$p98f`%nY&;TcI{;rP8g@isoqTYnh#GZ78FWJ$aY60#@Y(0!^Y`@{bVH80 zq3`wb*5%#q^zn(dobmSa?ey@Fx}qRI`Z({{H?GZ9I0YjvjJDDu7by@$JUk&{&gm24^&~ z(74!LHZl-tzYJT$^~N#EP*l5R|pY94n+B6CRK>*Ww^I}&d_5pX^WYB(!< zQ0(*Y9d<=SieyQVX|m40+UMYKr-)mbcFy3|;q2#`zN!^$Jq~I){r>&A)5ZP%{_ytm z?DX)z*vj1L;$NJ4=MH+WS8E!!t zZ9xD3|NsC0A^8LW00930EC2ui02}}u000R80RIUbNU+NvXQ2cMb3?G9!%geRW$FZt z*dr;ups;f2P{FJV^t^?@;Y3X%E&TZP^YRN!5FIdM>LAi8NdO3X^t{4zzY1FAd%l1oC2N{bQ1}w~A!KBZjD0IUf(eTQJ1{Bt;aWf!vnF z`%n=IF-?P&c->I;gCar+8aP;fz(I3{OBW)bvp5=33qdY_89=D)$FD#EW{C*YDp$B?2pQ(_U& z6$CU5Yy-H#!xjKUHq;!uh~a@O&v+n42Mug97kW3O(2hR@^r06FQZPXW8S_{`1|0~n zum)o2@iNR1cd+w;fh$q-P7PNmqsbLDj8FkQL-=>g1?m9f&jRnM#D)lxETM!QK`61r z65||D2xz_la7Q43MDjxdF$`w{3MeoE${tLhkc|^|oaa;)mn3lt0!8>!P9MYZV}ubD zm=X&GMpz*S7HU2f0tPpfP(TGE@SzeE$G`%_8(<9a1`t4aa+`mzl(38oFD!D7RVL&i zKs+bV!pRBo2q29-pZIqdSyu6TWegKvL}0-eObn9DiLQ>7msMw_wN_hi#WhzjVZHjR zN?38_tUqQL;D-b{9nlP4RUH_P4cvCyttH|BQOPO}V8D$pYB-_A3!oOmg*!XMEAI~A s071k+jPRhq8LD&;%?7qWp+bBd73>f?K|JvdCWuVJkiif~TyQ`DJNe+G$p8QV literal 1670 zcmZ?wbhEHb6krfwcxKP={PnZ;RZS+ThAUTZZ{Ap|Sj_eL(DtBzfBx4ls>s+E;?d?3IKk)7pZ_}^Y&?1L>5p&!|NQ%3x4g3LV14zbvcmPb z)$2-(B4qvM+s&D=^1y)$lMi-(c=uw{;f>#Z{{Qp$|Ns9#t4gaAC&ra*%m4J_ePd(i zjoS|x7#M&OKys)9#sAz9z5xm@i6x0Z+Qz=3ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=C zroINg16w1-Ypui3%0DIeEoa6}C!=DfvmM zRzNmLSYJs2tfVB{R>=`0p#ZYeIlm}X!Bo#!H`&0@P{GVh&(Orw%*;?n!N|bSNZ$a6 z%ybP+tW3?UjLa3FKnZADQA(Oskc%7CE+EfVDWjyMz)D}gyu4hm+*mKaC|%#s($W%S zhLMpjP=#)BWnM{Qg>GK4GRy>*)Z*l#%z~24{5%DaiHS-1r6smXK$k+ikXryZHm_I@ z>>a)2{9OHt!~%UoJp+)JUEg{v+u2}(t{7puX=A(aKG`a!A1`K3k4sX*n* zAgcnUy@&(kzb(T9Bihb;hUJ8nFkWk1ncniwerj>E=kNw zPW5!LRRWr!mzkMjWocpT}2WY=w@hW>}F|d;A&{;2-EA5pIn-o znpXnTn}X2mhEp#nG2|8iZFWg5$}CGwaVyHtRRDY1DigO`oN<~5)tiFbEiO3q>H{64 z4~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkv(P|M&OL?_WQEeE;_K%jZuYKfHhU_RZ^8 zFJC-=_Vmf)M-Ly|zjyb}?OQi*T)%ep%H>NJFPuMj_RQ&1Cr=zdcJ#>MLkAD+-?w+q z?p-@~Y~QwZ%jQiRH>_W`cFpQlD_1OEwsgtjMGF_qpEq~T>{&BsOrJJ&%H&BCC-nFA z_H=i3cC@#(wlp_2Hq_VE)>KzjR+N{OmJ}Bi7UbvU=45AOW~8U3rX(jNCd9|Z#zaR& zMudljh6D!%2Kf8=`gnVJdbqo}x;Q&II@sIU+E@c4+}zC6#MsEtKwnQ+M_Wr%LtRZ( zMOjHvL0(Q)Mp{ZzLR?H#L|8~rfS-?-hntI&gPo0)g_((wfkE*n3y`#D&;b>5pc0#b z{b+-IlXXjLt9etWy|o$#hqAI98=EzES9fp!L>U=Mjemzl9LDm(lef8WD^$Kh7$)i-H@MTlXPm1WzhwuFo~j9S0p(YtO1ce BBrgB} diff --git a/import.php b/import.php index 8b5ea9f..1440133 100644 --- a/import.php +++ b/import.php @@ -9,7 +9,7 @@

Platform Name 
Publishers 
Last Import 
Platform Name 
Publishers 
Last Import 
- @@ -881,8 +880,8 @@ @@ -950,7 +949,7 @@ - @@ -1019,8 +1018,8 @@ - - + +
+
Usage Statistics Import
diff --git a/not_avail.php b/not_avail.php index 8374ec8..a258071 100644 --- a/not_avail.php +++ b/not_avail.php @@ -39,7 +39,7 @@
- +
  @@ -52,7 +52,7 @@
- +
- - - + @@ -161,7 +160,7 @@
-
+
- +
@@ -1021,7 +1021,7 @@ - +
@@ -65,7 +65,7 @@ -
                       
diff --git a/ajax_htmldata.php b/ajax_htmldata.php index 5a0029e..fc200c0 100755 --- a/ajax_htmldata.php +++ b/ajax_htmldata.php @@ -213,7 +213,7 @@ //both publishers and platforms will have organizations lookup if ($config->settings->organizationsModule == 'Y'){ - echo "


Organization Accounts

"; + echo "

Organization Accounts

"; if (isset($_GET['publisherPlatformID']) && ($_GET['publisherPlatformID'] != '')){ $publisherPlatformID = $_GET['publisherPlatformID']; @@ -309,7 +309,7 @@ } - echo "


"; + echo "
"; //Notes if (isset($_GET['publisherPlatformID']) && ($_GET['publisherPlatformID'] != '')){ @@ -1132,14 +1132,14 @@ } } - if ($pageStart == $nextPageStarts){ - echo ">> "; - }else{ - echo ">> "; - } - }else{ - echo "
"; - } + if ($pageStart == $nextPageStarts){ + echo " "; + }else{ + echo " "; + } + }else{ + echo "
"; + } //making table larger so it fills the page more echo ""; @@ -1177,13 +1177,13 @@ $numberOfRecords){ - if ($pageStart == "1"){ - echo "<< "; - }else{ - echo "<< "; - } + //print out page selectors + if ($totalRecords > $numberOfRecords){ + if ($pageStart == "1"){ + echo " "; + }else{ + echo " "; + } for ($i=1; $i<($totalRecords/$numberOfRecords)+1; $i++){ @@ -1198,15 +1198,15 @@ } } - if ($pageStart == $nextPageStarts){ - echo ">> "; - }else{ - echo ">> "; - } - }else{ - echo "
"; - } - } + if ($pageStart == $nextPageStarts){ + echo " "; + }else{ + echo " "; + } + }else{ + echo "
"; + } + } break; @@ -1471,13 +1471,13 @@ $thisPageNum = count($platformArray) + $pageStart - 1; echo "Displaying " . $pageStart . " to " . $thisPageNum . " of " . $totalRecords . " Platform Records
"; - //print out page selectors - if ($totalRecords > $numberOfRecords){ - if ($pageStart == "1"){ - echo "<< "; - }else{ - echo "<< "; - } + //print out page selectors + if ($totalRecords > $numberOfRecords){ + if ($pageStart == "1"){ + echo " "; + }else{ + echo " "; + } //don't want to print out too many page selectors!! $maxDisplay=41; @@ -1498,14 +1498,14 @@ } } - if ($pageStart == $nextPageStarts){ - echo ">> "; - }else{ - echo ">> "; - } - }else{ - echo "
"; - } + if ($pageStart == $nextPageStarts){ + echo " "; + }else{ + echo " "; + } + }else{ + echo "
"; + } ?> @@ -1567,17 +1567,17 @@ ?>
- - - + + +
- $numberOfRecords){ - if ($pageStart == "1"){ - echo "<< "; - }else{ - echo "<< "; - } + + + - - -
+ $numberOfRecords){ + if ($pageStart == "1"){ + echo " "; + }else{ + echo " "; + } $maxDisplay=41; if ((($totalRecords/$numberOfRecords)+1) < $maxDisplay){ @@ -1597,30 +1597,30 @@ } } - if ($pageStart == $nextPageStarts){ - echo ">> "; - }else{ - echo ">> "; - } - } - ?> - - - records per page -
+ if ($pageStart == $nextPageStarts){ + echo " "; + }else{ + echo " "; + } + } + ?> +
+ + records per page +
i { + font-size: 18px; + position: relative; + top: 0; + left: 0; +} + +/*--- Capitalize Add/Edit Links ---*/ + +.mainContent a { + text-transform: capitalize; +} + +.headerTable a { + text-transform: capitalize; +} + +/*--- Form Modal Windows ---*/ + +table.thickboxTable .headerText { + width: auto !important; margin: 0; padding: 6px; - border-width: 1px 1px 0 0; + border-width: 1px 0 0 0; border-style: solid; - border-color: #C9C9C9; - background-color: #CAD7E1; + border-color: #e6e5e9; + background-color: #cad7e1; -moz-border-radius: 0px; - vertical-align: middle; - font-weight: 300; - color: #000; background: rgba(200, 200, 200, 0.5) url(../images/bg-diagonal-stripes.png) repeat top left !important; - border-bottom: 1px solid #C9C9C9 !important; + display: block; } -#TB_ajaxContent { - height: auto !important; +#div_updateForm table.thickboxTable .headerText { + height: 16px; + margin-bottom: 10px; } -#div_addPlatformForm .thickboxTable { - width: 100% !important; + +/*--- Adjust Add Login Form Modal Window ---*/ + +#div_updateForm input#submitExternalLoginForm { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; } -a#usage-reports { +#div_updateForm input#submitExternalLoginForm:hover { + cursor: pointer; +} + +#div_updateForm input[value=cancel] { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; position: relative; - top: -9px; + left: -76px; +} + +#div_updateForm input[value=cancel]:hover { + cursor: pointer; +} + +/*--- Adjust Update Sushi Connection Form Modal Window ---*/ + +#div_updateForm input#submitSushiForm { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; +} + +#div_updateForm input#submitSushiForm:hover { + cursor: pointer; +} + +#div_updateForm input#update-sushi-cancel { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; + position: relative; + left: -176px; +} + +#div_updateForm input#update-sushi-cancel:hover { + cursor: pointer; +} + +/*--- Adjust Link Associated Organization Form Modal Window ---*/ + +#div_organizationsForm input#submitOrganization { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; +} + +#div_organizationsForm input#submitOrganization:hover { + cursor: pointer; +} + +#div_organizationsForm input[value=cancel] { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; + position: relative; + left: -130px; +} + +#div_organizationsForm input[value=cancel]:hover { + cursor: pointer; +} + +/*--- Adjust Update Sushi Connection Form Modal Window ---*/ + +#div_updateForm input#submitPlatformNoteForm { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; +} + +#div_updateForm input#submitPlatformNoteForm:hover { + cursor: pointer; +} + +#div_updateForm input#interface-cancel { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; + position: relative; + left: -132px; +} + +#div_updateForm input#interface-cancel:hover { + cursor: pointer; +} + +/*--- Adjust Update User Form Modal Window ---*/ + +#div_updateForm input[value=Update] { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; + float: left; +} + +#div_updateForm input[value=Update]:hover { + cursor: pointer; +} + +#div_updateForm input#update-user-cancel { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; + position: relative; + left: 2px; + top: -16px; +} + +#div_updateForm input#update-user-cancel:hover { + cursor: pointer; +} + +/*--- Adjust Add New User Form Modal Window ---*/ + +#div_updateForm input[value=Add\ New] { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; + float: left; +} + +#div_updateForm input[value=Add\ New]:hover { + cursor: pointer; +} + +/*--- More Spacing for Headers ---*/ + +.div_mainContent h3 { + margin-top: 15px; +} + +.div_mainContent h3:nth-child(1) { + margin-top: 0; +} + +/*--- Adjust Update Outlier Form Modal Window ---*/ + +#div_updateForm input#outlier-cancel { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 5px; + position: relative; + left: -30px; +} + +#div_updateForm input#outlier-cancel:hover { + cursor: pointer; +} + +/*--- Side Menu Icons ---*/ + +a.showImports:before { + font-family: FontAwesome; + content: "\f019"; + font-size: 11px; + margin-right: 5px; +} + +a.showImports { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showTitles:before { + font-family: FontAwesome; + content: "\f0c9"; + font-size: 11px; + margin-right: 5px; +} + +a.showTitles { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showStatistics:before { + font-family: FontAwesome; + content: "\f080"; + font-size: 11px; + margin-right: 5px; +} + +a.showStatistics { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +a.showLogins:before { + font-family: FontAwesome; + content: "\f007"; + font-size: 11px; + margin-right: 5px; +} + +a.showLogins { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + + +a.showSushi:before { + font-family: FontAwesome; + content: "\f192"; + font-size: 11px; + margin-right: 5px; +} + +a.showSushi { + text-decoration: none; + text-transform: capitalize; + font-size: 12px; +} + +/*--- Get Recent Imports Table to View Properly ---*/ + +div#div_recentImports { + width: 700px; +} + +.dataTable th:nth-child(2) { + max-width: 80px !important; +} + +.dataTable td:nth-child(3) { + max-width: 380px; + word-wrap: break-word; +} + +.dataTable th:nth-child(4) { + max-width: 75px !important; +} + +.dataTable th:nth-child(5) { + max-width: 60px !important; +} + +#importForm fieldset:nth-of-type(1) label { + padding-left: 70px; } diff --git a/css/thickbox.css b/css/thickbox.css index a491b9e..8a79568 100755 --- a/css/thickbox.css +++ b/css/thickbox.css @@ -57,6 +57,7 @@ text-align:left; top:50%; left:50%; + width: auto !important; } * html #TB_window { /* ie6 hack */ @@ -109,10 +110,11 @@ margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = d overflow:auto; text-align:left; line-height:1.4em; -} + height: auto !important; + width: auto !important;} #TB_ajaxContent.TB_modal{ - padding:15px; + padding: 10px; } #TB_ajaxContent p{ diff --git a/images/menu/menu-admin-on.gif b/images/menu/menu-admin-on.gif index 60770590e1276daf6c4effc2e46965e29ae31601..ae6ce770a3d358e5c056e2cd6dd78bc03b0a7368 100755 GIT binary patch literal 1913 zcmZ?wbhEHb3}Db;c*ej`vFZH7S06uq{ju@%-ShWemaaMT`v>htI4a*ILIKP%jL-eLCP$%k$oxb@=Ammd$_eks^+{^y^+nQPBpfAQhZzkmP#|F@iZ zh+)tJ#sAz9z5xm@i6x0Z+Qz=3ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypui3%0DIeEoa6}C!=DfvmMRzNmLSYJs2 ztfVB{R>=`0p#ZYeIlm}X!Bo#oH`&0^~=l4^~#O)@{7{-4J|D#^$m>ljf`}G zDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaozEwNPsx)kDt+yc0eUB2MjsTtNYM=w0;VAl6P|d19C-3i%>$zB`;K7M%r z?(Lh`uU@`*{_N?K$B!O9xPR~No!hr=-nf44>XplvE?zi)?(CVz2)%Hf~tIZta@Yt5&X9zHI4|#fug$m_KjsoY}Kx&X_)J>XgZo zCQj(@>+R|8>g;H5Yi((6YHX;ltF5W7s;nq4D=jH5DlEv)%gxEo%FIYlOHD~mN=%54 zi;annii`*k3k?Yl3Jmb~^Y!ue^7L?bb9Hfca&)k_v$e6dva~QaGc_?bGBnWF)78<| z($r8_Q&mw`QdE$ala-N{l9Uh^6BQ8_5)|O)(o5QRik!Wev#IXHUEGEe5FGn+-7WMrNsE#|aG zf$6Y|BAXezWy*!ngA3L+G4rR*4qIuqtt-(rtHp!^@q$)`t>PelFlXEmLB! yY}Q_f@9!V(@6wtdS{wf5{qC#vTK4q;{{@8=G@0dsAE^J6jqqsV;uGRvum%7gn%G|e delta 593 zcmV-X0hgrE$f3vFuE*J`%-o(;qCOJ$lR#Q-uL?ayVm7@N07R)(BjD6>iPTqGljBb zqQyy(x{bTkwbJ9p-RVP)xa#uvbF0eZ?)4{qt)|J{(d6!;$K0O9+hd``aH+{lle_l% z{7RC$Z>hA)HF`<}DDB&;X4+mk0=qHfhOiX9G4`nZbh+7aK$f;Ss|} zlkEl=N36sKktG^PK%fw!P=cp}1_*G7ZGp+qWC@o(j9O(R6iR|z7{sCi1Pen5DNy2> fknaTwEMf#4oV4N7iH$od@nZR)3CkLMlS~IK$w(W> diff --git a/images/menu/menu-fileimport-on.gif b/images/menu/menu-fileimport-on.gif index cbf35a95c6b4df4b25e3421e637dfcac66691cef..08cf455eadac15888be8ac7db5a3500787c03a45 100755 GIT binary patch literal 1977 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 L2pIuNlSv3GLI`V| diff --git a/images/menu/menu-sushi-on.gif b/images/menu/menu-sushi-on.gif index 903672f20d0eac1da6f29b5e20c93988dda5515b..e61086469f6ad6a749022a11f9344796688305d2 100755 GIT binary patch literal 1919 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⪼c-X+;`zl6Tu_&LjH zLA1Xv1%&3Y78<%heQn5lmzV20`QdGP=(>$PRv$!Cg5L5D*}+XQ^ZctBxaBbSSjJWW zpNhr_XuA2%6Gpq31V>?tUr1cU9+A{V7g${1frf4=!Vc=Uqy-Tp_ZcYfma%WYt9WDd z6s$EK$Gtc6z1czYzr}Tvx21EG#~8wv)og17u={BEjGB{!N2>agO#7+f>?oN{`Gyy? zu?kn^-ca;P*Bx>6$TlNP8 zczPmJk{EN@k#?3wo!NY5TVe)Y!Zpyc+~`muR;!sZ(d<2Zou;U^d$k}&CqrTSg9|{p zuX<2`%$U_G(-V;qx9->V{;^nu+2N2FG5tvUjaxLMkE1a({j9B`!}R<3$gn1oTg8ZN z{n@VO>9Z#w#GevSF_85T`cElyhz5w`z!k(yI@|2}4~vlD%%2MKv<60{V|m~S=+4sa z@cIx^)|gy1Hxr*^>&kvC^jh0?7bq75q=S8D!hXznN|JG2MoWHyJuXHgznwY*!nQK} z*UgO5^3kYU%{!UP&IUit%FSGt_p8XCTdgzWhdY*b?thpO3|?Q+;K7Uv$i-TJwAD6J zzdie!R!J8Y+Ed7mAH}7&wTpj>Hk{)acqE+tw|cu1!a@4C*WfK}BEc#l6SzpYY0S@# za98h!m`xP5K~%l#vA$Di{hq4nbZhod#8!%k|HCBv&BUAy&w1G!kuQEH5dd`?Vl_t7|Ndgawg~{JNx(g`3=^K&ZGZB)%;Iw+mSp ztDb7*&5?dumrUp57djkxRy-Orv=|FPwiCDbc#G>Esf@Zd2y#Kk8WDquugLP5iBP1V zc4=8PNv&?YLwX`$Wn1;l+jkjR%BIz+ly)1KKu%(GX<;Y&>Sk(3JX;(hZ0!n4|BUTv zdRbic$?(@4WMU{_iA_;8&EkU9>dj>$B<1ei){5g&d@A9E9J zm#$`SrEng*9v;@Ely&d9Y#6VG_4UB5+nOWS13r1PIZsh}Y;D`beG=*j#H{(dgPPfJ z6#Ay}Qg@-LVBxoJFZTzFJITE33ITn_1SLxp{;oNHW+TVKUBLdW+Pe*ScCK4$@Cfm9 z#nR_5P!H;Ns98vy<7mAaiMy!YryHJCxKzjJ8fb!g7>Twca*=U%d(PdSBvV*P6WB<> zAbvYry;K5nhi^-BB>C-Ng!Cv&P6*fFQ3)k7P;yW(tOUTpV_ z$WhGK5s`c55m}{P{I=syF1r=md5i(GDV__d<66TV?yJ%cDl^CC$5|gpZc4SBN28`Y z{E`xJ1#f@+_>_FzocyOkO!vXYH{eSOQ24|qZYCQTgSR+$ZxRmTMq+YSyG-O`?52U^ zFYBE9X4yR=QjD;HDr~5Vo6FF^q`x;NggGJH?IN0h9EVrl7I3Q& zlZlGjW9QApEc65^(?;Iqigs1TJhUl9b?yj0u&OpREtM8ZX#Me3(_|B_uHjLLCe)o@ zUIge+@P%vo_}#Syth$pCrWO1KyPt6AURmZp!Z5*YfBmp_Ff@r5^;gcTAG}W??NA!@d;E)>nS&@9a-oVH34ti3=Xl z$9p!O8=6%bj=wYQEiDb+y^O2&&zSPOJwI3&?!CGtUbHG0YMHsrjdhi2NiA)ib+=hX zwEwn!OI3(^IICp%WkWmSO&@?pPsCo_G4!CiOgQb2J8v9mLgaFBa*S zGV)hy?#tLm#DMAQXXfi<^BO~Z}) z@!Osz9k3{-;xfQ>#WY8i6`kisP{$3hLCnH89$S&JPFsv@#}G*fi%dI9VQZh(U*E?q z8g>*HywTo;wPd>5`m~3nDJyYeqV6uW7I2%*T=r7~_zNG$GPxs)W|?2-1P@a1;`7F2 zH6Nsw?{1YVqr|2v`$tye1@54m$eJ4u=RBREs|PMC|w&`hf;j z;GJG9`mxZX(ff){`zH3SeH~YbzCxAsl+x>+eu)d`C^Q;5Vo^*mNIT-%M4nkj5@Ey)Za9?DkA?Jl<@Er!V|yE`>pR4U-%Y>nZ#;iz1T!m2A=}O8Nz5 z*iQDYg35LzTsQkCq33OfWPW@igy2zN_*uW(k)31fxt|tZs1%9r(jhxSRu)>ncyPLv zkZo#9tjB!253e31D@g}w`^P;+ESQTGivqT$uN(Ms&3hD8DtKVbbj`RgVKdfqZQl%t z4u5w?Hv9-($2+8Vi!ZG|803^{ef}!l9NJJ&A~j5qG#wC1FS#|*De&1QIWWW~dQ^^Y znCJE4+N^gN&9W6Nh{%sbS+?X_mYUgWO=x`c?g$vInOHRr`nAzDQG%_LfX9HVuK=Hl zjrf0Bg-P=ePC&&!{d2F|7sJHt2sP%?KiXXE_4s`U$KqiAq?>^YOb!usGDi7ONzBV5 zt0}(@)wyoEi)Dx8LtWeQQS-KrWc2l& znz=RX_QC)wKc_n{J5Y6CmAhfi4%{H8)UOmZ=!@c&BGX3vB@4|4h_$Ona>BK4D*B(f zsTu9|tyPr#;HscIQFtAu9L^Y!-CFn+ODVF+$PyD(qG=h_H2PDDig~B|k^96D!05ir zen6U_c1^cbPg>KlX0Om!sJoHPVs{YUqRy&YdkQ^;5orNvPHW>~g|{YdNmb(z+ZX=Q(eYjs}hj60_mNdtHhty;QK%6ivU?)>!>Km_*NZ9vCi?>28mOI8}a&d z%kBPqSJpr+Qr}26IvW1q+vH(&#^};m$1YHzV^eKWXzxl?OyA>h5Sw-?-Hx^Wq}wVt z6N7iHru$e9n861o*!5Pntkj@i>d84%dJDz_4+bE}X5&6?UdjFyF+pxPy$)8z~$)j^ZV7&dqnuN45m3=Ak5-UeF*!%-eR{bmM2($WdI%) zBpWtJZcek_BL}JP#kN421g#cl(+%) z^Yqp!j*XA8{hAqe@y(t`@5l(f+v}8>IdHdF6zXIPk38L7P)m6Cax8;Fn9BZRslm8k zMy<3&zTDos=vaWj-E4o^KDbq04$$pjs>f*~3B^NCS;#w@7XJu?=gX>TH7v^I(l=e?AQ! zDpN#++e=TZaB{J+*XLS49~Bt|QN4@Uyx__DTc%DCY*U@pV%zrpqj#@O+JouXX0)vn zd%{{Q5{>J~*%ICZasdBYhIo{uE>xl2g`qOK(s+YigqwPGFCG4Fu-Fu@Fai|P;v*`0 zcX*_$R@YD?5meuUt5)&GiN=1At|UqAs>Gno?{9ydvTQZrZrFZF0Kd`Qm!7mYkYl~c z6HpRuFJP0|upYB{O5+G5IwCuda&Ycck*iOe{kg~Wo+{ElRNiJaDiP~PboA00Fq`Q{ z#bdf@)Gq{TRpO|hZTQt0uw7h_(nFf>c=RK5XkprB;|u0-l~Uu~UF}M0OPZpo!~seq zw3*-l2=hTDdSJSW%02AHu?){EnTyfg6HlF~&up$!C=@@6n8brzxMtzG`*UWY_RES} zJr~zoRbOi~**&Zw``q~W)lO79_J`e)E|^E>HpB5nQ$Lcs{~-QGcPSm+uF^hG4GkTr z^QvaQgB5e3d=guC}TPa+Xaiw z@LAd!6`9Q>XI8q8Vv`^bTk7K?76D1yx|$@0>GMplrVsu6x8|R(12L79Gby8qHdb8h zqTW|B8@3`l^H5f6uH?>84R)*k>u3o?) z`HD#!=|W`0Jqh0UTO&I=<<7bw`np-+Etv300-b$7keRfHRKo2ELR+3xIOZmB^!)q=mxqLW z3_&h~83Yx$B~>l18f_&5^{f@n0k>#cidrYnA^8k(pDfnW;H~p6{w4d503%}QtilL? z>2x&$3+aDFZf6xvUPelIrgrX`4~j?~8)aemGOI8hvcAS8A(yLpMmeS)NE-PX+w4va zy-dgLbqXIM$6owE-ty`&{$b}(cS8yS@eHLZ94h4q9EJ%so-QLL)ng0Ge;jHs1M3KJ z_Ax-j@3j!6CFw-$jO+rC)iy|X*G5TwDz630iGQUw4#z->;ilnQTk7MLTk=Jf#g8oJ z^i6Ep^)0iiVfwHOUt=b`dB)zBxsAZl#ncU*MxD+L8A6IhOg88J$4i{*~ZG48ED!{wm1HvhT|8#~uMps<3N6dt0IPR?Q;N5>wA#nZ8sb*{N3D zKUR%3Tf6?H)auD%;_2aPYn8#NtmASg?UcInc!kbw1_>&&I6I;>LR_J3H3l+C6 zHL6#N)4osZx(U#fPPs3s?>!fLfd2|Oi2d?>FdyITnn}W%5H5EwM)R0)0-CzBdVG(6 zQt-w!}86Fic%g$TS?+*-wl!rXny%}%fbtb08BDt>9$YHu1I9!Q*lUnv!F4> z2R6XYne%1Q_YvX|S55%KhiB>%GU$e`3p1=aBt}^-@Ct7DsUWM>B-0JZ|<9r4)X*6yDT3uK0BixY%{Cn7_XbVDawW645@8ZPDO` zVFY@1#I1ye>GzS>Yp&rS$#;B!n!%35CX8LwuE-lRt(90P5pvTsY0E^M$zGYyY2GQl zet%>ollnkk)rEI3Xu5B@t@Vw{2?(+)eT)=8_AWQ**DO6qA^giXu2Z+c_D9Ro2`KpP z?YU!O<_So#=yZ4aWYsq`H()QFZ{zsZ_&p8fkoXBC#{f^v^Y@l4Ds+E9n6x11x{>W# zN8;JZVh}3)BBP$}vAHz*9Vuu5)>ZNA7;zF@H z(mp~l3^Sj*14hQidXhG1l54CZZ28F+?|p29{BGQX#fQbaSGV9#nxQM+OT#TyR})$? z#AJCtK8uMzu9xUJ-d+Hj(P~Ozy}f(I^$j_R)ub}qWu$ffyLzF9Bm;$*6n+x2hLUop z-M%m}rprxEKq$UJsa8cWSO54^FRuzt*CT`0o@+X)-zmq zmmZvx3DM}qP9B8bNF#2t=4Q?#VpEOe{jik_V!ts>@7_yGjTI)~B8C+fhoaGn%4=$l z@wOHdd9=V(*~;Rk)fD@VVfK>0+sK)vGr>6`4;!*Ftp8auA5?bHLm*{;2G{2b^OWgf ziaKJkqTeX0KwqrQv{+$(CA3VH>FVx!6}*%*wKu=PrTC3Q>7J+XhWrvO^A}c^C)cs+ z?zWL-%j-ds89^gP&q$TlyDQNP@onY&c6(xz2VDf#RuEc8-*ysx&}?uO106r_bUGWn zkZzaapt#$UKMH-m%KS#0`_fL_o`+HKsxi%Y+Sz;{57k%8uI-5m#>!8IN@`cm=wijh zJ|8S%YbIJ@y#`2p$g>vXsJ;U4#8TFYYA)qk`*Os(>X2rUUKQ-=yRW}xg4DYOKjmAo zeJn|J+tPr~aFt7kMiaiSdRVS~6LgBXvpVU&hNT9GRI5IBNA)Ed8*sP8T}-}GgRSQe zqGSP$;{D+@&Ge*%sE_1PDXGAY)S~7A(;wkerA|CsJHHS7mL!H<+|!n5k2enxLY*lP zrmbpjjc0&%0P6wgFM_wsq0{bkWhb}4Gg^PJlpbd^((WMnn$owOb>nQ<>Lc4$Xs41U z=38vX%U5oOjV8Qr3!ij=H0>yJJz65@ zVP`ZA9BsEsy{=kP&`1OtTLxqc9 z6T7!p|53Ug)hIZbk#Uflv!!1S_x0^{0vkCW)*nT=GFBGmIR!P8pxNhf^RNt2vWc}| z9Ola=+-A6vAG3=6nH@*m=jn1!o2}jmOm)|9PIleqBoTyU+E>IO9i@PaBxDOoGS#Nh z#ulv9tWs-qt=IMI12@2_*{I;Eow*0ts+5IAx9);&A=9Q^aR>oJiH^R00?N!5PNbOo zrm|XKoD-~mRr6b|KPgG==+{-b$sJL@Ez|I7w^}v4)z9>H@|{=aB5-AwNiT;`NpfC- z9%Pc{L7ZSSpDlke4?J%^(wckVC}W{+B^cJyTt$uP8%XYIRMXt{tGJYdJxAVPd6aL zA8O&x|1wKb%|4QA#cXKZy9B0U%pR1LM<7Sw2KX4vY?jMiAr+3R82wv)s@f-@^xKB~ zv)3A}pGkNGvvj>IeqBuSLm?7!isxdtU30DbA>cXD-oydjTdg~nAG>C_l3H)OmmmWM znDZ9*S*0IbAn|5)6|7DSc{T?{9;y|NWL}=RNN_4?U{X%m&!eDQjVs41Mh4GM$&w0i zH*lW-*T^^|9zB~r0nv2a4#_8=PZc{2?;ZV4Ky9N3je7YF==y;0jm91~xMp{QxlA4J zu(GY|b@d@3r$%p4i*9YGdPIFlsK)&{n=vqAAWT9oM*Y2r&Pc0YpT_NSKV}9$IQuaq zt~PI${>Pb3U~3n}9%f4!i}hI@#AtkMev%F1xoz_9_dD4NUwgsFsx; zH%cHP&50V)BGF~E8eWDrgP`B3De)1Wk#ho4Y2+svvy0Hi{cWJ4zp3&7WRxLT6J=Q0 zhegV_`I;U7gQ=L#?OIR?WP4xWyp1ZOo0)0BiWPe9t$@wI+DG9ZBy(F5ZK9I4e-wP_ z7kq=RB31Tnm~%0}I@OUsEolDq%_>S$KfgHNOk^1}-@=AoW)`l((6)t1!$RqJ88{uI ztHtqoznYTBsPbS70Hh4e#@O41+Xd^YUTmCaVy5Loqxl}cjB%)b+X?X{y4BT@@D@3? z{tDoZqW;BbW)AOgW?mYJx z9BF0eQfdc?;OEcS$y-Om`j>s8g2}IC_pj$#HSaPgOnk+b8keZgzvyX*`>E)3s1TZ& z#VnMD>Fh}J7TVG?Jfz9rV>sjs@n>zahTW!A8~tnRAK>70t}EZZ&scH#)ak}9{+>tj zlziS~Uv%%ZbC*ca8XA0+u8Vf`Zsp;PiKiD1Wda6l{_JCWdLbKaLqlnM`hgup9}7pyjG%7G z&zwIyDDhpWj7)+IggZuCrw{^XLqh<#ehRNOj$OM`PN(1LPQDVXD``tsa%sL^Y+ril z^)pv!&*qrItt)C5QwcxDvNe-2-Wf}+T9DYZ;?PjovaL}#!^*0~_=_%mgXspx6 zgKq8CT(E}gdZVUBbqJ>B@*^nP1_kVzrBN3pc0BbSh&@YfxqC6I2qm? zYwqmor$fdyVFmDX?W#r|KNHADG?xR4h@Rnk-0S6MU6&nX4Hx$xdRWK7*4~NNNQUDu z-#BWMM=-p_K2E-ImAG9XF^R$O1Vg5c{J%Wt7{ua73V#K83>=gtDRI9VP#-xGGUa=} znMF3LYK$Br@>X$2^H?Ukh{Km;B}#uRyU2WP=*wuy@uHJqo1*fi?#|o#vW9DBg@e%W z% z3@U1eiSmr=&*;(P%xBC=@#In?W6SI|uj)!YNHGfeXlx1zI_9c;jR#8HWK`eagMnm0i{aT;{+cDe4Y3^+NJq@pmiF$(jH{BsgysE; z{LssSteX`NM*A=YfoLt;GlOKvpjk}rEVu$$^r*t0StXvF@{Aj_&Tl6Eo zzPhI^qY!)7XxYh+f-RsG=vFNo@dVOL@{&wS1M_LAz)d&X7oVzUEE0b)o@5YZeZI## zp|y{LoB7x3(z~^`4)m5P1A9Y<*nPJzgu4^F$MDHoINkn|C6n1rF8WlJI?g45OD+hE zD0>o9-0b+T$7~Rk1-FVZ=fD`Q^~?3iebTdL6LBGn5qFzHQ6tMji7^Yugy{%HIpd82 zw8On_##EyIJN z0yEd3n+H9R>u$E_R9D;mT=L+ES_C2`IK*@|;`Zq?6U`SfGTTf(B^5~I(9c)1tMHJAM-f^PCJJ!QEZm|Y4#8`ZzU*u83!e)-;w@?R(W_qi z`_Z7ni0b>gkAv&Io$79G9^lWZ04hIO@9u(d{1TJA;**34UaC_PNtbpn)@deQTH9P* zceXti(Aa0og02TdYFhV6=+#-Z;bi3%Ls9&HrBxs_`3$7dsm!eY_^hdMS#7o{pT69{ zsU%Y$RO4;{#^bYc)sl@_?A^hT*5?ai+fn15?8^E2uS^oxTdNmDEPyM(z>wdyYFo-O zRmvs6fGF+kKlCMv=UV9f?^i{yKA-qFc}Yz}9X{tneTVTZstdUHpcxT`klL>gISTJ2 z-%@fj>Mx*|%F}BODq~rNwG!4{gtIT(@%#9-^>>)(0*EgADhX>sGh1pD`NMnV-{yh= z5~#aOm0p4U+_7=;BO84n_+=XQqjeDEQCEJCyOOtFPnZ7bAsSXpO1;1X;L%NPuM?>_ zJ@>Ho8`VF~Pb=!6;I0)(|7>@P=cbY!4zEH5O|zm0f|L)P(FR^QrY7c8VSOM{ZUH-u z^M(}j-n|Ub8>oF9=;&bDJPi4c9NMc!*naL^ZALyHN{=gTM*>ee@Hz8tI@sdu(Kj&S z(sxy?w5wOs&h9*>L;sGRi9Qimg8bdqNTf7ffvGQf7dz&ZeQQaYG8} zl5@MyVJaOZhdv|YCURNu*@zZ=H!tQVre;CPgoqe4v7xyP=2 zu)DB>H|0@?+(M?#9;Gkj!pP+5`rI$e2P_eXZ!?g9Rk<@Ua>CsjE7vo8HMFRpL@n`9 z*#0ya!*o99X$c(X%hJb=Sx8cGJRId(+uW0w$lmkKQN&>Fg~L9x|M$+|Fe^j=M)M6miL4kfdw~Tro zbw^O!%uOaop?=?|KhCE=bMZ-}j;6B=fc=PEnl(jT>nD&@sq(3Jdo)t&-{$P`yxx$i zsMUQ>CO>7jUWQHJy-x4uc|WzD{}|rTmlnG?eK>wAv>O`3sPx}gAA%Y3l-P(#`Z5OU z?-htwbNCDF^L#bynqxkaPV_f~u8a!#GmHK2p;L7zHPd=f|K>;DwMx%cjE}HDCIzBB zpBKN>i>_(fuIbht_NYw=Q8Rcr--AFVV_f1FfjrkFQ+(x`{DEukJuzrBY>d7`)Nn|bdN7`sUgC3XsN4f1@+k~7IPmHBh!_%ElwXk zGzjJ;zdHf(OsEaYzOdThPmt4i-r9pv2=V6>1@l|p5zZ#?xip{y9epEOm_&BE$fJFX zu2%z5S(!$>qZA!D*dVcC^?+{a(calMaRM?WQJnje54}j>cabZAuI9}koVwpGR&9Vc z`?_^k*ao%{WAcoWqC;}FtlHsT23&qLgQp(NIy>uS4S3bi%f%#68U#OA72d44Pz&=I z$S&SBCkq!J`#j11R}dCugmL)!xhYVl;!O(H&G0AbtYM z!}^F?C97~SM&!mV+A*bIO;tIBUCFEz%r`YdD-d<5DCUj0D1tYeeMRSCWZ&NyXP<RMmkw4C-j6^05g8i(K1P zFuabgi>3Op_8At{);b$6qAWbB`iLBf2?Z+rkBD)3w#6lKH!q$u-E0uCZi1r5FG};L z|NM52PhdygvgL)A5e%E{f|`XVhFPwdCuJ+$X*_Ce9o`GT0v55K;ZfE}`G;zP4(Y7{t_Mn8 z){mXW1;;A_HV`iCpJKP`+OOFd9tyt)Lf<<9q*XWV zrxTdIE0_m+g+FSK`P+`4C4@_Ma>n*j2~&DK0g|C|m~lc#5ku+bf2IY&ijI+E{eP0?+~`*%!Lens;Mj_zfZ9-y_sCeO;&w*Kci s!)YoOb!wY{1sOX+KvR(EvwxlXnPOp?dw5iN98~c|EBNfWb0@?94;5OQ6aWAK delta 15879 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 diff --git a/templates/header.php b/templates/header.php index 2e9bc29..e62b286 100755 --- a/templates/header.php +++ b/templates/header.php @@ -86,27 +86,12 @@
- - - -.gif" hover="images/menu/menu-home-over.gif" class="rollover" /> - -.gif" hover="images/menu/menu-fileimport-over.gif" class="rollover" /> - -.gif" hover="images/menu/menu-sushi-over.gif" class="rollover" /> - - -isAdmin()) { ?> - .gif' hover="images/menu/menu-admin-over.gif" class="rollover" /> - + +isAdmin()){ ?> +.gif" hover="images/menu/menu-home-over.gif" class="rollover" />.gif" hover="images/menu/menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu/menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu/menu-admin-over.gif" class="rollover" />.gif" hover="images/menu/menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> + +.gif" hover="images/menu/menu-home-over.gif" class="rollover" />.gif" hover="images/menu/menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu/menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu/menu-admin-over.gif" class="rollover" />.gif" hover="images/menu/menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> - -.gif" hover="images/menu/menu-reportingoptions-over.gif" class="rollover" /> - -settings->reportingModule == "Y") echo "      "; ?> - @@ -143,6 +128,11 @@ if ($config->settings->cancellationModule == 'Y') { ?>
  • + settings->managementModule == 'Y') { + ?> +
  • From cdf1d7d9ac9adefd2870cb04385e733c73a82caa Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 28 Dec 2015 12:35:46 -0700 Subject: [PATCH 07/52] CAMP-853: Merged Ryan's CSS Changes --- images/change/coral-management.png | Bin 0 -> 2203 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/change/coral-management.png diff --git a/images/change/coral-management.png b/images/change/coral-management.png new file mode 100644 index 0000000000000000000000000000000000000000..94a36f5555d0ad69d7b5df07d58682c99dbcc6a4 GIT binary patch literal 2203 zcmbVOdsGu=7LOoErJ${#0wOUy6fp0EkVrsCKxhddghwp`lgR`kfiwIi70@Xz*4;MKGE7ejd0;0f?)mjw069v0_j;DX@oHO&?`+fI!@BQxU zOm0}n9*ecMYf&haMNl9+99cEUyTi;B`I;_`3z5YJ_K$%hBmy`MkU=P4zJv#%gG4|g z6b=D=RcbHfg+dw2h1?i8h7-&HB_bSPkijWMQUr}cdHE=%0GJHHXdaX(6f-e%S2{3g zA)kqfrg8`zDGN#x2ByoPi1ZLHn4S#M`4}H>w3m{BC=fv~fL4l9#Bzp`iFvJ;fzXC+ zJO=$*1WsmR-Z&M*2}83aG6+q@d0;_;2MtZ52y4SgeQ@(hy+%y62pKJ zE0#O1XkbHfP$rbZLWvk{&O$6#BdOs zi9t?qd?BAf_k?(Kz9)bM2qXYYAyPmrj||eVRI&$=40_ObR2sOV=bd<}KY_*~u;?@v ziAeOP`g;0N*;E$A-`~%}kKjpK!3K%tFdzn@7286C?KfDzKgBXwG6;YrGOk3DvQhy3krf?&zy5p^b%)&BE{BD094CcE8ociF(Sp0@HxdDE$ zEf3G;)^6)&qtW%a!1oRZXPMkTQhe>NCSMFU2?_gl?cEJxLTF9I(;L4(zJ9UAh*;y9 zaXy1a|FIvAvk@_d7o0nSe`=q*mnNV4b#Q56U-S+uqr&Om^`PFwg{BA?*1 z>P%H{rjbK-d{>8lY2y&j&RVz1v@>taX`nT)o3UEcxpkgCXOmFMn8_sXi*0{Do$kNY zWSerW&d4J>t?R`Y`uSGfRkivPJtf*HV$v~u9qzN#dE48l?oN@kalXl^-NMV5#nZ)t^qct}K?99LaYouoyNrOsCF8*y$>#RK?8eKZ<>fV9GL5WA5$sHq z4dxwitrF%=KdFn~tlehZ8rpEdtz-X}qUh=GDs4Nhv;kQist23Yf~Z^5vkGV-19)=p zBDufv>phd4Th9PRs2Xd>d0%d=Lq(B9<=1U}*8hNdX_`4nVK`*0^#*>JAf71%+47uI z;X?zi+JjvdDXebw3wi$>?@X=x)hRdCXlbz^Q}15FeG2`C35;`G_&0e&U0cDSb=TcEn^oL4i_?y-9(p**wTu4CquU!TL$1|CBwsjo zyueNC2%aD{DS&_Qpsf(MvZnT)}{1yA$a!Z2!#4lAhoYu6Rzn1PiUfS8H zExK8^i(5brQ?TQh>7pY1@T^Q^7Reqg>d89*_C^4pJ`kBXGXJ8Dax zd1}kyDW*n(esDn+d-Skd`l2Xx?^VvBR6SN0vLAPrBIQ_Bn{D{I>)D!)zxz2}YOeP$ zHqJ_XNmnPlaNZT??fQ7^ew-y(l0D*USJ1I3YbL?L(>Lcx9mp6?K*#LqcSh=RomsBk_#={ zpSK>(=b!y_jB?4W^_xeRPv4NuXkv49mX=Xj9Zcc~Y5$f-#A5rsd$xbz$T_CEdqC>g zV9vVOXHhhCUK^#KIauvlZiJG_7J2or(LIvcq9u;>v@c$GX-$`J zwN^Hy(f$m!Tu^`O(1!1oWyf%ebASfW(sK(uQU_dqB1aRJOtmA?`6=W2$H*KIMl}ot qFHZ(->HkayWLzMVA+m7RoPetEv$cpRu1PlhE(H09up9gmvi}1<^L{M= literal 0 HcmV?d00001 From 5117e2b8ef4c2e3b9f44dddd9cf201c5f6e63d8e Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Thu, 14 Jan 2016 15:40:53 -0700 Subject: [PATCH 08/52] CAMP-853: Final CSS Changes --- ajax_forms.php | 77 +++++---- css/style.css | 424 +++++++++++++++++++++++++++---------------------- 2 files changed, 272 insertions(+), 229 deletions(-) diff --git a/ajax_forms.php b/ajax_forms.php index c30cfb3..0e92496 100755 --- a/ajax_forms.php +++ b/ajax_forms.php @@ -52,18 +52,17 @@ - + + - - - +

    Email Address

    Email Address
    emailAddress; ?>' style='width:190px;'/> - +

    close

    close

    @@ -75,9 +74,9 @@ if(e.keyCode == 13) { doSubmitLogEmailAddress(); } - }); + }); - + $sushiServiceID))); + $sushiService = new SushiService(new NamedArguments(array('primaryKey' => $sushiServiceID))); - $sushiService->setDefaultImportDates(); + $sushiService->setDefaultImportDates(); ?>
    @@ -111,7 +110,7 @@
    (yyyy-mm-dd)
    (yyyy-mm-dd)
    - + @@ -190,7 +189,7 @@ } }); - + + - + @@ -350,7 +349,7 @@ case 'getPublisherNoteForm': if (isset($_GET['publisherPlatformNoteID'])) $publisherPlatformNoteID = $_GET['publisherPlatformNoteID']; else $publisherPlatformNoteID = ''; - if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; + if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; if ($publisherPlatformNoteID){ $addUpdate = 'Update'; @@ -380,7 +379,7 @@ - + @@ -416,8 +415,8 @@ case 'getLoginForm': if (isset($_GET['externalLoginID'])) $externalLoginID = $_GET['externalLoginID']; else $externalLoginID = ''; - if (isset($_GET['platformID'])) $platformID = $_GET['platformID']; else $platformID = ''; - if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; else $publisherPlatformID = ''; + if (isset($_GET['platformID'])) $platformID = $_GET['platformID']; else $platformID = ''; + if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; else $publisherPlatformID = ''; if ($externalLoginID){ $addUpdate = 'Update'; @@ -444,10 +443,10 @@ - + - + @@ -481,8 +480,8 @@ //sushi service information case 'getSushiForm': $sushiServiceID = $_GET['sushiServiceID']; - $platformID = $_GET['platformID']; - + $platformID = $_GET['platformID']; + if ($sushiServiceID){ $addUpdate = 'Update'; @@ -526,7 +525,7 @@ - + @@ -534,7 +533,7 @@ - + - + - + @@ -588,7 +587,7 @@ //form to edit associated organizations - case 'getOrganizationForm': + case 'getOrganizationForm': $publisherPlatformID = $_GET['publisherPlatformID']; $platformID = $_GET['platformID']; @@ -637,7 +636,7 @@ $titleID))); @@ -987,10 +986,10 @@
    Update Outlier - Level outlierLevel; ?>

    Update Outlier - Level outlierLevel; ?>

    @@ -542,13 +541,13 @@
    (optional)
    - only needed for HTTP or WSSE Authentication
    (optional)
    - only needed for HTTP or WSSE Authentication
    - - - - + + + + @@ -392,8 +391,8 @@ @@ -459,8 +458,8 @@ @@ -568,8 +567,8 @@ @@ -622,8 +621,8 @@ - - + +
    User

    @@ -1040,8 +1039,8 @@ default: - echo "Function " . $_REQUEST['function'] . " not set up!"; - break; + echo "Function " . $_REQUEST['function'] . " not set up!"; + break; } diff --git a/css/style.css b/css/style.css index 397b271..b6b9119 100755 --- a/css/style.css +++ b/css/style.css @@ -1,40 +1,40 @@ html { - height: 100%; - margin: 0; - padding: 0; - -webkit-font-smoothing: antialiased; + height: 100%; + margin: 0; + padding: 0; + -webkit-font-smoothing: antialiased; } body { - height: 100%; - text-decoration: none; - color: #666; - font-family: Arial, sans-serif; - font-size: 14px; - font-weight: 30; - background: #E7E8E8; - margin: 0; /* it's good practice to zero the margin and padding of the body element to account for differing browser defaults */ - padding: 0; - text-align: center; /* this centers the container in IE 5* browsers. The text is then set to the left aligned default in the #container selector */ - background: #E7E8E8 url(../images/bg-gray-texture.jpg) repeat top left; - -webkit-font-smoothing: antialiased; + height: 100%; + text-decoration: none; + color: #666; + font-family: Arial, sans-serif; + font-size: 14px; + font-weight: 30; + background: #E7E8E8; + margin: 0; /* it's good practice to zero the margin and padding of the body element to account for differing browser defaults */ + padding: 0; + text-align: center; /* this centers the container in IE 5* browsers. The text is then set to the left aligned default in the #container selector */ + background: #E7E8E8 url(../images/bg-gray-texture.jpg) repeat top left; + -webkit-font-smoothing: antialiased; } .wrapper { - margin: 0 auto -2em; - height; 120px; - background-image: url("../images/back-header.jpg"); - background-repeat: repeat-x; - padding-bottom: 40px; + margin: 0 auto -2em; + height; 120px; + background-image: url("../images/back-header.jpg"); + background-repeat: repeat-x; + padding-bottom: 40px; } table { - border-collapse: collapse; - border-spacing: 0; + border-collapse: collapse; + border-spacing: 0; } .push { - height: 2em; + height: 2em; } .footer { @@ -43,7 +43,7 @@ font-size:80%; color:#526972; text-align:center; width:100%; -} +} a {color:#3D545D;} a:active {color:#94a9be;} @@ -67,8 +67,8 @@ a.helpfulLink {color:#526972;} .boldText{font-weight:bold;} .bigBlueText { - font-size: 125%; - color: #1B77AA; + font-size: 125%; + color: #1B77AA; } .headerText {font-size:125%;font-weight:bold; } @@ -103,7 +103,7 @@ div.queueMenuLink a:hover {color:#526972;text-decoration:underline;} div.queueMenuLink a:focus {color:#3D545D; outline: none; font-weight:bold;} -table.queueMenuTable { +table.queueMenuTable { border-width: 0 0 1px 1px; border-style: solid; border-color: #e6e5e9; @@ -117,8 +117,8 @@ table.queueMenuTable td { margin: 0; padding: 3px 3px 3px 3px; background-color: #f6f8fa; - border-top: 1px solid #e6e5e9; - vertical-align:top; + border-top: 1px solid #e6e5e9; + vertical-align:top; -moz-border-radius: 0px; } @@ -126,10 +126,10 @@ table.queueMenuTable td { table.queueMenuTable td.selected { margin: 0; padding: 3px 3px 3px 3px; - border-top: 1px solid #e6e5e9; - background-color: #f2f5f7; - background-image:url('../images/tab.gif'); - background-repeat:no-repeat; + border-top: 1px solid #e6e5e9; + background-color: #f2f5f7; + background-image:url('../images/tab.gif'); + background-repeat:no-repeat; background-position:right top; -moz-border-radius: 0px; } @@ -142,12 +142,12 @@ table.queueMenuTable td.selected a:focus {color:#526972;outline: none;} -table.queueMenuTable tr { +table.queueMenuTable tr { vertical-align:top; } -td.queueRightPanel { +td.queueRightPanel { border-width: 1px 1px 1px 1px; border-style: solid; border-color: #e6e5e9; @@ -160,7 +160,7 @@ td.queueRightPanel { -table.queueDataTable { +table.queueDataTable { border-width: 0 1px 1px 1px; border-style: solid; border-color: #e6e5e9; @@ -190,7 +190,7 @@ table.queueDataTable th { -moz-border-radius: 0px; } -table.queueDataTable tr { +table.queueDataTable tr { vertical-align:top; } @@ -212,7 +212,7 @@ div.adminMenuLink a:hover {color:#526972;text-decoration:underline;} div.adminMenuLink a:focus {color:#3D545D; outline: none; font-weight:bold;} -table.adminMenuTable { +table.adminMenuTable { border-width: 0 0 1px 1px; border-style: solid; border-color: #e6e5e9; @@ -226,8 +226,8 @@ table.adminMenuTable td { margin: 0; padding: 3px 3px 3px 3px; background-color: #f6f8fa; - border-top: 1px solid #e6e5e9; - vertical-align:top; + border-top: 1px solid #e6e5e9; + vertical-align:top; -moz-border-radius: 0px; } @@ -235,10 +235,10 @@ table.adminMenuTable td { table.adminMenuTable td.selected { margin: 0; padding: 3px 3px 3px 3px; - border-top: 1px solid #e6e5e9; - background-color: #f2f5f7; - background-image:url('../images/tab.gif'); - background-repeat:no-repeat; + border-top: 1px solid #e6e5e9; + background-color: #f2f5f7; + background-image:url('../images/tab.gif'); + background-repeat:no-repeat; background-position:right top; -moz-border-radius: 0px; } @@ -251,12 +251,12 @@ table.adminMenuTable td.selected a:focus {color:#526972;outline: none;} -table.adminMenuTable tr { +table.adminMenuTable tr { vertical-align:top; } -td.adminRightPanel { +td.adminRightPanel { border-width: 1px 1px 1px 1px; border-style: solid; border-color: #e6e5e9; @@ -269,7 +269,7 @@ td.adminRightPanel { -table.linedDataTable { +table.linedDataTable { border-width: 0 1px 1px 1px; border-style: solid; border-color: #e6e5e9; @@ -304,7 +304,7 @@ table.linedDataTable th { -moz-border-radius: 0px; } -table.linedDataTable tr { +table.linedDataTable tr { vertical-align:top; } @@ -323,18 +323,18 @@ div.f3 { clear: both; } .checkboxes label{ - display: block; - float: left; - padding-right: 10px; - white-space: nowrap; + display: block; + float: left; + padding-right: 10px; + white-space: nowrap; } .checkboxes input{ - vertical-align: middle; + vertical-align: middle; } .checkboxes label span{ - vertical-align: middle; + vertical-align: middle; } @@ -342,37 +342,37 @@ div.f3 { clear: both; } table#title {padding:0px; background-image:url('../images/organizationstitle.jpg');background-repeat:no-repeat;height:120px;width:900px;} table.headerTable { - padding: 1px; - width: 1024px; - min-height:40px; - background: none !important; - border-collapse: collapse; + padding: 1px; + width: 1024px; + min-height:40px; + background: none !important; + border-collapse: collapse; } hr { - border:0; - border-bottom: 1px solid #e0dfe3; - height: 0; - background: #e0dfe3; + border:0; + border-bottom: 1px solid #e0dfe3; + height: 0; + background: #e0dfe3; } #search_box { - width: 170px; - height: 19px; - background: url('../images/searchbox.gif'); + width: 170px; + height: 19px; + background: url('../images/searchbox.gif'); } #search_box #search_organization { - float: left; - padding: 0; - margin: 2px 0 0 6px; - border: 0; - width: 159px; - background: none; + float: left; + padding: 0; + margin: 2px 0 0 6px; + border: 0; + width: 159px; + background: none; } #search_box #go { - float: right; - margin: 3px 4px 0 0; + float: right; + margin: 3px 4px 0 0; } @@ -406,32 +406,32 @@ ul.tabs a{ } .printContent{ - padding: 24px 24px 24px 24px; - background-color: white; - text-align:left; - background-color: white; - vertical-align: top; - + padding: 24px 24px 24px 24px; + background-color: white; + text-align:left; + background-color: white; + vertical-align: top; + } -table.formTable td { +table.formTable td { margin:4px; padding:4px; } -table.formTable tr { +table.formTable tr { vertical-align:top; } -table.formTable td.alt { +table.formTable td.alt { margin:4px; padding:4px; background-color:#f0f2f4; } -table.verticalFormTable { +table.verticalFormTable { border-width: 0 0 1px 1px; border-style: solid; border-color: #e0dfe3; @@ -461,23 +461,23 @@ table.verticalFormTable th { } -table.verticalFormTable tr { +table.verticalFormTable tr { vertical-align:top; } -table.verticalFormTable td.complete { +table.verticalFormTable td.complete { background-color:#f2f5f7; } -table.verticalFormTable td.outstanding { +table.verticalFormTable td.outstanding { background-color:#fdf2e7; } -table.linedFormTable { +table.linedFormTable { border-width: 0 1px 1px 1px; border-style: solid; border-color: #e6e5e9; @@ -518,16 +518,16 @@ table.linedFormTable th { } -table.linedFormTable tr { +table.linedFormTable tr { vertical-align:top; } -table.linedFormTable tr.lightGrayBackground td { +table.linedFormTable tr.lightGrayBackground td { background-color:#ebebeb; } -table.linedFormTable td.outstanding { +table.linedFormTable td.outstanding { background-color:#fdf2e7; } @@ -544,15 +544,15 @@ div.formTitle { span.surroundBoxTitle { - background-color:white; - position:relative; - top:8px; + background-color:white; + position:relative; + top:8px; left:5px; font-size:110%; } -table.surroundBox { +table.surroundBox { border-width: 1px; border-style: solid; border-color: #e6e5e9; @@ -568,7 +568,7 @@ table.surroundBox td { -moz-border-radius: 0px; } -table.surroundBox tr { +table.surroundBox tr { vertical-align:top; } @@ -586,16 +586,16 @@ table.noMargin td { border:0px;margin:0px; padding:0px; } div.thickboxDiv{display:none;} table.thickboxTable{ - padding:6px; - text-decoration: none; - color: #2c3c42; - font-family: "arial"; - font-size: 8pt; - font-weight: heavy; + padding:6px; + text-decoration: none; + color: #2c3c42; + font-family: "arial"; + font-size: 8pt; + font-weight: heavy; } table.thickboxTable td{ - padding:1px; + padding:1px; } .infoText{font-size:small;font-weight:normal; color:gray} @@ -620,15 +620,15 @@ a.dp-choose-date { display: block; text-indent: -2000px; overflow: hidden; - background: url('../images/calendar.gif') no-repeat; + background: url('../images/calendar.gif') no-repeat; } a.dp-choose-date.dp-disabled { background-position: 0 -20px; cursor: default; } /* makes the input field shorter once the date picker code - * has run (to allow space for the calendar icon - */ + * has run (to allow space for the calendar icon + */ input.dp-applied { width: 140px; float: left; @@ -639,51 +639,51 @@ input.dp-applied { -.changeInput{ - padding:1px; - outline:none; -} +.changeInput{ + padding:1px; + outline:none; +} -select.changeSelect{ - padding:0px; -} +select.changeSelect{ + padding:0px; +} -select option.changeSelect{ - padding:0px; +select option.changeSelect{ + padding:0px; } -.changeDefault{ - padding:2px; - outline:none; - background:#f5f8fa; - border: solid 1px #a5acb2; - color: #526972; -} +.changeDefault{ + padding:2px; + outline:none; + background:#f5f8fa; + border: solid 1px #a5acb2; + color: #526972; +} -.focusField{ - border:solid 1px #526972; - background:#f5f8fa; - color:#2c3c42; -} -.idleField{ - background:#fbfbfb; - color: #526972; - border: solid 1px #a5acb2; -} +.focusField{ + border:solid 1px #526972; + background:#f5f8fa; + color:#2c3c42; +} +.idleField{ + background:#fbfbfb; + color: #526972; + border: solid 1px #a5acb2; +} .changeAutocomplete{ - padding:2px; - outline:none; - background:#f5f8fa; - border: solid 1px #a5acb2; - color: #526972; -} + padding:2px; + outline:none; + background:#f5f8fa; + border: solid 1px #a5acb2; + color: #526972; +} -.changeDefaultWhite{ - border: solid 1px #a5acb2; - color: #526972; -} +.changeDefaultWhite{ + border: solid 1px #a5acb2; + color: #526972; +} /*-------------------------------------------------------------------*/ @@ -1224,7 +1224,7 @@ table.borderedHeadTable tr { table.noBorder td { border:0; } table.smallPadding td { - padding:1px; + padding:1px; } table.noMargin { border:0px;margin:0px; padding:0px;text-align:center; } @@ -1238,16 +1238,16 @@ table.noMargin td { border:0px;margin:0px; padding:0px; } div.thickboxDiv{display:none;} table.thickboxTable{ - padding:6px; - text-decoration: none; - color: #2c3c42; - font-family: "arial"; - font-size: 8pt; - font-weight: heavy; + padding:6px; + text-decoration: none; + color: #2c3c42; + font-family: "arial"; + font-size: 8pt; + font-weight: heavy; } table.thickboxTable td{ - padding:1px; + padding:1px; } .smallText{font-size:small;} @@ -1278,8 +1278,8 @@ a.dp-choose-date.dp-disabled { cursor: default; } /* makes the input field shorter once the date picker code - * has run (to allow space for the calendar icon - */ + * has run (to allow space for the calendar icon + */ input.dp-applied { width: 140px; float: left; @@ -1290,51 +1290,51 @@ input.dp-applied { -.changeInput{ - padding:1px; - outline:none; -} +.changeInput{ + padding:1px; + outline:none; +} -select.changeSelect{ - padding:0px; -} +select.changeSelect{ + padding:0px; +} -select option.changeSelect{ - padding:0px; +select option.changeSelect{ + padding:0px; } -.changeDefault{ - padding:2px; - outline:none; - background:#f5f8fa; - border: solid 1px #a5acb2; - color: #526972; -} +.changeDefault{ + padding:2px; + outline:none; + background:#f5f8fa; + border: solid 1px #a5acb2; + color: #526972; +} -.focusField{ - border:solid 1px #526972; - background:#f5f8fa; - color:#2c3c42; -} -.idleField{ - background:#fbfbfb; - color: #526972; - border: solid 1px #a5acb2; -} +.focusField{ + border:solid 1px #526972; + background:#f5f8fa; + color:#2c3c42; +} +.idleField{ + background:#fbfbfb; + color: #526972; + border: solid 1px #a5acb2; +} .changeAutocomplete{ - padding:2px; - outline:none; - background:#f5f8fa; - border: solid 1px #a5acb2; - color: #526972; -} + padding:2px; + outline:none; + background:#f5f8fa; + border: solid 1px #a5acb2; + color: #526972; +} -.changeDefaultWhite{ - border: solid 1px #a5acb2; - color: #526972; -} +.changeDefaultWhite{ + border: solid 1px #a5acb2; + color: #526972; +} /*--- Additional Custom CSS ---*/ @@ -2036,7 +2036,7 @@ table.thickboxTable .headerText { text-transform: capitalize; margin-left: 5px; position: relative; - left: -76px; + left: -31px; } #div_updateForm input[value=cancel]:hover { @@ -2332,3 +2332,47 @@ div#div_recentImports { #importForm fieldset:nth-of-type(1) label { padding-left: 70px; } + +/*--- IE 11 Fix for Sidemenu Link Color ---*/ + +.sidemenu span.link a { + color: #fff; +} + +.sidemenu span.link a:hover { + color: #ccc; +} + +/*--- Add New Email Address Modal ---*/ + +#div_updateForm a#addButton { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + text-decoration: none; +} + +#div_updateForm a#addButton:hover { + cursor: pointer; +} + +#div_updateForm a#closeButton { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + text-decoration: none; +} + +#div_updateForm a#closeButton:hover { + cursor: pointer; +} From 6200c98410358d2634834aa65436c6474617ff78 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Tue, 19 Jan 2016 12:29:52 -0700 Subject: [PATCH 09/52] CAMP-834: Fixed a bug in the install script for step 4 of the installation -- was not executing the mysqli_select_db properly. --- install/install.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/install.php b/install/install.php index 9e89103..005f74a 100755 --- a/install/install.php +++ b/install/install.php @@ -142,7 +142,7 @@ }else{ //next check that the database exists - $dbcheck = @mysqli_select_db("$database_name"); + $dbcheck = @mysqli_select_db($link,$database_name); if (!$dbcheck) { $errorMessage[] = "Unable to access the database '" . $database_name . "'. Please verify it has been created.
    MySQL Error: " . mysqli_error($link); }else{ From 450662f62b3084892fc09e8d75dcf9382493320e Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Wed, 27 Jan 2016 09:51:20 -0700 Subject: [PATCH 10/52] CAMP-853: Finalizing CSS --- ajax_forms.php | 2 +- css/style.css | 13 +++++++------ old/ajax_forms.php | 32 ++++++++++++++++---------------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/ajax_forms.php b/ajax_forms.php index 0e92496..381f7bf 100755 --- a/ajax_forms.php +++ b/ajax_forms.php @@ -819,7 +819,7 @@
    - + diff --git a/css/style.css b/css/style.css index b6b9119..cdda06c 100755 --- a/css/style.css +++ b/css/style.css @@ -38,11 +38,12 @@ table { } .footer { -height: 2em; -font-size:80%; -color:#526972; -text-align:center; -width:100%; + height: 3em; + font-size: 80%; + text-align: center; + /*-*/width: 100%; + font-style: italic; + text-align: center; } a {color:#3D545D;} @@ -2318,7 +2319,7 @@ div#div_recentImports { .dataTable td:nth-child(3) { max-width: 380px; - word-wrap: break-word; + word-wrap: break-all; } .dataTable th:nth-child(4) { diff --git a/old/ajax_forms.php b/old/ajax_forms.php index 935a17c..94c5329 100755 --- a/old/ajax_forms.php +++ b/old/ajax_forms.php @@ -46,9 +46,9 @@ if(e.keyCode == 13) { processEmailAddress(); } - }); + }); - + + @@ -661,7 +661,7 @@ //Related Titles (this form is display only) case 'getRelatedTitlesForm': - if (isset($_GET['titleID'])) $titleID = $_GET['titleID']; + if (isset($_GET['titleID'])) $titleID = $_GET['titleID']; ?>
    @@ -735,12 +735,12 @@ default: - echo "Function " . $_REQUEST['function'] . " not set up!"; - break; + echo "Function " . $_REQUEST['function'] . " not set up!"; + break; } -?> \ No newline at end of file +?> From 9834a87dec282ec3736081889d525435c885099b Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Fri, 29 Jan 2016 09:29:14 -0700 Subject: [PATCH 11/52] CAMP-853: Final CSS --- css/style.css | 16 ++++++++++++++++ templates/header.php | 6 +++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/css/style.css b/css/style.css index cdda06c..40fc88d 100755 --- a/css/style.css +++ b/css/style.css @@ -31,6 +31,7 @@ body { table { border-collapse: collapse; border-spacing: 0; + /*-*/margin: 0 auto; } .push { @@ -871,6 +872,7 @@ table.dataTable { font-size:90%; margin-top: 11px; margin-bottom: 10px; + /*-*/margin-left: 0; } table.dataTable td { @@ -2377,3 +2379,17 @@ div#div_recentImports { #div_updateForm a#closeButton:hover { cursor: pointer; } + +/*--- Left Align Table Header Text ---*/ + +table.dataTable th { + text-align: left; +} + +/*--- IE10 and IE11 Only ---*/ +@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { + #div_updateForm input#update-user-cancel { + left: 39px; + top: -23px; + } +} \ No newline at end of file diff --git a/templates/header.php b/templates/header.php index e62b286..84f8b53 100755 --- a/templates/header.php +++ b/templates/header.php @@ -53,15 +53,15 @@ -
    +
    -
    +
    Add New Platform for SUSHI Connection

    @@ -165,8 +165,8 @@ - - + +
    -
    + From 36d05d79322213559aa22d00f3d122484c5fee66 Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Wed, 9 Mar 2016 09:56:29 -0700 Subject: [PATCH 17/52] CAMP-925: Various Layout Fixes/Issues and Downtime CSS --- css/style.css | 8 ++++++++ templates/header.php | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index c4a9294..ff03d8f 100755 --- a/css/style.css +++ b/css/style.css @@ -2419,4 +2419,12 @@ a#help:before { content: "\f059"; font-size: 11px; margin-right: 3px; +} + +/*--- Adjustments for Language Dropdown ---*/ + +select#lang { + border: none; + margin-left: 10px; + background-color: #fff; } \ No newline at end of file diff --git a/templates/header.php b/templates/header.php index 826686b..4fd6d95 100755 --- a/templates/header.php +++ b/templates/header.php @@ -67,7 +67,7 @@ - - +
    From fb6b43d48764fd8cc3988ba2c0acd899586b356b Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Tue, 2 Feb 2016 14:37:44 -0700 Subject: [PATCH 12/52] Added ajax error callback function for error 499 failues --- js/admin.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/js/admin.js b/js/admin.js index 6a1621e..f6432de 100755 --- a/js/admin.js +++ b/js/admin.js @@ -93,6 +93,9 @@ success: function(html) { $('#div_emailAddresses').html(html); tb_reinit(); + }, + error: function(xhr, ajaxOptions, thrownError) { + alert(xhr.status . "\n\n" . thrownError); } }); From c62d1d150096e4a85852281fcd488aa2ef8503ac Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Tue, 2 Feb 2016 14:47:36 -0700 Subject: [PATCH 13/52] Added ajax error callback function for error 499 failues --- js/admin.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/admin.js b/js/admin.js index f6432de..9778085 100755 --- a/js/admin.js +++ b/js/admin.js @@ -94,8 +94,8 @@ $('#div_emailAddresses').html(html); tb_reinit(); }, - error: function(xhr, ajaxOptions, thrownError) { - alert(xhr.status . "\n\n" . thrownError); + errorkey: "value", function(xhr, ajaxOptions, thrownError) { + alert(xhr.status + "\n\n" + thrownError); } }); From d905e87278db2f916930ce61e8230d8e6fa3c54f Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Tue, 2 Feb 2016 14:52:09 -0700 Subject: [PATCH 14/52] Added ajax error callback function for error 499 failues --- js/admin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/admin.js b/js/admin.js index 9778085..9dcbd5c 100755 --- a/js/admin.js +++ b/js/admin.js @@ -94,7 +94,7 @@ $('#div_emailAddresses').html(html); tb_reinit(); }, - errorkey: "value", function(xhr, ajaxOptions, thrownError) { + error: function(xhr, ajaxOptions, thrownError) { alert(xhr.status + "\n\n" + thrownError); } }); From d38e52e604379695b9e3f4798df0b83dc3b31ea3 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Wed, 3 Feb 2016 08:40:50 -0700 Subject: [PATCH 15/52] Removed ajax error callback function for error 499 failues -- didn't fix antivirus issue --- js/admin.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/js/admin.js b/js/admin.js index 9dcbd5c..6a1621e 100755 --- a/js/admin.js +++ b/js/admin.js @@ -93,9 +93,6 @@ success: function(html) { $('#div_emailAddresses').html(html); tb_reinit(); - }, - error: function(xhr, ajaxOptions, thrownError) { - alert(xhr.status + "\n\n" + thrownError); } }); From 1f0795da46ceea224a17b318fa8ebc3b8661ec1a Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Mon, 22 Feb 2016 13:48:27 -0700 Subject: [PATCH 16/52] Added Help Link to Logout Menu --- css/style.css | 27 +++++++++++++++++++++++++++ templates/header.php | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/css/style.css b/css/style.css index 40fc88d..c4a9294 100755 --- a/css/style.css +++ b/css/style.css @@ -2392,4 +2392,31 @@ table.dataTable th { left: 39px; top: -23px; } +} + +/*--- Help Menu Link ---*// + +span#divider { + font-size: 12px; + position: relative; + top: 4px; +} + +a#help { + text-decoration: none; + font-size: 12px; + position: relative; + top: 4px; + margin-left: 5px; +} + +a#help:hover { + color: #ccc; +} + +a#help:before { + font-family: FontAwesome; + content: "\f059"; + font-size: 11px; + margin-right: 3px; } \ No newline at end of file diff --git a/templates/header.php b/templates/header.php index 84f8b53..826686b 100755 --- a/templates/header.php +++ b/templates/header.php @@ -80,7 +80,7 @@ } ?> -
    settings->authModule == 'Y'){ echo "logout"; } ?> +
    settings->authModule == 'Y'){ echo "logout | Help"; } ?>
      +
    Date: Wed, 9 Mar 2016 10:37:42 -0700 Subject: [PATCH 18/52] CAMP-925: Various Layout Fixes/Issues and Downtime CSS --- not_avail.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/not_avail.php b/not_avail.php index 89c2ea1..ed280c6 100755 --- a/not_avail.php +++ b/not_avail.php @@ -58,7 +58,7 @@ if ($_GET['errorMessage']){ echo "

    " . $_GET['errorMessage'] . "

    "; }else{ - echo "

    You have not been set up to have access to the Usage Statistics Module. Please contact ER Help to be added.

    "; + echo "

    YPlease contact your Administrator for access to the Usage Statistics Module.

    "; } ?> From d93b4d25ea3e2571c808bec3d719d737e30f6b08 Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Wed, 30 Mar 2016 11:05:43 -0600 Subject: [PATCH 19/52] Added Classes to Buttons --- ajax_forms.php | 55 ++++++++++++++++--------------- css/style.css | 73 +++++++++++++++++++++++++++++++----------- uploadConfirmation.php | 4 +-- 3 files changed, 84 insertions(+), 48 deletions(-) diff --git a/ajax_forms.php b/ajax_forms.php index 381f7bf..221c133 100755 --- a/ajax_forms.php +++ b/ajax_forms.php @@ -60,9 +60,9 @@
    - +

    close

    close

    @@ -125,8 +125,8 @@
    - - + +
                
    @@ -215,19 +215,18 @@ '> - + - - - + +

    Update Report Display Name
    Update Report Display Name
    reportDisplayName . "' style='width:190px;'/>update"; + echo "update"; ?>

    close

    close
    @@ -323,8 +322,8 @@
    - - + +
    - - + +
    - - + +
    - - + +
    @@ -827,8 +826,8 @@
    - - + +
    - - + +


    Close +


    Close
                
    diff --git a/css/style.css b/css/style.css index ff03d8f..3be6e74 100755 --- a/css/style.css +++ b/css/style.css @@ -1937,7 +1937,7 @@ input#submitPlatformForm:hover { background: #999; } -.noBorderTable input#cancel-button { +/*.noBorderTable input#cancel-button { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -1955,7 +1955,7 @@ input#submitPlatformForm:hover { .noBorderTable input#cancel-button:hover { cursor: pointer; background: #999; -} +}*/ #TB_ajaxContent { height: auto !important; @@ -2012,7 +2012,7 @@ table.thickboxTable .headerText { /*--- Adjust Add Login Form Modal Window ---*/ -#div_updateForm input#submitExternalLoginForm { +/*#div_updateForm input#submitExternalLoginForm { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -2044,11 +2044,11 @@ table.thickboxTable .headerText { #div_updateForm input[value=cancel]:hover { cursor: pointer; -} +}*/ /*--- Adjust Update Sushi Connection Form Modal Window ---*/ -#div_updateForm input#submitSushiForm { +/*#div_updateForm input#submitSushiForm { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -2080,11 +2080,11 @@ table.thickboxTable .headerText { #div_updateForm input#update-sushi-cancel:hover { cursor: pointer; -} +}*/ /*--- Adjust Link Associated Organization Form Modal Window ---*/ -#div_organizationsForm input#submitOrganization { +/*#div_organizationsForm input#submitOrganization { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -2116,11 +2116,11 @@ table.thickboxTable .headerText { #div_organizationsForm input[value=cancel]:hover { cursor: pointer; -} +}*/ /*--- Adjust Update Sushi Connection Form Modal Window ---*/ -#div_updateForm input#submitPlatformNoteForm { +/*#div_updateForm input#submitPlatformNoteForm { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -2152,11 +2152,11 @@ table.thickboxTable .headerText { #div_updateForm input#interface-cancel:hover { cursor: pointer; -} +}*/ /*--- Adjust Update User Form Modal Window ---*/ -#div_updateForm input[value=Update] { +/*#div_updateForm input[value=Update] { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -2190,11 +2190,11 @@ table.thickboxTable .headerText { #div_updateForm input#update-user-cancel:hover { cursor: pointer; -} +}*/ /*--- Adjust Add New User Form Modal Window ---*/ -#div_updateForm input[value=Add\ New] { +/*#div_updateForm input[value=Add\ New] { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -2209,7 +2209,7 @@ table.thickboxTable .headerText { #div_updateForm input[value=Add\ New]:hover { cursor: pointer; -} +}*/ /*--- More Spacing for Headers ---*/ @@ -2223,7 +2223,7 @@ table.thickboxTable .headerText { /*--- Adjust Update Outlier Form Modal Window ---*/ -#div_updateForm input#outlier-cancel { +/*#div_updateForm input#outlier-cancel { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -2239,7 +2239,7 @@ table.thickboxTable .headerText { #div_updateForm input#outlier-cancel:hover { cursor: pointer; -} +}*/ /*--- Side Menu Icons ---*/ @@ -2348,7 +2348,7 @@ div#div_recentImports { /*--- Add New Email Address Modal ---*/ -#div_updateForm a#addButton { +/*#div_updateForm a#addButton { color: #FFFFFF; font-family: "Arial", sans-serif; font-size: 11px; @@ -2378,7 +2378,7 @@ div#div_recentImports { #div_updateForm a#closeButton:hover { cursor: pointer; -} +}*/ /*--- Left Align Table Header Text ---*/ @@ -2427,4 +2427,41 @@ select#lang { border: none; margin-left: 10px; background-color: #fff; +} + +/*--- Consistentcy for Form Buttons ---*/ + +.submit-button, +.cancel-button, +.save-button + { + color: #FFFFFF; + font-family: "Arial", sans-serif; + font-size: 11px; + font-weight: normal; + background: #1b76a9; + border: none; + padding: 5px 10px; + text-transform: capitalize; + margin-left: 8px; + min-width: 60px; + margin-top: 5px; +} + +.submit-button:hover, +.cancel-button:hover, +.save-button { + cursor: pointer; +} + +.submit-button { + margin-left: 0; +} + +a.submit-button, +a.cancel-button, +a.save-button + { + color: #FFFFFF !important; + text-decoration: none !important; } \ No newline at end of file diff --git a/uploadConfirmation.php b/uploadConfirmation.php index d41c7c8..20c0102 100755 --- a/uploadConfirmation.php +++ b/uploadConfirmation.php @@ -305,10 +305,10 @@ function updateSubmit(){
    - onclick="javascript:updateSubmit();" /> + onclick="javascript:updateSubmit();" class="submit-button" /> - +
    From bf4a0145c9746b1a9fa0bcb11953c70c62840c08 Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Thu, 31 Mar 2016 11:46:39 -0600 Subject: [PATCH 20/52] Made Sort Arrows Consistent --- css/style.css | 8 +- js/common.js | 385 ++++++++++++++++++++++++++++---------------------- js/index.js | 254 ++++++++++++++++++--------------- 3 files changed, 358 insertions(+), 289 deletions(-) diff --git a/css/style.css b/css/style.css index 3be6e74..702585f 100755 --- a/css/style.css +++ b/css/style.css @@ -2329,7 +2329,7 @@ div#div_recentImports { } .dataTable th:nth-child(5) { - max-width: 60px !important; + max-width: 75px !important; } #importForm fieldset:nth-of-type(1) label { @@ -2464,4 +2464,10 @@ a.save-button { color: #FFFFFF !important; text-decoration: none !important; +} + +/*--- Adjustments to Up/Down Arrows ---*/ + +table.noBorderTable td.arrow { + text-align: right; } \ No newline at end of file diff --git a/js/common.js b/js/common.js index 5506d94..ee972f1 100755 --- a/js/common.js +++ b/js/common.js @@ -1,35 +1,38 @@ - - - - //image preloader -(function($) { - var cache = []; - // Arguments are image paths relative to the current page. - $.preLoadImages = function() { - var args_len = arguments.length; - for (var i = args_len; i--;) { - var cacheImage = document.createElement('img'); - cacheImage.src = arguments[i]; - cache.push(cacheImage); - } - } +(function($) +{ + var cache = []; + // Arguments are image paths relative to the current page. + $.preLoadImages = function() + { + var args_len = arguments.length; + for (var i = args_len; i--;) + { + var cacheImage = document.createElement('img'); + cacheImage.src = arguments[i]; + cache.push(cacheImage); + } + } })(jQuery) -$(function(){ - - //for the Change Module drop down - $('.coraldropdown').each(function () { - $(this).parent().eq(0).hover(function () { - $('.coraldropdown:eq(0)', this).slideDown(100); - }, function () { - $('.coraldropdown:eq(0)', this).slideUp(100); - }); - }); +$(function() +{ + + //for the Change Module drop down + $('.coraldropdown').each(function() + { + $(this).parent().eq(0).hover(function() + { + $('.coraldropdown:eq(0)', this).slideDown(100); + }, function() + { + $('.coraldropdown:eq(0)', this).slideUp(100); + }); + }); }); @@ -39,136 +42,165 @@ $(function(){ var displayInds = []; // 1 visible, 0 hidden -function toggleDivState(divID, intDisplay) { - if(document.layers){ - document.layers[divID].display = intDisplay ? "block" : "none"; - } - else if(document.getElementById){ - var obj = document.getElementById(divID); - obj.style.display = intDisplay ? "block" : "none"; - } - else if(document.all){ - document.all[divID].style.display = intDisplay ? "block" : "none"; - } +function toggleDivState(divID, intDisplay) +{ + if (document.layers) + { + document.layers[divID].display = intDisplay ? "block" : "none"; + } + else if (document.getElementById) + { + var obj = document.getElementById(divID); + obj.style.display = intDisplay ? "block" : "none"; + } + else if (document.all) + { + document.all[divID].style.display = intDisplay ? "block" : "none"; + } } // 1 visible, 0 hidden -function toggleDivs(platformID) { - - imageName = "document.image_" + platformID; - imageName.src="images/arrowdown.gif"; - - divID = 'div_' + platformID; - - - if (typeof displayInds[divID] == "undefined") displayInds[divID] = 1; - - toggleDivState(divID, displayInds[divID]); - - if (displayInds[divID] == 0) displayInds[divID]=1; else displayInds[divID]=0 - - +function toggleDivs(platformID) +{ + + imageName = "document.image_" + platformID; + imageName.src = "images/arrowdown.gif"; + + divID = 'div_' + platformID; + + + if (typeof displayInds[divID] == "undefined") displayInds[divID] = 1; + + toggleDivState(divID, displayInds[divID]); + + if (displayInds[divID] == 0) displayInds[divID] = 1; + else displayInds[divID] = 0 + + } -function replaceSpecial(myString){ +function replaceSpecial(myString) +{ + + var re = new RegExp(/.?&/); + + myString = myString.replace(/\//gi, "\\/"); - var re = new RegExp(/.?&/); - - myString=myString.replace(/\//gi, "\\/"); - - return myString.replace(/\./gi, "\\."); + return myString.replace(/\./gi, "\\."); } -function getCheckboxValue(field){ - if ($('#' + field + ':checked').attr('checked')) { - return 1; - }else{ - return 0; - } +function getCheckboxValue(field) +{ + if ($('#' + field + ':checked').attr('checked')) + { + return 1; + } + else + { + return 0; + } } -function validateRequired(field,alerttxt){ - fieldValue=$("#" + field).val(); - - if (fieldValue==null || fieldValue=="") { - $("#span_error_" + field).html(alerttxt); - $("#" + field).focus(); - return false; - } else { - $("#span_error_" + field).html(''); - return true; - } +function validateRequired(field, alerttxt) +{ + fieldValue = $("#" + field).val(); + + if (fieldValue == null || fieldValue == "") + { + $("#span_error_" + field).html(alerttxt); + $("#" + field).focus(); + return false; + } + else + { + $("#span_error_" + field).html(''); + return true; + } } -function validateNumber(field,alerttxt){ - fieldValue=$("#" + field).val(); +function validateNumber(field, alerttxt) +{ + fieldValue = $("#" + field).val(); - if (isNaN(fieldValue)) { - $("#span_error_" + field).html(alerttxt); - $("#" + field).focus(); - return false; - } else { - $("#span_error_" + field).html(''); - return true; - } + if (isNaN(fieldValue)) + { + $("#span_error_" + field).html(alerttxt); + $("#" + field).focus(); + return false; + } + else + { + $("#span_error_" + field).html(''); + return true; + } } -function validateDate(field,alerttxt) { - $("#span_error_" + field).html(''); - sDate =$("#" + field).val(); - - if (sDate){ - - var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/ - if (re.test(sDate)) { - var dArr = sDate.split("/"); - var d = new Date(sDate); - - if (!(d.getMonth() + 1 == dArr[0] && d.getDate() == dArr[1] && d.getFullYear() == dArr[2])) { - $("#span_error_" + field).html(alerttxt); - $("#" + field).focus(); - return false; - }else{ - return true; - } - - } else { - $("#span_error_" + field).html(alerttxt); - $("#" + field).focus(); - return false; - } - } - - return true; +function validateDate(field, alerttxt) +{ + $("#span_error_" + field).html(''); + sDate = $("#" + field).val(); + + if (sDate) + { + + var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/ + if (re.test(sDate)) + { + var dArr = sDate.split("/"); + var d = new Date(sDate); + + if (!(d.getMonth() + 1 == dArr[0] && d.getDate() == dArr[1] && d.getFullYear() == dArr[2])) + { + $("#span_error_" + field).html(alerttxt); + $("#" + field).focus(); + return false; + } + else + { + return true; + } + + } + else + { + $("#span_error_" + field).html(alerttxt); + $("#" + field).focus(); + return false; + } + } + + return true; } -function postwith (to,p) { - var myForm = document.createElement("form"); - myForm.method="post" ; - myForm.action = to ; - for (var k in p) { - var myInput = document.createElement("input") ; - myInput.setAttribute("name", k) ; - myInput.setAttribute("value", p[k]); - myForm.appendChild(myInput) ; - } - document.body.appendChild(myForm) ; - myForm.submit() ; - document.body.removeChild(myForm) ; +function postwith(to, p) +{ + var myForm = document.createElement("form"); + myForm.method = "post"; + myForm.action = to; + for (var k in p) + { + var myInput = document.createElement("input"); + myInput.setAttribute("name", k); + myInput.setAttribute("value", p[k]); + myForm.appendChild(myInput); + } + document.body.appendChild(myForm); + myForm.submit(); + document.body.removeChild(myForm); } @@ -179,72 +211,83 @@ function postwith (to,p) { if (!Array.prototype.indexOf) { - Array.prototype.indexOf = function(elt /*, from*/) - { - var len = this.length; - - var from = Number(arguments[1]) || 0; - from = (from < 0) - ? Math.ceil(from) - : Math.floor(from); - if (from < 0) - from += len; - - for (; from < len; from++) + Array.prototype.indexOf = function(elt /*, from*/ ) { - if (from in this && - this[from] === elt) - return from; - } - return -1; - }; + var len = this.length; + + var from = Number(arguments[1]) || 0; + from = (from < 0) ? Math.ceil(from) : Math.floor(from); + if (from < 0) + from += len; + + for (; from < len; from++) + { + if (from in this && + this[from] === elt) + return from; + } + return -1; + }; } -function isEmpty(value) { +function isEmpty(value) +{ var error = ""; - - if (value.length == 0) { + + if (value.length == 0) + { return true; - }else{ - return false; + } + else + { + return false; } } -function isISSN (value) { - - value = value.replace('-', ''); - - if (value.length == 8) { - var objRegExp = /^[a-zA-Z0-9]*$/; - - return (objRegExp.test(value)); - }else{ - return false; - } +function isISSN(value) +{ + + value = value.replace('-', ''); + + if (value.length == 8) + { + var objRegExp = /^[a-zA-Z0-9]*$/; + + return (objRegExp.test(value)); + } + else + { + return false; + } } -function isYear (value) { - - if (value.length == 4) { - var objRegExp = /^19|20[0-9][0-9]$/; - - return (objRegExp.test(value)); - }else{ - return false; - } +function isYear(value) +{ + + if (value.length == 4) + { + var objRegExp = /^19|20[0-9][0-9]$/; + + return (objRegExp.test(value)); + } + else + { + return false; + } } -function isNumber (value) { +function isNumber(value) +{ + + var objRegExp = /^[0-9]*$/; + return (objRegExp.test(value)); - var objRegExp = /^[0-9]*$/; - return (objRegExp.test(value)); - } \ No newline at end of file diff --git a/js/index.js b/js/index.js index 0a686ad..481979c 100755 --- a/js/index.js +++ b/js/index.js @@ -1,138 +1,158 @@ /* -************************************************************************************************************************** -** CORAL Usage Statistics Module -** -** Copyright (c) 2010 University of Notre Dame -** -** This file is part of CORAL. -** -** CORAL 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, either version 3 of the License, or (at your option) any later version. -** -** CORAL 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 CORAL. If not, see . -** -************************************************************************************************************************** -*/ - - - $(document).ready(function(){ - - updateSearch(); - - //perform search if enter is hit - $('#searchName').keyup(function(e) { - if(e.keyCode == 13) { - updateSearch(); + ************************************************************************************************************************** + ** CORAL Usage Statistics Module + ** + ** Copyright (c) 2010 University of Notre Dame + ** + ** This file is part of CORAL. + ** + ** CORAL 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, either version 3 of the License, or (at your option) any later version. + ** + ** CORAL 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 CORAL. If not, see . + ** + ************************************************************************************************************************** + */ + + +$(document).ready(function() +{ + + updateSearch(); + + //perform search if enter is hit + $('#searchName').keyup(function(e) + { + if (e.keyCode == 13) + { + updateSearch(); } - }); - - - }); - - + }); + + +}); + + var orderBy = "TRIM(LEADING 'THE ' FROM UPPER(P.name)) asc"; var pageStart = '1'; var numberOfRecords = 25; var startWith = ''; -function updateSearch(){ - $("#div_feedback").html(" Processing..."); - - - $.ajax({ - type: "GET", - url: "ajax_htmldata.php", - cache: false, - data: "action=getSearch&searchName=" + $("#searchName").val() + "&orderBy=" + orderBy + "&pageStart=" + pageStart + "&numberOfRecords=" + numberOfRecords + "&startWith=" + startWith, - success: function(html) { - $("#div_feedback").html(" "); - $('#div_searchResults').html(html); - } - - - }); - +function updateSearch() +{ + $("#div_feedback").html(" Processing..."); + + + $.ajax( + { + type: "GET", + url: "ajax_htmldata.php", + cache: false, + data: "action=getSearch&searchName=" + $("#searchName").val() + "&orderBy=" + orderBy + "&pageStart=" + pageStart + "&numberOfRecords=" + numberOfRecords + "&startWith=" + startWith, + success: function(html) + { + $("#div_feedback").html(" "); + $('#div_searchResults').html(html); + } + + + }); + } - - - function setOrder(column, direction){ - orderBy = column + " " + direction; - updateSearch(); - } - - - function setPageStart(pageStartNumber){ - pageStart=pageStartNumber; - updateSearch(); - } - - - function setNumberOfRecords(numberOfRecordsNumber){ - pageStart = '1'; - numberOfRecords=$("#numberOfRecords").val(); - updateSearch(); - } - - - - - function setStartWith(startWithLetter){ + + +function setOrder(column, direction) +{ + orderBy = column + " " + direction; + updateSearch(); +} + + +function setPageStart(pageStartNumber) +{ + pageStart = pageStartNumber; + updateSearch(); +} + + +function setNumberOfRecords(numberOfRecordsNumber) +{ + pageStart = '1'; + numberOfRecords = $("#numberOfRecords").val(); + updateSearch(); +} + + + + +function setStartWith(startWithLetter) +{ //first, set the previous selected letter (if any) to the regular class - if (startWith != ''){ - $("#span_letter_" + startWith).removeClass('searchLetterSelected').addClass('searchLetter'); + if (startWith != '') + { + $("#span_letter_" + startWith).removeClass('searchLetterSelected').addClass('searchLetter'); } - + //next, set the new start with letter to show selected $("#span_letter_" + startWithLetter).removeClass('searchLetter').addClass('searchLetterSelected'); pageStart = '1'; - startWith=startWithLetter; + startWith = startWithLetter; updateSearch(); - } - - - $(".searchButton").click(function () { - pageStart = '1'; - updateSearch(); - }); - - $(".newSearch").click(function () { +} + + +$(".searchButton").click(function() +{ + pageStart = '1'; + updateSearch(); +}); + +$(".newSearch").click(function() +{ //reset fields $("#searchName").val(""); - + //reset startwith background color $("#span_letter_" + startWith).removeClass('searchLetterSelected').addClass('searchLetter'); - startWith=''; - - orderBy = "TRIM(LEADING 'THE ' FROM UPPER(P.name)) asc"; - pageStart = '1'; + startWith = ''; + + orderBy = "TRIM(LEADING 'THE ' FROM UPPER(P.name)) asc"; + pageStart = '1'; updateSearch(); - }); - - - $("#searchName").focus(function () { - $("#div_searchName").css({'display':'block'}); - }); - - -function showPublisherList(platformID){ - divID = 'div_' + platformID; - - if (typeof displayInds[divID] == "undefined") displayInds[divID] = 1; - - toggleDivState(divID, displayInds[divID]); - - if (displayInds[divID] == 0) { - $('#image_' + platformID).attr('src', "images/arrowright.gif"); - $('#link_' + platformID).text('show publisher list'); - displayInds[divID]=1; - } else { - $('#image_' + platformID).attr('src', "images/arrowdown.gif"); - $('#link_' + platformID).text('hide publisher list'); - displayInds[divID]=0; - } - - -} +}); + + +$("#searchName").focus(function() +{ + $("#div_searchName").css( + { + 'display': 'block' + }); +}); + + +function showPublisherList(platformID) +{ + divID = 'div_' + platformID; + + if (typeof displayInds[divID] == "undefined") displayInds[divID] = 1; + + toggleDivState(divID, displayInds[divID]); + + if (displayInds[divID] == 0) + { + $('#image_' + platformID).attr('src', "images/arrowright.gif"); + $('#link_' + platformID).text('show publisher list'); + displayInds[divID] = 1; + } + else + { + $('#image_' + platformID).attr('src', "images/arrowdown.gif"); + $('#link_' + platformID).text('hide publisher list'); + displayInds[divID] = 0; + } + +} \ No newline at end of file From c91e956a1e8b27ff3e67051d20a6444f67e1cf5c Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Wed, 13 Apr 2016 15:50:23 -0600 Subject: [PATCH 21/52] Adding Localization --- LangCodes.php | 29 + admin.php | 16 +- ajax_forms.php | 16 +- directory.php | 19 +- index.php | 252 ++++---- js/plugins/Gettext.js | 1265 +++++++++++++++++++++++++++++++++++++++ js/plugins/translate.js | 9 + templates/header.php | 56 ++ 8 files changed, 1519 insertions(+), 143 deletions(-) create mode 100644 LangCodes.php create mode 100644 js/plugins/Gettext.js create mode 100644 js/plugins/translate.js diff --git a/LangCodes.php b/LangCodes.php new file mode 100644 index 0000000..b583e00 --- /dev/null +++ b/LangCodes.php @@ -0,0 +1,29 @@ +'fr_FR', + 'en_US'=>'en_US'//, + //'zh_CN'=>'zh_CN', + //'zh_TW'=>'zh_TW', + //'de_DE'=>'de_DE' + ); + return $all_lang[$code]; + } + public function getNameLang($code_lang){ + $name_lang=array( + 'fr_FR'=>'Français', + 'en_US'=>'English'//, + //'zh_CN'=>'中文 (中国)', + //'zh_TW'=>'中文 (台灣)', + //'de_DE'=>'Deutsch' + ); + return $name_lang[$code_lang]; + } +} +?> \ No newline at end of file diff --git a/admin.php b/admin.php index f1b64e9..0e28277 100755 --- a/admin.php +++ b/admin.php @@ -9,11 +9,11 @@
    -Users   -
    add new user +   +


    -Loading... +
    @@ -24,11 +24,11 @@
    -Email addresses for logs   -
    add new email address +   +


    -Loading... +
    @@ -40,10 +40,10 @@
    -Outlier Parameters   +  

    -Loading... +
    diff --git a/ajax_forms.php b/ajax_forms.php index 221c133..3e56bf9 100755 --- a/ajax_forms.php +++ b/ajax_forms.php @@ -36,11 +36,11 @@ if (isset($_GET['logEmailAddressID']) && ($_GET['logEmailAddressID'] != '')){ $logEmailAddressID = $_GET['logEmailAddressID']; - $addUpdate = 'Update'; + $addUpdate = _('Update'); $logEmailAddress = new LogEmailAddress(new NamedArguments(array('primaryKey' => $_GET['logEmailAddressID']))); }else{ $logEmailAddressID = ''; - $addUpdate = 'Add'; + $addUpdate = _('Add'); $logEmailAddress = new LogEmailAddress(); } @@ -52,7 +52,7 @@ - + - +
    Email Address

    @@ -62,7 +62,7 @@

    close

    @@ -103,15 +103,15 @@ - + - + - - + + diff --git a/directory.php b/directory.php index 57464c5..cb4c4eb 100755 --- a/directory.php +++ b/directory.php @@ -138,6 +138,23 @@ function debug($value) { echo '
    '.print_r($value, true).'
    '; } - +// Include file of language codes +include_once 'LangCodes.php'; +$lang_name = new LangCodes(); + +// Verify the language of the browser +global $http_lang; +if(isset($_COOKIE["lang"])){ + $http_lang = $_COOKIE["lang"]; +}else{ + $codeL = str_replace("-","_",substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,5)); + $http_lang = $lang_name->getLanguage($codeL); + if($http_lang == "") + $http_lang = "en_US"; +} +putenv("LC_ALL=$http_lang"); +setlocale(LC_ALL, $http_lang.".utf8"); +bindtextdomain("messages", dirname(__FILE__) . "/locale"); +textdomain("messages"); ?> \ No newline at end of file diff --git a/index.php b/index.php index 100d761..168c4ea 100755 --- a/index.php +++ b/index.php @@ -1,126 +1,126 @@ - -. -** -************************************************************************************************************************** -*/ - - -session_start(); - -include_once 'directory.php'; - -//print header -$pageTitle='Home'; -include 'templates/header.php'; - -//used for creating a "sticky form" for back buttons -//except we don't want it to retain if they press the 'index' button -//check what referring script is - -if ($_SESSION['ref_script'] != "publisherPlatform.php"){ - $reset = "Y"; -} - -$_SESSION['ref_script']=$currentPage; - - -?> - -
    -
    SUSHI Service for getServiceProvider; ?>
    Optional Parameters

    getServiceProvider; ?>


    (yyyy-mm-dd)
    (yyyy-mm-dd)
    - - - -
    - - - - -
    - Search
    - new search -
     
    -
    - - - - - - - - - - - - -
    -
    -
    -
    margin-left:118px;margin-top:5px'>
    -
    -
    -
    - getAlphabeticalList; - - foreach ($alphArray as $letter){ - if ((isset($pAlphArray[$letter])) && ($pAlphArray[$letter] > 0)){ - echo "" . $letter . ""; - if ($letter == "N") echo "
    "; - }else{ - echo "" . $letter . ""; - if ($letter == "N") echo "
    "; - } - } - ?> -
    -
    - -
    -
    -
    - -
    - -"; - - //print footer - include 'templates/footer.php'; + +. +** +************************************************************************************************************************** +*/ + + +session_start(); + +include_once 'directory.php'; + +//print header +$pageTitle='Home'; +include 'templates/header.php'; + +//used for creating a "sticky form" for back buttons +//except we don't want it to retain if they press the 'index' button +//check what referring script is + +if ($_SESSION['ref_script'] != "publisherPlatform.php"){ + $reset = "Y"; +} + +$_SESSION['ref_script']=$currentPage; + + +?> + +
    + + + + +
    + + + + +
    +
    + +
     
    +
    + + + + + + + + + + + + +
    +
    +
    +
    margin-left:118px;margin-top:5px'>
    +
    +
    +
    + getAlphabeticalList; + + foreach ($alphArray as $letter){ + if ((isset($pAlphArray[$letter])) && ($pAlphArray[$letter] > 0)){ + echo "" . $letter . ""; + if ($letter == "N") echo "
    "; + }else{ + echo "" . $letter . ""; + if ($letter == "N") echo "
    "; + } + } + ?> +
    +
    + +
    +
    +
    +
    +
    + +"; + + //print footer + include 'templates/footer.php'; diff --git a/js/plugins/Gettext.js b/js/plugins/Gettext.js new file mode 100644 index 0000000..8a905e6 --- /dev/null +++ b/js/plugins/Gettext.js @@ -0,0 +1,1265 @@ +/* +Pure Javascript implementation of Uniforum message translation. +Copyright (C) 2008 Joshua I. Miller , all rights reserved + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU Library General Public License as published +by the Free Software Foundation; either version 2, or (at your option) +any later version. + +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 +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +USA. + +=head1 NAME + +Javascript Gettext - Javascript implemenation of GNU Gettext API. + +=head1 SYNOPSIS + + // ////////////////////////////////////////////////////////// + // Optimum caching way + + + + var gt = new Gettext({ "domain" : "myDomain" }); + // rest is the same + + + // ////////////////////////////////////////////////////////// + // The reson the shortcuts aren't exported by default is because they'd be + // glued to the single domain you created. So, if you're adding i18n support + // to some js library, you should use it as so: + + if (typeof(MyNamespace) == 'undefined') MyNamespace = {}; + MyNamespace.MyClass = function () { + var gtParms = { "domain" : 'MyNamespace_MyClass' }; + this.gt = new Gettext(gtParams); + return this; + }; + MyNamespace.MyClass.prototype._ = function (msgid) { + return this.gt.gettext(msgid); + }; + MyNamespace.MyClass.prototype.something = function () { + var myString = this._("this will get translated"); + }; + + // ////////////////////////////////////////////////////////// + // Adding the shortcuts to a global scope is easier. If that's + // ok in your app, this is certainly easier. + var myGettext = new Gettext({ 'domain' : 'myDomain' }); + function _ (msgid) { + return myGettext.gettext(msgid); + } + alert( _("text") ); + + // ////////////////////////////////////////////////////////// + // Data structure of the json data + // NOTE: if you're loading via the + + // in domain.json + json_locale_data = { + "mydomain" : { + // po header fields + "" : { + "plural-forms" : "...", + "lang" : "en", + }, + // all the msgid strings and translations + "msgid" : [ "msgid_plural", "translation", "plural_translation" ], + }, + }; + // please see the included bin/po2json script for the details on this format + +This method also allows you to use unsupported file formats, so long as you can parse them into the above format. + +=item 2. Use AJAX to load language file. + +Use XMLHttpRequest (actually, SJAX - syncronous) to load an external resource. + +Supported external formats are: + +=over + +=item * Javascript Object Notation (.json) + +(see bin/po2json) + + type=application/json + +=item * Uniforum Portable Object (.po) + +(see GNU Gettext's xgettext) + + type=application/x-po + +=item * Machine Object (compiled .po) (.mo) + +NOTE: .mo format isn't actually supported just yet, but support is planned. + +(see GNU Gettext's msgfmt) + + type=application/x-mo + +=back + +=back + +=head1 METHODS + +The following methods are implemented: + + new Gettext(args) + textdomain (domain) + gettext (msgid) + dgettext (domainname, msgid) + dcgettext (domainname, msgid, LC_MESSAGES) + ngettext (msgid, msgid_plural, count) + dngettext (domainname, msgid, msgid_plural, count) + dcngettext (domainname, msgid, msgid_plural, count, LC_MESSAGES) + pgettext (msgctxt, msgid) + dpgettext (domainname, msgctxt, msgid) + dcpgettext (domainname, msgctxt, msgid, LC_MESSAGES) + npgettext (msgctxt, msgid, msgid_plural, count) + dnpgettext (domainname, msgctxt, msgid, msgid_plural, count) + dcnpgettext (domainname, msgctxt, msgid, msgid_plural, count, LC_MESSAGES) + strargs (string, args_array) + + +=head2 new Gettext (args) + +Several methods of loading locale data are included. You may specify a plugin or alternative method of loading data by passing the data in as the "locale_data" option. For example: + + var get_locale_data = function () { + // plugin does whatever to populate locale_data + return locale_data; + }; + var gt = new Gettext( 'domain' : 'messages', + 'locale_data' : get_locale_data() ); + +The above can also be used if locale data is specified in a statically included From 665a6d2c4862f8e50e457f6b9025f425fe557466 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Thu, 14 Apr 2016 06:26:22 -0600 Subject: [PATCH 22/52] Adding Localization --- ajax_forms.php | 196 +++++------ ajax_htmldata.php | 116 +++---- locale/fr_FR/LC_MESSAGES/fr_FR.mo | Bin 0 -> 672 bytes locale/fr_FR/LC_MESSAGES/fr_FR.po | 546 ++++++++++++++++++++++++++++++ 4 files changed, 702 insertions(+), 156 deletions(-) create mode 100644 locale/fr_FR/LC_MESSAGES/fr_FR.mo create mode 100644 locale/fr_FR/LC_MESSAGES/fr_FR.po diff --git a/ajax_forms.php b/ajax_forms.php index 3e56bf9..66f6934 100755 --- a/ajax_forms.php +++ b/ajax_forms.php @@ -116,7 +116,7 @@ -  Ensure platform name stays CORAL's Platform Name: "getServiceProvider; ?>" +  getServiceProvider; ?>" @@ -125,8 +125,8 @@ - - + +
    @@ -139,7 +139,7 @@ - - - + + + - - + +
    Update Outlier - Level outlierLevel; ?>

    Level outlierLevel; ?>

    @@ -215,18 +215,18 @@ '> - + - +
    Update Report Display Name

    reportDisplayName . "' style='width:190px;'/>update"; + echo "" . _("update") . ""; ?> close
    @@ -254,7 +254,7 @@ if (isset($_GET['platformID'])) $platformID = $_GET['platformID']; - if ($platformNoteID) $addUpdate = 'Update'; else $addUpdate = 'Add'; + if ($platformNoteID) $addUpdate = _('Update'); else $addUpdate = _('Add'); if ($platformNoteID){ $platformNote = new PlatformNote(new NamedArguments(array('primaryKey' => $platformNoteID))); @@ -293,27 +293,27 @@ - + - + - + - + - + @@ -322,8 +322,8 @@ @@ -351,7 +351,7 @@ if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; if ($publisherPlatformNoteID){ - $addUpdate = 'Update'; + $addUpdate = _('Update'); $publisherPlatformNote = new PublisherPlatformNote(new NamedArguments(array('primaryKey' => $publisherPlatformNoteID))); @@ -360,7 +360,7 @@ if (($publisherPlatformNote->endYear == '0') || ($publisherPlatformNote->endYear =='')) $endYear = ''; else $endYear = $publisherPlatformNote->endYear; }else{ - $addUpdate = 'Add'; + $addUpdate = _('Add'); $publisherPlatformNote = new PublisherPlatformNote(); } @@ -371,18 +371,18 @@
    Interface Notes



    - /> Yes   - /> No + />    + /> 
    - - + +
    - + - + - + - + @@ -391,8 +391,8 @@ @@ -418,13 +418,13 @@ if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; else $publisherPlatformID = ''; if ($externalLoginID){ - $addUpdate = 'Update'; + $addUpdate = _('Update'); $externalLogin = new ExternalLogin(new NamedArguments(array('primaryKey' => $externalLoginID))); $publisherPlatformID = $externalLogin->publisherPlatformID; $platformID = $externalLogin->platformID; }else{ - $addUpdate = 'Add'; + $addUpdate = _('Add'); $externalLogin = new ExternalLogin(); } @@ -435,21 +435,21 @@
    Publisher Notes



    - - + +
    - + - + - + - + - + @@ -458,8 +458,8 @@ @@ -483,11 +483,11 @@ if ($sushiServiceID){ - $addUpdate = 'Update'; + $addUpdate = _('Update'); $sushiService = new SushiService(new NamedArguments(array('primaryKey' => $sushiServiceID))); }else{ - $addUpdate = 'Add'; + $addUpdate = _('Add'); $sushiService = new SushiService(); } @@ -497,27 +497,27 @@
    Login



    - - + +
    - + - + - + +
    - + - + - + - + - + - + - + - + +

    - + @@ -606,11 +606,11 @@
    SUSHI Connection



    -
    - if using COUNTER's WSDL +
    -
    - if not using COUNTER's WSDL
    -
    separate report types with semi-colon, e.g. JR1;BR1 +
    - (optional)
    can be: HTTP Basic, WSSE Authentication
    +
    - (optional)
    - only needed for HTTP or WSSE Authentication
    +
    - (optional)
    - only needed for HTTP or WSSE Authentication
    + (optional)
    - (optional)
    - number indicating the day of month the service should run
    (e.g. 27 will run 27th of every month)
    - + - - - + +
    Link Associated Organization




    +

    @@ -621,8 +621,8 @@
    @@ -688,7 +688,7 @@ echo "" . $monthlyStat['Title']. ""; echo "" . $monthlyStat['usageCount'] . ""; echo ""; - echo "
    update override
    ignore outlier"; + echo "update override
    " . _("ignore outlier") . ""; echo ""; } } @@ -697,7 +697,7 @@ -

    Close +

    @@ -748,7 +748,7 @@
    - + @@ -763,24 +763,24 @@ ?> - + - + - + - + - +

    (showing only titles for which there were outliers during the year)

    Total update
    PDF update
      HTML update


    Close


    @@ -817,8 +817,8 @@ ?>
    - - + + @@ -826,8 +826,8 @@ @@ -859,20 +859,20 @@ ?>
    Add New Platform for SUSHI Connection



    - - + +
    - - + + - + @@ -880,8 +880,8 @@ @@ -914,7 +914,7 @@ ?>
    Add Identifier



    - - + +
    - + - @@ -974,25 +974,25 @@ if (isset($_GET['loginID'])) $loginID = $_GET['loginID']; else $loginID = ''; if ($loginID != ''){ - $update='Update'; + $update=_('Update'); $updateUser = new User(new NamedArguments(array('primaryKey' => $loginID))); }else{ - $update='Add New'; + $update=_('Add New'); } ?>
    Associated Titles and Identifiers

    @@ -949,7 +949,7 @@


    Close +


    - - - - - + + + + + @@ -1019,7 +1019,7 @@ - +
    User



    - +
    diff --git a/ajax_htmldata.php b/ajax_htmldata.php index fc200c0..98f5c9f 100755 --- a/ajax_htmldata.php +++ b/ajax_htmldata.php @@ -43,7 +43,7 @@ ?> -

    Import History for name; ?>

    +

    name; ?>

    @@ -58,9 +58,9 @@ echo ""; echo ""; - echo ""; - echo ""; - echo ""; + echo ""; + echo ""; + echo ""; echo ""; echo ""; echo ""; @@ -72,13 +72,13 @@ echo ""; echo ""; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo ""; } echo "
    Import DateImported ByImport Summary" . _("Import Date") . "" . _("Imported By") . "" . _("Import Summary") . "  
    " . format_date($importLog->importDateTime) . "" . $importLog->loginID . "" . nl2br($importLog->details) . "view logview archive" . _("view log") . "" . _("view archive") . "
    "; }else{ - echo "(no imports found)"; + echo _("(no imports found)"); } @@ -92,7 +92,7 @@ ?> -

    Publisher Logins

    +

    @@ -109,10 +109,10 @@ - - - - + + + + @@ -134,7 +134,7 @@ @@ -142,7 +142,7 @@
    - add new login + -

    Interface Logins

    +

    @@ -185,7 +185,7 @@ echo "
    "; echo ""; echo ""; - echo ""; + echo ""; echo ""; } @@ -195,7 +195,7 @@ @@ -203,7 +203,7 @@
    - add new login + 0){ ?> - For getOrganizationName() . "  view organization"; ?> + getOrganizationName() . "  " . _("view organization") . "";?>
    Interface LoginPasswordURLLogin Notes  
    " . $externalLogin->password . "" . $externalLogin->loginURL . "" . $externalLogin->noteText . "edit
    remove
    edit
    " . _("remove") . "
    - - - - - + + + + + "; }else{ - echo "No login information stored for " . $obj->getOrganizationName . "  view organization"; + echo "" . _("No login information stored for ") . $obj->getOrganizationName . "  " . _("view organization") . ""; } ?>
    - change associated organization +

    - link to associated organization + 0){ echo "
    "; - echo "Login Credentials are also available for the following publishers:
    "; + echo _("Login Credentials are also available for the following publishers:") . "
    "; foreach ($pubArray as $pubID => $pubName){ echo "" . $pubName . "
    "; @@ -317,7 +317,7 @@ ?> -

    Publisher Notes

    +

    @@ -332,22 +332,22 @@
    Login TypeUsernamePasswordURLNotes
    - - - + + + endYear == '0') || ($publisherPlatformNote->endYear =='')) $endYear = 'Present'; else $endYear = $publisherPlatformNote->endYear; + if (($publisherPlatformNote->endYear == '0') || ($publisherPlatformNote->endYear =='')) $endYear = _('Present'); else $endYear = $publisherPlatformNote->endYear; echo ""; echo ""; echo ""; echo ""; - echo ""; + echo ""; echo ""; } @@ -355,12 +355,12 @@ ?>
    Start YearEnd YearNotes  
    " . $publisherPlatformNote->startYear . "" . $endYear . "" . $publisherPlatformNote->noteText . "edit
    remove
    " . _("edit") . "
    " . _("remove") . "
    - +

    - add new publisher notes +
    @@ -373,7 +373,7 @@ ?> -

    Interface Notes

    +

    @@ -391,10 +391,10 @@ - - - - + + + + @@ -416,7 +416,7 @@ echo ""; echo ""; echo ""; - echo ""; + echo ""; echo ""; } @@ -424,12 +424,12 @@ ?>
    Start YearEnd YearCounter
    Compliant?
    Interface Notes
     
    " . $endYear . "" . $counterCompliantInd . "" . $platformNote->noteText . "edit
    remove
    edit
    " . _("remove") . "
    - +

    - add new interface note +

    @@ -471,16 +471,16 @@ echo "Service Day" . $sushiService->serviceDayOfMonth . " (day of month)"; echo "Notes" . $sushiService->noteText . ""; echo ""; - echo "

    Edit SUSHI Connection Info
    "; - echo "

    "; + echo "

    " . _("Edit SUSHI Connection Info") . "
    "; + echo "

    "; }else{ - echo "\n(none found)

    Add SUSHI Connection
    "; + echo "\n(none found)

    " . _("Add SUSHI Connection") . "
    "; } echo "

      "; - echo "Visit the SUSHI Server Registry for information about adding your provider."; + echo _("Visit the ") . "" . _("SUSHI Server Registry") . "" . _(" for information about adding your provider."); break; @@ -507,7 +507,7 @@ if ($month['archiveInd'] == "1") {$archive = ' (archive)';}else{$archive='';} echo ""; - echo ""; + echo ""; //monthly ouliers if ($publisherPlatformID){ @@ -518,7 +518,7 @@ if ($outlierCount != 0) { - echo ""; + echo ""; }else{ echo ""; } @@ -553,7 +553,7 @@ if (count($statsArray) > 0){ - echo "

    Statistics Management

    "; + echo "

    " . _("Statistics Management") . "

    "; foreach($statsArray as $statArray){ @@ -634,7 +634,7 @@ } }else{ - echo "

    Statistics Management

    (none found)"; + echo "

    " . _("Statistics Management") . "

    " . _("(none found)"); } @@ -695,7 +695,7 @@ $databaseTitleArray = $obj->getDatabaseTitles; if ((count($journalTitleArray) == '0') && (count($bookTitleArray) == '0') && (count($databaseTitleArray) == '0')){ - echo "

    Titles

    (none found)"; + echo "

    " . _("Titles") . "

    " . _("(none found)"); } @@ -710,14 +710,14 @@ if (count($titleArray) >0 ){ ?> -

    Journals - Associated Titles and ISSNs

    +

    - - - - + + + + diff --git a/locale/fr_FR/LC_MESSAGES/fr_FR.mo b/locale/fr_FR/LC_MESSAGES/fr_FR.mo new file mode 100644 index 0000000000000000000000000000000000000000..ce559c7a68de9c9719569f6a6b502e2019904ddd GIT binary patch literal 672 zcmZvZ&2AGh6om~GkOo$)LGlt7p3Vf+MvhXcga%bgVbli14mmToiKB@f`6s0k4*?4# z9sw3Cc>#9pcmke zhAw#YQUTlIi3%inC(HLl z_DJLpv6Oj7WP4c#qd29NZjS%ox8M3k$_Fua%J^CZ>m*M`%1k4|#F*6Lk6!X~_j-7m zoE)DVZ70jqEE!l6$l#jGCFTkAChRV2rA?2QGvz#m{)_QYbho}H?wp)BGNrAwnM&TB z=#ab;PsxyL=O`>yI`BO0ru+EQw&Jn!v{Ydxd7AF7zoe+6Q?(dcxA2mi<+}C#PLH?C z{(Zv_c>bWbz2(eCSJI#zPV#oT-x+75TsbR{A~NJ8>~L;lz&rh=JQ{9nTv5$q(6#n> Qj_8;&Cf0D1S=meIFO0pdKmY&$ literal 0 HcmV?d00001 diff --git a/locale/fr_FR/LC_MESSAGES/fr_FR.po b/locale/fr_FR/LC_MESSAGES/fr_FR.po new file mode 100644 index 0000000..6d8e8f1 --- /dev/null +++ b/locale/fr_FR/LC_MESSAGES/fr_FR.po @@ -0,0 +1,546 @@ +msgid "" +msgstr "" +"Project-Id-Version: messages\n" +"POT-Creation-Date: 2016-04-13 20:12-0600\n" +"PO-Revision-Date: 2016-04-13 20:17-0600\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.7\n" +"X-Poedit-Basepath: ../../..\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-SearchPath-0: .\n" + +#: admin.php:12 +msgid "Users" +msgstr "" + +#: admin.php:13 +msgid "add new user" +msgstr "Ajouter un nouvel utilisateur" + +#: admin.php:16 admin.php:31 admin.php:46 +msgid "Loading..." +msgstr "" + +#: admin.php:27 +msgid "Email addresses for logs" +msgstr "" + +#: admin.php:28 +msgid "add new email address" +msgstr "" + +#: admin.php:43 +msgid "Outlier Parameters" +msgstr "" + +#: ajax_forms.php:39 ajax_forms.php:168 ajax_forms.php:257 ajax_forms.php:354 +#: ajax_forms.php:421 ajax_forms.php:486 ajax_forms.php:977 +msgid "Update" +msgstr "" + +#: ajax_forms.php:43 ajax_forms.php:257 ajax_forms.php:363 ajax_forms.php:427 +#: ajax_forms.php:490 +msgid "Add" +msgstr "Ajouter" + +#: ajax_forms.php:55 +msgid "Email Address" +msgstr "" + +#: ajax_forms.php:65 ajax_forms.php:229 +msgid "close" +msgstr "" + +#: ajax_forms.php:106 +msgid "SUSHI Service for " +msgstr "" + +#: ajax_forms.php:106 +msgid "Optional Parameters" +msgstr "" + +#: ajax_forms.php:109 +msgid "Start Date:" +msgstr "" + +#: ajax_forms.php:113 +msgid "End Date:" +msgstr "" + +#: ajax_forms.php:114 +msgid "(yyyy-mm-dd)" +msgstr "" + +#: ajax_forms.php:119 +msgid "Ensure platform name stays CORAL's Platform Name: " +msgstr "" + +#: ajax_forms.php:128 +msgid "submit for processing" +msgstr "" + +#: ajax_forms.php:129 ajax_forms.php:169 ajax_forms.php:326 ajax_forms.php:395 +#: ajax_forms.php:462 ajax_forms.php:625 ajax_forms.php:830 ajax_forms.php:884 +#: ajax_forms.php:1022 +msgid "cancel" +msgstr "annuler" + +#: ajax_forms.php:142 +msgid "No Sushi Service passed in!" +msgstr "" + +#: ajax_forms.php:163 +msgid "Update Outlier - " +msgstr "" + +#: ajax_forms.php:164 +msgid "Count Over" +msgstr "" + +#: ajax_forms.php:165 +msgid "% Over prior 12 months" +msgstr "" + +#: ajax_forms.php:218 +msgid "Update Report Display Name" +msgstr "" + +#: ajax_forms.php:223 ajax_forms.php:769 ajax_forms.php:776 ajax_forms.php:783 +msgid "update" +msgstr "" + +#: ajax_forms.php:296 +msgid " Interface Notes" +msgstr "" + +#: ajax_forms.php:299 ajax_forms.php:377 +msgid "Start Year:" +msgstr "" + +#: ajax_forms.php:303 ajax_forms.php:381 +msgid "End Year:" +msgstr "" + +#: ajax_forms.php:307 +msgid "Counter Compliant?" +msgstr "" + +#: ajax_forms.php:309 +msgid "Yes" +msgstr "" + +#: ajax_forms.php:310 +msgid "No" +msgstr "" + +#: ajax_forms.php:316 +msgid "Interface Notes:" +msgstr "" + +#: ajax_forms.php:325 ajax_forms.php:394 ajax_forms.php:461 ajax_forms.php:624 +#: ajax_forms.php:829 ajax_forms.php:883 +msgid "submit" +msgstr "envoyer" + +#: ajax_forms.php:374 ajax_htmldata.php:320 +msgid "Publisher Notes" +msgstr "" + +#: ajax_forms.php:385 +msgid "Publisher Notes:" +msgstr "" + +#: ajax_forms.php:438 +msgid "Login" +msgstr "" + +#: ajax_forms.php:441 +msgid "Username:" +msgstr "" + +#: ajax_forms.php:445 ajax_forms.php:549 +msgid "Password:" +msgstr "" + +#: ajax_forms.php:448 +msgid "URL:" +msgstr "" + +#: ajax_forms.php:452 +msgid "Login Notes:" +msgstr "" + +#: ajax_forms.php:500 +msgid "SUSHI Connection" +msgstr "" + +#: ajax_forms.php:503 +msgid "Service/Endpoint URL:" +msgstr "" + +#: ajax_forms.php:505 +msgid " - if using COUNTER's WSDL" +msgstr "" + +#: ajax_forms.php:509 +msgid " - or - WSDL URL:" +msgstr "" + +#: ajax_forms.php:511 +msgid " - if not using COUNTER's WSDL" +msgstr "" + +#: ajax_forms.php:514 +msgid "Report Type(s):" +msgstr "" + +#: ajax_forms.php:516 +msgid "separate report types with semi-colon, e.g. JR1;BR1" +msgstr "" + +#: ajax_forms.php:520 +msgid "COUNTER Release:" +msgstr "" + +#: ajax_forms.php:529 +msgid "Requestor ID:" +msgstr "" + +#: ajax_forms.php:533 +msgid "Customer ID:" +msgstr "" + +#: ajax_forms.php:537 +msgid "Security Type:" +msgstr "" + +#: ajax_forms.php:539 ajax_forms.php:545 ajax_forms.php:558 +msgid "(optional)" +msgstr "" + +#: ajax_forms.php:539 +msgid "can be: HTTP Basic, WSSE Authentication" +msgstr "" + +#: ajax_forms.php:543 +msgid "Login:" +msgstr "" + +#: ajax_forms.php:545 +msgid " - only needed for HTTP or WSSE Authentication" +msgstr "" + +#: ajax_forms.php:551 +msgid " - only needed for HTTP or WSSE Authentication" +msgstr "" + +#: ajax_forms.php:556 +msgid "Service Day:" +msgstr "" + +#: ajax_forms.php:558 +msgid " - number indicating the day of month the service should run" +msgstr "" + +#: ajax_forms.php:558 +msgid "(e.g. 27 will run 27th of every month)" +msgstr "" + +#: ajax_forms.php:561 +msgid "Sushi Notes:" +msgstr "" + +#: ajax_forms.php:609 +msgid "Link Associated Organization" +msgstr "" + +#: ajax_forms.php:613 +msgid "Organization:" +msgstr "" + +#: ajax_forms.php:691 +msgid "ignore outlier" +msgstr "" + +#: ajax_forms.php:700 ajax_forms.php:795 ajax_forms.php:952 +msgid "Close" +msgstr "" + +#: ajax_forms.php:751 +msgid "(showing only titles for which there were outliers during the year)" +msgstr "" + +#: ajax_forms.php:766 +msgid "Total" +msgstr "" + +#: ajax_forms.php:820 +msgid "Add New Platform for SUSHI Connection" +msgstr "" + +#: ajax_forms.php:821 +msgid "Platform Name" +msgstr "" + +#: ajax_forms.php:862 +msgid "Add Identifier" +msgstr "" + +#: ajax_forms.php:863 +msgid "Identifier Type" +msgstr "" + +#: ajax_forms.php:866 +msgid "ISSN" +msgstr "" + +#: ajax_forms.php:867 +msgid "eISSN" +msgstr "" + +#: ajax_forms.php:868 +msgid "ISBN" +msgstr "" + +#: ajax_forms.php:869 +msgid "eISBN" +msgstr "" + +#: ajax_forms.php:870 +msgid "DOI" +msgstr "" + +#: ajax_forms.php:871 +msgid "Proprietary ID" +msgstr "" + +#: ajax_forms.php:875 +msgid "Identifier" +msgstr "" + +#: ajax_forms.php:917 +msgid "Associated Titles and Identifiers" +msgstr "" + +#: ajax_forms.php:980 +msgid "Add New" +msgstr "Ajouter" + +#: ajax_forms.php:987 +msgid " User" +msgstr "" + +#: ajax_forms.php:988 +msgid "Login ID" +msgstr "" + +#: ajax_forms.php:989 +msgid "First Name" +msgstr "" + +#: ajax_forms.php:990 +msgid "Last Name" +msgstr "" + +#: ajax_forms.php:991 +msgid "Privilege" +msgstr "" + +#: ajax_forms.php:995 +msgid "Add/Edit users have access to everything" +msgstr "" + +#: ajax_forms.php:995 +msgid "except the Admin tab and admin users" +msgstr "" + +#: ajax_forms.php:995 +msgid "have access to everything" +msgstr "" + +#: ajax_htmldata.php:46 +msgid "Import History for " +msgstr "" + +#: ajax_htmldata.php:61 +msgid "Import Date" +msgstr "" + +#: ajax_htmldata.php:62 +msgid "Imported By" +msgstr "" + +#: ajax_htmldata.php:63 +msgid "Import Summary" +msgstr "" + +#: ajax_htmldata.php:75 +msgid "view log" +msgstr "" + +#: ajax_htmldata.php:76 +msgid "view archive" +msgstr "" + +#: ajax_htmldata.php:81 +msgid "(no imports found)" +msgstr "" + +#: ajax_htmldata.php:112 +msgid "Interface Login" +msgstr "" + +#: ajax_htmldata.php:113 ajax_htmldata.php:241 +msgid "Password" +msgstr "" + +#: ajax_htmldata.php:114 ajax_htmldata.php:242 +msgid "URL" +msgstr "" + +#: ajax_htmldata.php:115 +msgid "Login Notes" +msgstr "" + +#: ajax_htmldata.php:137 ajax_htmldata.php:198 ajax_htmldata.php:358 +#: ajax_htmldata.php:427 +msgid "(none found)" +msgstr "" + +#: ajax_htmldata.php:145 ajax_htmldata.php:206 +msgid "add new login" +msgstr "" + +#: ajax_htmldata.php:156 +msgid "Interface Logins" +msgstr "" + +#: ajax_htmldata.php:188 ajax_htmldata.php:350 ajax_htmldata.php:419 +msgid "remove" +msgstr "" + +#: ajax_htmldata.php:236 +msgid "For " +msgstr "" + +#: ajax_htmldata.php:236 ajax_htmldata.php:260 +msgid "view organization" +msgstr "" + +#: ajax_htmldata.php:239 +msgid "Login Type" +msgstr "" + +#: ajax_htmldata.php:240 +msgid "Username" +msgstr "" + +#: ajax_htmldata.php:243 ajax_htmldata.php:337 +msgid "Notes" +msgstr "" + +#: ajax_htmldata.php:260 +msgid "No login information stored for " +msgstr "" + +#: ajax_htmldata.php:265 +msgid "change associated organization" +msgstr "" + +#: ajax_htmldata.php:274 +msgid "link to associated organization" +msgstr "" + +#: ajax_htmldata.php:299 +msgid "Login Credentials are also available for the following publishers:" +msgstr "" + +#: ajax_htmldata.php:335 ajax_htmldata.php:394 +msgid "Start Year" +msgstr "" + +#: ajax_htmldata.php:336 ajax_htmldata.php:395 +msgid "End Year" +msgstr "" + +#: ajax_htmldata.php:344 +msgid "Present" +msgstr "" + +#: ajax_htmldata.php:350 +msgid "edit" +msgstr "" + +#: ajax_htmldata.php:363 +msgid "add new publisher notes" +msgstr "" + +#: ajax_htmldata.php:376 ajax_htmldata.php:397 +msgid "Interface Notes" +msgstr "" + +#: ajax_htmldata.php:396 +msgid "Counter" +msgstr "" + +#: ajax_htmldata.php:396 +msgid "Compliant?" +msgstr "" + +#: ajax_htmldata.php:432 +msgid "add new interface note" +msgstr "" + +#: ajax_htmldata.php:474 +msgid "Edit SUSHI Connection Info" +msgstr "" + +#: ajax_htmldata.php:475 +msgid "Test SUSHI Connection" +msgstr "" + +#: ajax_htmldata.php:477 +msgid "Add SUSHI Connection" +msgstr "" + +#: ajax_htmldata.php:483 +msgid "Visit the " +msgstr "" + +#: ajax_htmldata.php:483 +msgid "SUSHI Server Registry" +msgstr "" + +#: ajax_htmldata.php:483 +msgid " for information about adding your provider." +msgstr "" + +#: index.php:50 +msgid "Search" +msgstr "" + +#: index.php:51 +msgid "new search" +msgstr "" + +#: index.php:60 +msgid "Name (contains)" +msgstr "" + +#: index.php:63 +msgid "go!" +msgstr "" + +#: index.php:70 +msgid "Starts with" +msgstr "" + +#: templates/header.php:167 +msgid "Invalid translation route!" +msgstr "" From 25a29f69278d67b89a1695b286401606236513eb Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Thu, 14 Apr 2016 11:29:34 -0600 Subject: [PATCH 23/52] Adding Localization --- locale/fr_FR/LC_MESSAGES/{fr_FR.mo => messages.mo} | Bin locale/fr_FR/LC_MESSAGES/{fr_FR.po => messages.po} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename locale/fr_FR/LC_MESSAGES/{fr_FR.mo => messages.mo} (100%) rename locale/fr_FR/LC_MESSAGES/{fr_FR.po => messages.po} (100%) diff --git a/locale/fr_FR/LC_MESSAGES/fr_FR.mo b/locale/fr_FR/LC_MESSAGES/messages.mo similarity index 100% rename from locale/fr_FR/LC_MESSAGES/fr_FR.mo rename to locale/fr_FR/LC_MESSAGES/messages.mo diff --git a/locale/fr_FR/LC_MESSAGES/fr_FR.po b/locale/fr_FR/LC_MESSAGES/messages.po similarity index 100% rename from locale/fr_FR/LC_MESSAGES/fr_FR.po rename to locale/fr_FR/LC_MESSAGES/messages.po From 84e5b09eacbeba66b0e4f479dbdbe829a7380bcd Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Sun, 17 Apr 2016 17:26:43 -0600 Subject: [PATCH 24/52] Adding Localization --- locale/fr_FR/LC_MESSAGES/{fr_FR.mo => messages.mo} | Bin locale/fr_FR/LC_MESSAGES/{fr_FR.po => messages.po} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename locale/fr_FR/LC_MESSAGES/{fr_FR.mo => messages.mo} (100%) rename locale/fr_FR/LC_MESSAGES/{fr_FR.po => messages.po} (100%) diff --git a/locale/fr_FR/LC_MESSAGES/fr_FR.mo b/locale/fr_FR/LC_MESSAGES/messages.mo similarity index 100% rename from locale/fr_FR/LC_MESSAGES/fr_FR.mo rename to locale/fr_FR/LC_MESSAGES/messages.mo diff --git a/locale/fr_FR/LC_MESSAGES/fr_FR.po b/locale/fr_FR/LC_MESSAGES/messages.po similarity index 100% rename from locale/fr_FR/LC_MESSAGES/fr_FR.po rename to locale/fr_FR/LC_MESSAGES/messages.po From 304229c3b66c9b720f0020e923630ca15845284e Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 18 Apr 2016 07:54:48 -0600 Subject: [PATCH 25/52] Adding Localization --- ajax_forms.php | 2 +- ajax_htmldata.php | 128 +++++----- ajax_processing.php | 2 +- import.php | 28 +-- locale/fr_FR/LC_MESSAGES/messages.mo | Bin 672 -> 672 bytes locale/fr_FR/LC_MESSAGES/messages.po | 349 +++++++++++++++++++++++++-- not_avail.php | 6 +- publisherPlatform.php | 2 +- publisherPlatformList.php | 10 +- reporting.php | 10 +- 10 files changed, 426 insertions(+), 111 deletions(-) diff --git a/ajax_forms.php b/ajax_forms.php index 66f6934..ae0de66 100755 --- a/ajax_forms.php +++ b/ajax_forms.php @@ -1038,7 +1038,7 @@ default: - echo "Function " . $_REQUEST['function'] . " not set up!"; + echo _("Function ") . $_REQUEST['function'] . _(" not set up!"); break; diff --git a/ajax_htmldata.php b/ajax_htmldata.php index 98f5c9f..f36eb1d 100755 --- a/ajax_htmldata.php +++ b/ajax_htmldata.php @@ -757,7 +757,7 @@ } $resolverURL .= $urlAdd; - echo "\n"; + echo "\n"; }else{ echo "\n"; @@ -786,14 +786,14 @@ if (count($titleArray) >0 ){ ?> -

    Books - Associated Titles and ISBNs

    +

    TitleDOIISSNeISSN  
    view related titles
    view in link resolver
    " . _("view related titles") . "
    " . _("view in link resolver") . "
     
    - - - - + + + + @@ -893,13 +893,13 @@ $logEmailAddress = array(); $logEmailAddresses = new LogEmailAddress(); - echo "Current Email Addresses"; + echo "" . _("Current Email Addresses") . ""; echo "
    TitleDOIISBNISSN  
    "; foreach($logEmailAddresses->allAsArray as $logEmailAddress) { echo ""; - echo ""; - echo ""; + echo ""; + echo ""; } echo "
    " . $logEmailAddress['emailAddress'] . "editdelete
    " . _("edit") . "" . _("delete") . "
    "; @@ -918,15 +918,15 @@ $outlier = array(); $outliers = new Outlier(); - echo "Current Outlier Parameters
    "; + echo "" . _("Current Outlier Parameters") . "
    "; foreach($outliers->allAsArray as $outlier) { - echo "Level " . $outlier['outlierLevel'] . ": " . $outlier['overageCount'] . " over plus " . $outlier['overagePercent'] . "% over - displayed " . $outlier['color']; - echo "  edit"; + echo _("Level ") . $outlier['outlierLevel'] . ": " . $outlier['overageCount'] . _(" over plus ") . $outlier['overagePercent'] . _("% over - displayed ") . $outlier['color']; + echo "  " . _("edit") . ""; echo "
    "; } }else{ - echo "Outliers are currently disabled in the configuration file. Contact your technical support to enable them."; + echo _("Outliers are currently disabled in the configuration file. Contact your technical support to enable them."); } @@ -958,15 +958,15 @@ echo ""; if ($totalRows == 0){ - echo ""; + echo ""; }else{ foreach($statsArray as $monthlyStat){ echo ""; echo ""; echo ""; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo ""; } } @@ -1010,21 +1010,21 @@ - + - - + - + " . $platform->name . ""; if ($platform->reportDisplayName) echo "  (" . $platform->reportDisplayName . ")"; - echo "  edit report display name
    "; + echo "  " . _("edit report display name") . "
    "; @@ -1077,7 +1077,7 @@ echo "
    None currently
    " . _("None currently") . "
    " . $monthlyStat['Title']. "" . $monthlyStat['usageCount'] . "update overrideignore outlier" . _("update override") . "" . _("ignore outlier") . "
    Total update
     PDF + update
      HTML update
    " . $publisher->name; if ($publisherPlatform->reportDisplayName) echo "  (" . $publisherPlatform->reportDisplayName . ")"; - echo "  edit report display name
    "; + echo "  " . _("edit report display name") . ""; break; @@ -1103,13 +1103,13 @@ $recordCount = count($importLogArray); if ($totalRecords == 0){ - echo "No imports found."; + echo "" . _("No imports found.") . ""; }else{ $thisPageNum = $recordCount + $pageStart - 1; - echo "Displaying " . $pageStart . " to " . $thisPageNum . " of " . $totalRecords . " Records
    "; + echo "" . _("Displaying ") . $pageStart . _(" to ") . $thisPageNum . _(" of ") . $totalRecords . _(" Records") . "
    "; //print out page selectors if ($totalRecords > $numberOfRecords){ @@ -1144,9 +1144,9 @@ //making table larger so it fills the page more echo ""; echo ""; - echo ""; - echo ""; - echo ""; + echo ""; + echo ""; + echo ""; echo ""; echo ""; echo ""; @@ -1225,9 +1225,9 @@ if (count($sushiArray) > 0){ echo "
    Import DateImported ByImport Summary" . _("Import Date") . "" . _("Imported By") . "" . _("Import Summary") . "  
    "; echo ""; - echo ""; - echo ""; - echo ""; + echo ""; + echo ""; + echo ""; echo ""; echo ""; echo ""; @@ -1257,7 +1257,7 @@ } echo "
    Platform/PublisherImport Run DateDetails" . _("Platform/Publisher") . "" . _("Import Run Date") . "" . _("Details") . "  
    "; }else{ - echo "(no outstanding imports found)"; + echo _("(no outstanding imports found)"); } @@ -1277,9 +1277,9 @@ if (count($sushiArray) > 0){ echo ""; echo ""; - echo ""; - echo ""; - echo ""; + echo ""; + echo ""; + echo ""; echo ""; echo ""; echo ""; @@ -1305,16 +1305,16 @@ echo ""; echo ""; echo ""; - echo ""; - echo ""; - echo ""; + echo ""; + echo ""; + echo ""; echo ""; } echo "
    Platform/PublisherLatest RunLatest Status" . _("Platform/Publisher") . "" . _("Latest Run") . "" . _("Latest Status") . "  
    " . $obj->name . "" . $lastImportDate . "" . $lastImportDetails . "
    view full log
    run nowchange/test connection" . $lastImportDetails . "
    " . _("view full log") . "
    " . _("run now") . "" . _("change/test connection") . "
    "; }else{ - echo "(no failed imports found)"; + echo _("(no failed imports found)"); } @@ -1334,11 +1334,11 @@ if (count($sushiArray) > 0){ echo ""; echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; echo ""; echo ""; echo ""; @@ -1369,15 +1369,15 @@ echo ""; echo ""; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo ""; } echo "
    Platform/PublisherReport(s)Next RunLatest RunLatest Status" . _("Platform/Publisher") . "" . _("Report(s)") . "" . _("Next Run") . "" ._("Latest Run") . "" . _("Latest Status") . "  
    " . format_date($sushi['next_import']) . "" . format_date($lastImportDate) . "" . $lastImportDetails . "run nowchange/test connection" . _("run now") . "" . _("change/test connection") . "
    "; }else{ - echo "(no sushi services set up)"; + echo _("(no sushi services set up)"); } @@ -1399,10 +1399,10 @@ ?> - - - - + + + + " . $instance['firstName'] . ""; echo ""; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo ""; } @@ -1425,7 +1425,7 @@ search($whereAdd, $orderBy, $limit); if (count($platformArray) == 0){ - echo "

    Sorry, no platforms or publishers fit your query"; + echo "

    " . _("Sorry, no platforms or publishers fit your query") . ""; $i=0; }else{ $thisPageNum = count($platformArray) + $pageStart - 1; - echo "Displaying " . $pageStart . " to " . $thisPageNum . " of " . $totalRecords . " Platform Records
    "; + echo "" . _("Displaying ") . $pageStart . _(" to ") . $thisPageNum . _(" of ") . $totalRecords . _(" Platform Records") . "
    "; //print out page selectors if ($totalRecords > $numberOfRecords){ @@ -1511,11 +1511,11 @@ ?>
    Login IDFirst NameLast NamePrivilege     " . $instance['lastName'] . "" . $privilege->shortName . "updateremove" . _("update") . "" . _("remove") . "
    - - - - - + + + + + @@ -1533,12 +1533,12 @@ echo ""; echo "
    Platform Name 
    Publishers 
    Next Run 
    Latest Run 
    Latest Status 
     
     
     
     
     
    By 
    " . $platform['name'] . ""; if (strlen($platform['publishers']) == "0"){ - echo "(none found)"; + echo _("(none found)"); }else{ $publisherPlatformArray = explode(":", $platform['publishers']); if (count($publisherPlatformArray) > 5){ - echo "show publisher list show publisher list
    "; + echo "" . _("show publisher list") . " " . _("show publisher list") . "
    "; echo "
    @@ -1636,7 +1636,7 @@ default: - echo "Function " . $_REQUEST['function'] . " not set up!"; + echo _("Function ") . $_REQUEST['function'] . _(" not set up!"); break; diff --git a/ajax_processing.php b/ajax_processing.php index d669109..714f848 100755 --- a/ajax_processing.php +++ b/ajax_processing.php @@ -595,7 +595,7 @@ default: - echo "Function " . $_REQUEST['function'] . " not set up!"; + echo _("Function ") . $_REQUEST['function'] . _(" not set up!"); break; diff --git a/import.php b/import.php index 1440133..428e83b 100755 --- a/import.php +++ b/import.php @@ -11,7 +11,7 @@ -
    Usage Statistics Import
    +
    Incorrect File format, must be .txt!

    "; + echo "" . _("Incorrect File format, must be .txt!") . "

    "; break; case 2: - echo "There was an error uploading the file. Please verify the size is not over 5MB and try again!

    "; + echo "" . _("There was an error uploading the file. Please verify the size is not over 5MB and try again!") . "

    "; break; case 3: - echo "File has an incorrectly formatted name - try filename.txt!

    "; + echo "" . _("File has an incorrectly formatted name - try filename.txt!") . "

    "; break; } } @@ -40,12 +40,12 @@
    - File:


    +


    Layout:

    "; foreach($layout->getLayouts as $lo) { echo "\n"; } @@ -54,8 +54,8 @@

    -  Override previous month verification

    - +  

    + @@ -65,12 +65,12 @@



    -
    Instructions:
    +


    @@ -79,7 +79,7 @@ -
    Recent Imports   
    +
       
    diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo index ce559c7a68de9c9719569f6a6b502e2019904ddd..359d228ff9c9bca3605a96b154b27b9065da9540 100644 GIT binary patch delta 31 icmZ3$x`1^9CnKA=f}w?#>12LJC3XnYbh8Cx1|tA*g$BO> delta 31 icmZ3$x`1^9CnKA&f{}rh;beYBC3XnYe6s~(1|tA(*ao8j diff --git a/locale/fr_FR/LC_MESSAGES/messages.po b/locale/fr_FR/LC_MESSAGES/messages.po index 6d8e8f1..6722100 100644 --- a/locale/fr_FR/LC_MESSAGES/messages.po +++ b/locale/fr_FR/LC_MESSAGES/messages.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: messages\n" -"POT-Creation-Date: 2016-04-13 20:12-0600\n" -"PO-Revision-Date: 2016-04-13 20:17-0600\n" +"POT-Creation-Date: 2016-04-17 18:52-0600\n" +"PO-Revision-Date: 2016-04-17 18:55-0600\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr_FR\n" @@ -112,6 +112,8 @@ msgid "Update Report Display Name" msgstr "" #: ajax_forms.php:223 ajax_forms.php:769 ajax_forms.php:776 ajax_forms.php:783 +#: ajax_htmldata.php:1013 ajax_htmldata.php:1020 ajax_htmldata.php:1027 +#: ajax_htmldata.php:1418 msgid "update" msgstr "" @@ -264,7 +266,7 @@ msgstr "" msgid "Organization:" msgstr "" -#: ajax_forms.php:691 +#: ajax_forms.php:691 ajax_htmldata.php:969 msgid "ignore outlier" msgstr "" @@ -284,7 +286,7 @@ msgstr "" msgid "Add New Platform for SUSHI Connection" msgstr "" -#: ajax_forms.php:821 +#: ajax_forms.php:821 ajax_htmldata.php:1514 msgid "Platform Name" msgstr "" @@ -296,15 +298,15 @@ msgstr "" msgid "Identifier Type" msgstr "" -#: ajax_forms.php:866 +#: ajax_forms.php:866 ajax_htmldata.php:719 ajax_htmldata.php:796 msgid "ISSN" msgstr "" -#: ajax_forms.php:867 +#: ajax_forms.php:867 ajax_htmldata.php:720 msgid "eISSN" msgstr "" -#: ajax_forms.php:868 +#: ajax_forms.php:868 ajax_htmldata.php:795 msgid "ISBN" msgstr "" @@ -312,7 +314,7 @@ msgstr "" msgid "eISBN" msgstr "" -#: ajax_forms.php:870 +#: ajax_forms.php:870 ajax_htmldata.php:718 ajax_htmldata.php:794 msgid "DOI" msgstr "" @@ -336,19 +338,19 @@ msgstr "Ajouter" msgid " User" msgstr "" -#: ajax_forms.php:988 +#: ajax_forms.php:988 ajax_htmldata.php:1402 msgid "Login ID" msgstr "" -#: ajax_forms.php:989 +#: ajax_forms.php:989 ajax_htmldata.php:1403 msgid "First Name" msgstr "" -#: ajax_forms.php:990 +#: ajax_forms.php:990 ajax_htmldata.php:1404 msgid "Last Name" msgstr "" -#: ajax_forms.php:991 +#: ajax_forms.php:991 ajax_htmldata.php:1405 msgid "Privilege" msgstr "" @@ -364,19 +366,27 @@ msgstr "" msgid "have access to everything" msgstr "" +#: ajax_forms.php:1041 ajax_htmldata.php:1639 ajax_processing.php:598 +msgid "Function " +msgstr "" + +#: ajax_forms.php:1041 ajax_htmldata.php:1639 ajax_processing.php:598 +msgid " not set up!" +msgstr "" + #: ajax_htmldata.php:46 msgid "Import History for " msgstr "" -#: ajax_htmldata.php:61 +#: ajax_htmldata.php:61 ajax_htmldata.php:1147 msgid "Import Date" msgstr "" -#: ajax_htmldata.php:62 +#: ajax_htmldata.php:62 ajax_htmldata.php:1148 msgid "Imported By" msgstr "" -#: ajax_htmldata.php:63 +#: ajax_htmldata.php:63 ajax_htmldata.php:1149 msgid "Import Summary" msgstr "" @@ -409,7 +419,8 @@ msgid "Login Notes" msgstr "" #: ajax_htmldata.php:137 ajax_htmldata.php:198 ajax_htmldata.php:358 -#: ajax_htmldata.php:427 +#: ajax_htmldata.php:427 ajax_htmldata.php:637 ajax_htmldata.php:698 +#: ajax_htmldata.php:1428 ajax_htmldata.php:1536 msgid "(none found)" msgstr "" @@ -422,6 +433,7 @@ msgid "Interface Logins" msgstr "" #: ajax_htmldata.php:188 ajax_htmldata.php:350 ajax_htmldata.php:419 +#: ajax_htmldata.php:1419 msgid "remove" msgstr "" @@ -473,7 +485,7 @@ msgstr "" msgid "Present" msgstr "" -#: ajax_htmldata.php:350 +#: ajax_htmldata.php:350 ajax_htmldata.php:901 ajax_htmldata.php:925 msgid "edit" msgstr "" @@ -521,6 +533,240 @@ msgstr "" msgid " for information about adding your provider." msgstr "" +#: ajax_htmldata.php:510 +msgid "delete entire month" +msgstr "" + +#: ajax_htmldata.php:521 +msgid "view outliers for this month" +msgstr "" + +#: ajax_htmldata.php:556 ajax_htmldata.php:637 +msgid "Statistics Management" +msgstr "" + +#: ajax_htmldata.php:698 +msgid "Titles" +msgstr "" + +#: ajax_htmldata.php:713 +msgid "Journals - Associated Titles and ISSNs" +msgstr "" + +#: ajax_htmldata.php:717 ajax_htmldata.php:793 +msgid "Title" +msgstr "" + +#: ajax_htmldata.php:760 +msgid "view related titles" +msgstr "" + +#: ajax_htmldata.php:760 +msgid "view in link resolver" +msgstr "" + +#: ajax_htmldata.php:789 +msgid "Books - Associated Titles and ISBNs" +msgstr "" + +#: ajax_htmldata.php:896 +msgid "Current Email Addresses" +msgstr "" + +#: ajax_htmldata.php:902 +msgid "delete" +msgstr "" + +#: ajax_htmldata.php:921 +msgid "Current Outlier Parameters" +msgstr "" + +#: ajax_htmldata.php:924 +msgid "Level " +msgstr "" + +#: ajax_htmldata.php:924 +msgid " over plus " +msgstr "" + +#: ajax_htmldata.php:924 +#, php-format +msgid "% over - displayed " +msgstr "" + +#: ajax_htmldata.php:929 +msgid "" +"Outliers are currently disabled in the configuration file. Contact your " +"technical support to enable them." +msgstr "" + +#: ajax_htmldata.php:961 +msgid "None currently" +msgstr "" + +#: ajax_htmldata.php:968 +msgid "update override" +msgstr "" + +#: ajax_htmldata.php:1017 +msgid "PDF" +msgstr "" + +#: ajax_htmldata.php:1055 ajax_htmldata.php:1080 +msgid "edit report display name" +msgstr "" + +#: ajax_htmldata.php:1106 +msgid "No imports found." +msgstr "" + +#: ajax_htmldata.php:1112 ajax_htmldata.php:1472 +msgid "Displaying " +msgstr "" + +#: ajax_htmldata.php:1112 ajax_htmldata.php:1472 +msgid " to " +msgstr "" + +#: ajax_htmldata.php:1112 ajax_htmldata.php:1472 +msgid " of " +msgstr "" + +#: ajax_htmldata.php:1112 +msgid " Records" +msgstr "" + +#: ajax_htmldata.php:1228 ajax_htmldata.php:1280 ajax_htmldata.php:1337 +msgid "Platform/Publisher" +msgstr "" + +#: ajax_htmldata.php:1229 +msgid "Import Run Date" +msgstr "" + +#: ajax_htmldata.php:1230 +msgid "Details" +msgstr "" + +#: ajax_htmldata.php:1260 +msgid "(no outstanding imports found)" +msgstr "" + +#: ajax_htmldata.php:1281 ajax_htmldata.php:1340 ajax_htmldata.php:1517 +msgid "Latest Run" +msgstr "" + +#: ajax_htmldata.php:1282 ajax_htmldata.php:1341 ajax_htmldata.php:1518 +msgid "Latest Status" +msgstr "" + +#: ajax_htmldata.php:1308 +msgid "view full log" +msgstr "" + +#: ajax_htmldata.php:1309 ajax_htmldata.php:1372 +msgid "run now" +msgstr "" + +#: ajax_htmldata.php:1310 ajax_htmldata.php:1373 +msgid "change/test connection" +msgstr "" + +#: ajax_htmldata.php:1317 +msgid "(no failed imports found)" +msgstr "" + +#: ajax_htmldata.php:1338 +msgid "Report(s)" +msgstr "" + +#: ajax_htmldata.php:1339 ajax_htmldata.php:1516 +msgid "Next Run" +msgstr "" + +#: ajax_htmldata.php:1380 +msgid "(no sushi services set up)" +msgstr "" + +#: ajax_htmldata.php:1468 +msgid "Sorry, no platforms or publishers fit your query" +msgstr "" + +#: ajax_htmldata.php:1472 +msgid " Platform Records" +msgstr "" + +#: ajax_htmldata.php:1515 +msgid "Publishers" +msgstr "" + +#: ajax_htmldata.php:1541 publisherPlatformList.php:32 +msgid "show publisher list" +msgstr "" + +#: ajax_htmldata.php:1620 +msgid "records per page" +msgstr "" + +#: import.php:14 +msgid "Usage Statistics Import" +msgstr "" + +#: import.php:25 +msgid "Incorrect File format, must be .txt!" +msgstr "" + +#: import.php:28 +msgid "" +"There was an error uploading the file. Please verify the size is not over " +"5MB and try again!" +msgstr "" + +#: import.php:31 +msgid "File has an incorrectly formatted name - try filename.txt!" +msgstr "" + +#: import.php:43 +msgid "File:" +msgstr "" + +#: import.php:48 +msgid "Layout:" +msgstr "" + +#: import.php:57 +msgid "Override previous month verification" +msgstr "" + +#: import.php:58 +msgid "Upload" +msgstr "" + +#: import.php:68 +msgid "Instructions:" +msgstr "" + +#: import.php:70 +msgid "Save file as .txt files in tab delimited format" +msgstr "" + +#: import.php:71 +msgid "File may not be larger than 5MB" +msgstr "" + +#: import.php:72 +msgid "" +"Ensure column headers conform to Counter's standards for the report type" +msgstr "" + +#: import.php:73 +msgid "More info: " +msgstr "" + +#: import.php:82 +msgid "Recent Imports" +msgstr "" + #: index.php:50 msgid "Search" msgstr "" @@ -541,6 +787,75 @@ msgstr "" msgid "Starts with" msgstr "" +#: not_avail.php:21 +msgid "Not Available" +msgstr "" + +#: not_avail.php:29 +msgid "Usage Statistics Module - " +msgstr "" + +#: not_avail.php:61 +msgid "" +"Please contact your Administrator for access to the Usage Statistics Module." +msgstr "" + +#: publisherPlatform.php:20 +msgid "View or Edit Publisher / Platform" +msgstr "" + +#: publisherPlatformList.php:4 +msgid "Edit Publishers / Platforms" +msgstr "" + +#: publisherPlatformList.php:16 +msgid "Publisher / Platform Update" +msgstr "" + +#: publisherPlatformList.php:31 +msgid "view / edit" +msgstr "" + +#: publisherPlatformList.php:50 reporting.php:71 +msgid "No publishers / platforms found." +msgstr "" + +#: reporting.php:2 +msgid "Report Options" +msgstr "" + +#: reporting.php:10 +msgid "Publisher / Platform Reporting Administrative Update" +msgstr "" + +#: reporting.php:12 +msgid "Directions:" +msgstr "" + +#: reporting.php:12 +msgid "" +" Mark the checkboxes to add / remove specific Platforms or Publishers to the " +"default report list." +msgstr "" + +#: reporting.php:12 +msgid "" +"Click 'edit report display name' to change the display name in the reporting " +"system for specific Platforms or Publishers." +msgstr "" + +#: reporting.php:25 +msgid "Available" +msgstr "" + +#: reporting.php:25 +msgid "As Default" +msgstr "" + +#: reporting.php:25 +msgid "Report" +msgstr "" + #: templates/header.php:167 msgid "Invalid translation route!" msgstr "" diff --git a/not_avail.php b/not_avail.php index ed280c6..e3484ee 100755 --- a/not_avail.php +++ b/not_avail.php @@ -18,7 +18,7 @@ include_once 'directory.php'; -$pageTitle='Not Available'; +$pageTitle=_('Not Available'); ?> @@ -26,7 +26,7 @@ -Usage Statistics Module - <?php echo $pageTitle; ?> +<?php echo _("Usage Statistics Module - ") . $pageTitle;?> @@ -58,7 +58,7 @@ if ($_GET['errorMessage']){ echo "

    " . $_GET['errorMessage'] . "

    "; }else{ - echo "

    YPlease contact your Administrator for access to the Usage Statistics Module.

    "; + echo "

    " . _("Please contact your Administrator for access to the Usage Statistics Module.") . "

    "; } ?> diff --git a/publisherPlatform.php b/publisherPlatform.php index 3fc6db2..95ae040 100755 --- a/publisherPlatform.php +++ b/publisherPlatform.php @@ -17,7 +17,7 @@ } -$pageTitle = 'View or Edit Publisher / Platform'; +$pageTitle = _('View or Edit Publisher / Platform'); include 'templates/header.php'; diff --git a/publisherPlatformList.php b/publisherPlatformList.php index 43554f3..ff14866 100755 --- a/publisherPlatformList.php +++ b/publisherPlatformList.php @@ -1,7 +1,7 @@ -
    Publisher / Platform Update
    +

    @@ -28,8 +28,8 @@ if (count($platformArray) > 0){ foreach($platformArray as $platform) { echo "
    "; - echo "" . $platform['name'] . "  view / edit"; - echo "
             show publisher list show publisher list
    "; + echo "" . $platform['name'] . "  " . _("view / edit") . ""; + echo "
             " . _("show publisher list") . " " . _("show publisher list") . "
    "; echo "\n"; diff --git a/reporting.php b/reporting.php index 7b043a7..1fa41b1 100755 --- a/reporting.php +++ b/reporting.php @@ -1,5 +1,5 @@ @@ -7,9 +7,9 @@ "; + echo ""; #also print out column headers echo ""; @@ -187,7 +187,7 @@ function updateSubmit(){ if (strpos($fileColName, strtolower($colCheckName)) === false){ if (!$unmatched){ - $unmatched = "Looking for \"$colCheckName\" in column $key but found \"$fileColName\""; + $unmatched = _("Looking for ") . "\"$colCheckName\"" . _(" in column ") . $key . _("but found ") . "\"$fileColName\""; } $formatCorrectFlag='N'; } @@ -262,34 +262,34 @@ function updateSubmit(){ $errrorFlag="N"; if (($formatCorrectFlag == "N")){ - echo "
    Error with Format: Report format is set to " . $reportTypeDisplay . " but does not match the column names listed in layouts.ini for this format - $unmatched.

    Expecting columns: " . implode(", ", $columnsToCheck) . "

    Found columns: " . $foundColumns . "


    If problems persist you can copy an existing header that works into this file."; + echo "
    " . _("Error with Format") . ": " . _("Report format is set to ") . "" . $reportTypeDisplay . "" . _(" but does not match the column names listed in layouts.ini for this format - ") . $unmatched . "

    " . _("Expecting columns: ") . implode(", ", $columnsToCheck) . "

    " . _("Found columns: ") . $foundColumns . "


    " . _("If problems persist you can copy an existing header that works into this file."); $errorFlag="Y"; } if (!$layoutKey){ - echo "
    Error with Setup: This report format is not set up in layouts.ini.
    "; + echo "
    " . _("Error with Setup: This report format is not set up in layouts.ini.") . "
    "; $errorFlag="Y"; } if (($startFlag == "N")){ - echo "
    Error with Format: The line preceding the first should start with 'Total'.
    "; + echo "
    " . _("Error with Format: The line preceding the first should start with 'Total'.") . "
    "; $errorFlag="Y"; } if ($checkYear > date('Y')){ - echo "
    Error with Year: Year listed in header (" . $checkYear . ") may not be ahead of current year. Please correct and submit again.
    "; + echo "
    " . _("Error with Year: Year listed in header ") . "(" . $checkYear . ")" . _(" may not be ahead of current year. Please correct and submit again.") . "
    "; $errorFlag="Y"; } if (isset($_POST['overrideInd'])){ - echo "
    File is flagged to override verifications of previous month data. If this is incorrect use 'Cancel' to fix.
    "; + echo "
    " . _("File is flagged to override verifications of previous month data. If this is incorrect use 'Cancel' to fix.") . "
    "; $overrideInd = 1; }else{ $overrideInd = 0; } if ($errorFlag != "Y"){ - echo "
    Report Format: " . $reportTypeDisplay . "
    If this is incorrect, please use 'Cancel' to go back and fix the headers of the file.
    "; + echo "
    " . _("Report Format: ") . "" . $reportTypeDisplay . "
    " . _("If this is incorrect, please use 'Cancel' to go back and fix the headers of the file.") . "
    "; } ?> @@ -305,10 +305,10 @@ function updateSubmit(){
    -
    Publisher / Platform Reporting Administrative Update
    +
    -Directions: Mark the checkboxes to add / remove specific Platforms or Publishers to the default report list.
    Click 'edit report display name' to change the display name in the reporting system for specific Platforms or Publishers. +


    0){ - echo "Available
    As Default
    Report"; + echo _("Available") . "
    " . _("As Default") . "
    " . _("Report"); echo "
    "; @@ -68,7 +68,7 @@ echo "
    "; }else{ - echo "No publishers / platforms found."; + echo "" . _("No publishers / platforms found.") . ""; } From c0d3c6aa0ca8e5b10072036c2d880d91e6ba970d Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 18 Apr 2016 08:54:18 -0600 Subject: [PATCH 26/52] Adding Localization --- spreadsheet.php | 110 ++++++++++----------- sushi.php | 176 ++++++++++++++++----------------- sushiSchedule.php | 174 ++++++++++++++++---------------- titles_spreadsheet.php | 218 ++++++++++++++++++++--------------------- uploadComplete.php | 64 ++++++------ uploadConfirmation.php | 28 +++--- 6 files changed, 385 insertions(+), 385 deletions(-) diff --git a/spreadsheet.php b/spreadsheet.php index 8548b0e..4c47b64 100755 --- a/spreadsheet.php +++ b/spreadsheet.php @@ -57,61 +57,61 @@ - - + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + "; if ($resourceType == 'Journal'){ - echo ""; + echo ""; }else if ($resourceType == 'Book'){ - echo ""; + echo ""; }else if ($resourceType == 'Database'){ - echo ""; + echo ""; } //get ytd data if available diff --git a/sushi.php b/sushi.php index 8ca55cb..c123e64 100755 --- a/sushi.php +++ b/sushi.php @@ -1,89 +1,89 @@ -. -** -************************************************************************************************************************** -*/ - - -session_start(); - -include_once 'directory.php'; - -//print header -$pageTitle='SUSHI Import'; -include 'templates/header.php'; - - - -//this a SUSHI Service ID has been passed in, it needs to be run -if ($_POST['sushiServiceID'] > 0){ - $sushiServiceID = $_POST['sushiServiceID']; - $sushiService = new SushiService(new NamedArguments(array('primaryKey' => $sushiServiceID))); - - $sushiService->setImportDates($_POST['startDate'], $_POST['endDate']); - - //try to run! - try { - $logText = $sushiService->runAll($_POST['overwritePlatform']); - } catch (Exception $e) { - $logText = $e->getMessage(); - } - - $logText = "
    Sushi Output Log:
    " . nl2br($logText) . "

    "; -} - -?> - - - -
     PublisherPlatform DOIProprietary IDPrint ISSNOnline ISSNYTD TotalYTD HTMLYTD PDFJan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec- DOIProprietary IDISBNISSNYTD TotalJan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec- User ActivityYTD TotalJan-Feb-Mar-Apr-May-Jun-Jul-Aug-Sep-Oct-Nov-Dec- Total for all Journals" . _("Total for all Journals") . "Total for all Books" . _("Total for all Books") . "Total for all Databases" . _("Total for all Databases") . "
    - -
    - - - - - -
    SUSHI Administration
     
    - - - Add new platform for SUSHI -


    - -


    -
    Outstanding Import Queue   
    -
    - -
    - -
    Last Failed SUSHI Imports   
    -
    - -


    -
    All SUSHI Services   
    -
    - - - -
    - - - -. +** +************************************************************************************************************************** +*/ + + +session_start(); + +include_once 'directory.php'; + +//print header +$pageTitle=_('SUSHI Import'); +include 'templates/header.php'; + + + +//this a SUSHI Service ID has been passed in, it needs to be run +if ($_POST['sushiServiceID'] > 0){ + $sushiServiceID = $_POST['sushiServiceID']; + $sushiService = new SushiService(new NamedArguments(array('primaryKey' => $sushiServiceID))); + + $sushiService->setImportDates($_POST['startDate'], $_POST['endDate']); + + //try to run! + try { + $logText = $sushiService->runAll($_POST['overwritePlatform']); + } catch (Exception $e) { + $logText = $e->getMessage(); + } + + $logText = "
    " . _("Sushi Output Log:") . "
    " . nl2br($logText) . "

    "; +} + +?> + + + + + +
    + + + + + +

     
    + + + +


    + +


    +
       
    +
    + +
    + +
       
    +
    + +


    +
       
    +
    + + + +
    + + + + \ No newline at end of file diff --git a/sushiSchedule.php b/sushiSchedule.php index e13d062..3f86262 100644 --- a/sushiSchedule.php +++ b/sushiSchedule.php @@ -1,87 +1,87 @@ -. -** -************************************************************************************************************************** -*/ - - -session_start(); -include_once 'directory.php'; - -$util = new Utility(); -$config = new Configuration(); - - -// find sushi services which need to be run today -$day = date("j"); -$sushiServices = new SushiService(); -$sushiServicesArray = $sushiServices->getByDayOfMonth($day); - -$emailLog = "

    " . count($sushiServicesArray) . " SUSHI runs found for day: " . $day . "

    "; - -foreach ($sushiServicesArray as $sushiService){ - $sushiService->setImportDates(); - $emailLog .= "

    " . $sushiService->getServiceProvider() . "

    "; - - //try to run! - try { - $emailLog .= nl2br($sushiService->runAll($_POST['overwritePlatform'])); - } catch (Exception $e) { - $emailLog .= nl2br($e->getMessage()); - } - -} - - -//if more than one run, send email -if (count($sushiServicesArray) > 0) { - - $emailLog .= "

    Log in to Sushi Administration for more information."; - - //send email to email addresses listed in DB - $logEmailAddress = new LogEmailAddress(); - $emailAddresses = array(); - - foreach ($logEmailAddress->allAsArray() as $emailAddress){ - $emailAddresses[] = $emailAddress['emailAddress']; - } - - if (count($emailAddresses) > 0){ - $email = new Email(); - $email->to = implode(", ", $emailAddresses); - $email->subject = "SUSHI Scheduled run log for " . format_date(date) . " - " . count($sushiServicesArray) . " runs"; - $email->message = $emailLog; - - - if ($email->send()) { - echo "Run complete. Log has been emailed to " . implode(", ", $emailAddresses); - }else{ - echo "Email to " . implode(", ", $emailAddresses) . " Failed!"; - } - } - -}else{ - echo "Nothing to see here! (no sushi scheduled today)"; -} - - -echo "

    " . $emailLog; - -?> - - - - +. +** +************************************************************************************************************************** +*/ + + +session_start(); +include_once 'directory.php'; + +$util = new Utility(); +$config = new Configuration(); + + +// find sushi services which need to be run today +$day = date("j"); +$sushiServices = new SushiService(); +$sushiServicesArray = $sushiServices->getByDayOfMonth($day); + +$emailLog = "

    " . count($sushiServicesArray) . _(" SUSHI runs found for day: ") . $day . "

    "; + +foreach ($sushiServicesArray as $sushiService){ + $sushiService->setImportDates(); + $emailLog .= "

    " . $sushiService->getServiceProvider() . "

    "; + + //try to run! + try { + $emailLog .= nl2br($sushiService->runAll($_POST['overwritePlatform'])); + } catch (Exception $e) { + $emailLog .= nl2br($e->getMessage()); + } + +} + + +//if more than one run, send email +if (count($sushiServicesArray) > 0) { + + $emailLog .= "

    " . _("Log in to ") . "" . _("Sushi Administration") . "" . _(" for more information."); + + //send email to email addresses listed in DB + $logEmailAddress = new LogEmailAddress(); + $emailAddresses = array(); + + foreach ($logEmailAddress->allAsArray() as $emailAddress){ + $emailAddresses[] = $emailAddress['emailAddress']; + } + + if (count($emailAddresses) > 0){ + $email = new Email(); + $email->to = implode(", ", $emailAddresses); + $email->subject = _("SUSHI Scheduled run log for ") . format_date(date) . " - " . count($sushiServicesArray) . _(" runs"); + $email->message = $emailLog; + + + if ($email->send()) { + echo _("Run complete. Log has been emailed to ") . implode(", ", $emailAddresses); + }else{ + echo _("Email to ") . implode(", ", $emailAddresses) . _(" Failed!"); + } + } + +}else{ + echo _("Nothing to see here! (no sushi scheduled today)"); +} + + +echo "

    " . $emailLog; + +?> + + + + diff --git a/titles_spreadsheet.php b/titles_spreadsheet.php index 09309e1..1623a90 100755 --- a/titles_spreadsheet.php +++ b/titles_spreadsheet.php @@ -1,109 +1,109 @@ - $_GET['publisherPlatformID']))); -}else{ - $platformID = $_GET['platformID']; - $publisherPlatformID = ''; - $obj = new Platform(new NamedArguments(array('primaryKey' => $_GET['platformID']))); -} - - -$display_name = $obj->reportDisplayName; - - -$excelfile = $display_name . "_" . $resourceType . "_Titles"; - - -$excelfile = str_replace (' ','_',$excelfile) . '.xls'; - -header("Content-type: application/vnd.ms-excel"); -header("Content-Disposition: attachment; filename=" . $excelfile); - -?> - - - - - - -

    Titles

    - -getJournalTitles; -}else if ($resourceType == "Book"){ - $titleArray = $obj->getBookTitles; -} -?> - - - - - - - - - - - - -"; - -if ($resourceType == "Journal"){ - - foreach($titleArray as $title) { - - echo "\n"; - echo "\n"; - - //get the first Identifier to use for the terms tool lookup - $doi = $title['doi']; - $issn = $title['issn']; - $eissn = $title['eissn']; - - echo "\n"; - echo "\n"; - echo "\n"; - - - echo ""; - - #end Title loop - } -}else{ - - foreach($titleArray as $title) { - - echo "\n"; - - echo "\n"; - - //get the first Identifier to use for the terms tool lookup - $doi = $title['doi']; - $isbn = $title['isbn']; - $issn = $title['issn']; - - echo "\n"; - echo "\n"; - echo "\n"; - - - echo ""; - - #end Title loop - } - -} -?> - -
    TitleDOIPrint ISSNOnline ISSNDOIISBNISSN
    " . $title['title'] . "" . $doi . "" . $issn . "" . $eissn . "
    " . $title['title'] . "" . $doi . "'" . $isbn . "" . $issn . "
    - - + $_GET['publisherPlatformID']))); +}else{ + $platformID = $_GET['platformID']; + $publisherPlatformID = ''; + $obj = new Platform(new NamedArguments(array('primaryKey' => $_GET['platformID']))); +} + + +$display_name = $obj->reportDisplayName; + + +$excelfile = $display_name . "_" . $resourceType . "_Titles"; + + +$excelfile = str_replace (' ','_',$excelfile) . '.xls'; + +header("Content-type: application/vnd.ms-excel"); +header("Content-Disposition: attachment; filename=" . $excelfile); + +?> + + + + + + +

    + +getJournalTitles; +}else if ($resourceType == "Book"){ + $titleArray = $obj->getBookTitles; +} +?> + + + + + + + + + + + + +"; + +if ($resourceType == "Journal"){ + + foreach($titleArray as $title) { + + echo "\n"; + echo "\n"; + + //get the first Identifier to use for the terms tool lookup + $doi = $title['doi']; + $issn = $title['issn']; + $eissn = $title['eissn']; + + echo "\n"; + echo "\n"; + echo "\n"; + + + echo ""; + + #end Title loop + } +}else{ + + foreach($titleArray as $title) { + + echo "\n"; + + echo "\n"; + + //get the first Identifier to use for the terms tool lookup + $doi = $title['doi']; + $isbn = $title['isbn']; + $issn = $title['issn']; + + echo "\n"; + echo "\n"; + echo "\n"; + + + echo ""; + + #end Title loop + } + +} +?> + +
    Title
    " . $title['title'] . "" . $doi . "" . $issn . "" . $eissn . "
    " . $title['title'] . "" . $doi . "'" . $isbn . "" . $issn . "
    + + diff --git a/uploadComplete.php b/uploadComplete.php index dfeb37f..be4f747 100755 --- a/uploadComplete.php +++ b/uploadComplete.php @@ -22,7 +22,7 @@ $util = new Utility(); -$pageTitle = 'Upload Process Complete'; +$pageTitle = _('Upload Process Complete'); //read layouts ini file to get the layouts to map to columns in the database $layoutsArray = parse_ini_file("layouts.ini", true); @@ -64,9 +64,9 @@ $logSummary = "\n" . $orgFileName; $topLogOutput = ""; -$logOutput = "Process started on " . date('l jS \of F Y h:i A') . "
    "; -$logOutput.= "File: " . $uploadedFile . "

    "; -$logOutput.= "Report Format: " . $reportTypeDisplay . "

    "; +$logOutput = _("Process started on ") . date('l jS \of F Y h:i A') . "
    "; +$logOutput.= _("File: ") . $uploadedFile . "

    "; +$logOutput.= _("Report Format: ") . $reportTypeDisplay . "

    "; $monthlyInsert=''; $screenOutput = ''; @@ -79,14 +79,14 @@ if ($config->settings->useOutliers == "Y"){ - $logOutput.="Outlier Parameters:
    "; + $logOutput.=_("Outlier Parameters:") . "
    "; $outliers = new Outlier(); $outlierArray = array(); foreach($outliers->allAsArray as $outlierArray) { - $logOutput.="Level " . $outlierArray['outlierLevel'] . ": " . $outlierArray['overageCount'] . " over plus " . $outlierArray['overagePercent'] . "% over
    "; + $logOutput.=_("Level ") . $outlierArray['outlierLevel'] . ": " . $outlierArray['overageCount'] . _(" over plus ") . $outlierArray['overagePercent'] . _("% over ") . "
    "; $outlier[$outlierArray['outlierID']]['overageCount'] = $outlierArray['overageCount']; $outlier[$outlierArray['outlierID']]['overagePercent'] = $outlierArray['overagePercent']; @@ -243,7 +243,7 @@ //Find the most recent month for this year / Platform that we have statistics for if override isn't set if (($platformID) && !($startMonth)){ if ($overrideInd == 1){ - $logOutput .= "Override indicator set - all months will be imported."; + $logOutput .= _("Override indicator set - all months will be imported."); }else{ $monthArray = $platformObj->getTotalMonths($resourceType, $archiveInd, $year); $count_months = $monthArray['count_months']; @@ -252,16 +252,16 @@ if ($count_months == 12){ - $logOutput .= "Entire year already exists for this Platform / year. No counts will be imported."; + $logOutput .= _("Entire year already exists for this Platform / year. No counts will be imported."); $startMonth = 13; }else if (($min_month == 1) && ($max_month < 13)) { $startMonth=$max_month + 1; - $logOutput .= "Month Started at: " . $startMonth; + $logOutput .= _("Month Started at: ") . $startMonth; }else if ($count_months == 0){ - $logOutput .= "No records exist for this Platform / year. Import will start with month 1."; + $logOutput .= _("No records exist for this Platform / year. Import will start with month 1."); }else{ $endMonth=$min_month-1; - $logOutput .= "Partial year records exist for this Platform / year. Import will start with month 1 and end with month $endMonth."; + $logOutput .= _("Partial year records exist for this Platform / year. Import will start with month 1 and end with month $endMonth."); } } @@ -280,7 +280,7 @@ //For log output we only want to print the year once if ($year != $holdYear) { - $logOutput .= "
    Year: " . $year; + $logOutput .= "
    " . _("Year: ") . $year; } //If Platform does not already exist, insert it and get the new ID @@ -314,7 +314,7 @@ #add to output on screen - $screenOutput .= "
    New Platform set up: " . $platformName . " edit"; + $screenOutput .= "
    " . _("New Platform set up: ") . $platformName . " " . _("edit") . ""; } @@ -396,7 +396,7 @@ #add to log output - $logOutput .= "
    New Publisher / Platform set up: " . $publisherName . " / " . $platformName; + $logOutput .= "
    " . _("New Publisher / Platform set up: ") . $publisherName . " / " . $platformName; } @@ -613,7 +613,7 @@ if ($pubPlat != $holdPubPlat) { if (trim($pubPlat)){ - $logOutput .= "

    Publisher / Platform: " . $pubPlat; + $logOutput .= "

    " . _("Publisher / Platform: ") . $pubPlat; } } @@ -622,7 +622,7 @@ $rownumber++; //Add Title to log output if (trim($resourceTitle)){ - $logOutput .="

    Title: " . $resourceTitle; + $logOutput .="

    " . _("Title: ") . $resourceTitle; } @@ -659,7 +659,7 @@ //flag when inserted into db that this is a merged statistic $mergeInd = 1; - $logOutput .= "Duplicate record for this Print ISSN in same spreadsheet: Month: " . $i . " New Count: " . $usageCount; + $logOutput .= _("Duplicate record for this Print ISSN in same spreadsheet: Month: ") . $i . _(" New Count: ") . $usageCount; } #calculate Outlier - dont bother if this is a new Title @@ -743,16 +743,16 @@ if (is_numeric($usageCount)){ - $logOutput .= "New Usage Count Record Added: Month: " . $i . " Count: " . $usageCount; + $logOutput .= _("New Usage Count Record Added: Month: ") . $i . _(" Count: ") . $usageCount; }else{ - $logOutput .= "Usage Count Record is not numeric for month: " . $i . " Count: " . $usageCount . " imported as 0."; + $logOutput .= _("Usage Count Record is not numeric for month: ") . $i . _(" Count: ") . $usageCount . " imported as 0."; } $monthlyInsert=1; if ($outlierID){ - $logOutput .= "
    Outlier found for this record: Level " . $outlierLevel . ""; + $logOutput .= "
    " . _("Outlier found for this record: Level ") . $outlierLevel . ""; } @@ -761,7 +761,7 @@ //} }else{ - $logOutput .= "Current or future month will not be imported: " . $i . "-" . $year . ": " . $usageCount; + $logOutput .= _("Current or future month will not be imported: ") . $i . "-" . $year . ": " . $usageCount; } //end usage count is entered @@ -800,7 +800,7 @@ $ytdHTML += $yearCountArray['ytdHTMLCount']; $ytdPDF += $yearCountArray['ytdPDFCount']; - $logOutput .= "
    YTD Already Exists for this Print ISSN, counts are added together."; + $logOutput .= "
    " . _("YTD Already Exists for this Print ISSN, counts are added together."); } //delete these yearly stats since we will next overwrite them @@ -824,14 +824,14 @@ try { $yearlyUsageSummary->save(); - $logOutput .= "
    YTD Total Count: " . $ytd . "
    YTD HTML Count: " . $ytdHTML . "
    YTD PDF Count: " . $ytdPDF; + $logOutput .= "
    " . _("YTD Total Count: ") . $ytd . "
    " . _("YTD HTML Count: ") . $ytdHTML . "
    " . _("YTD PDF Count: ") . $ytdPDF; } catch (Exception $e) { echo $e->getMessage(); } }else{ - $logOutput .= "
    No YTD import performed since monthly stats were not imported"; + $logOutput .= "
    " . _("No YTD import performed since monthly stats were not imported"); } //end ytd if statement @@ -841,7 +841,7 @@ $pISSNArray[$pISSN] = 1; }else{ //end if for if Title match found - $topLogOutput .= "Title match did not complete correctly, please check ISBN / ISSN to verify for Title: " . $resourceTitle . ".
    "; + $topLogOutput .= "" . _("Title match did not complete correctly, please check ISBN / ISSN to verify for Title: ") . $resourceTitle . ".
    "; } @@ -893,14 +893,14 @@ if (count($emailAddresses) > 0){ $email = new Email(); $email->to = implode(", ", $emailAddresses); - $email->subject = "Log Output for $uploadedFile"; - $email->message = "Usage Statistics File Import Run!\n\nPlease find log file: \n\n" . $Base_URL . $logfile; + $email->subject = _("Log Output for ") . $uploadedFile; + $email->message = _("Usage Statistics File Import Run!") . "\n\n" . _("Please find log file: ") . "\n\n" . $Base_URL . $logfile; if ($email->send()) { - $mailOutput = "Log has been emailed to " . implode(", ", $emailAddresses); + $mailOutput = _("Log has been emailed to ") . implode(", ", $emailAddresses); }else{ - $mailOutput = "Email to " . implode(", ", $emailAddresses) . " Failed!"; + $mailOutput = _("Email to ") . implode(", ", $emailAddresses) . _(" Failed!"); } } @@ -913,14 +913,14 @@ $importLog = new ImportLog(new NamedArguments(array('primaryKey' => $importLogID))); $importLog->fileName = $importLog->fileName; $importLog->archiveFileURL = $importLog->fileName; - $importLog->details = $importLog->details . "\n" . $rownumber . " titles processed." . $logSummary; + $importLog->details = $importLog->details . "\n" . $rownumber . _(" titles processed.") . $logSummary; }else{ $importLog = new ImportLog(); $importLog->importLogID = ''; $importLog->fileName = $orgFileName; $importLog->archiveFileURL = 'archive/' . $uploadedFilename; - $importLog->details = $rownumber . " titles processed." . $logSummary; + $importLog->details = $rownumber . _(" titles processed.") . $logSummary; } $importLog->loginID = $user->loginID; @@ -963,7 +963,7 @@

    Log file available at: .

    Process completed.


    - Summary:" . nl2br($logSummary); ?>
    + " . nl2br($logSummary); ?>


     

    diff --git a/uploadConfirmation.php b/uploadConfirmation.php index 20c0102..6ef7ab4 100755 --- a/uploadConfirmation.php +++ b/uploadConfirmation.php @@ -30,7 +30,7 @@ $layout->getByLayoutCode($importLog->layoutCode); $layoutID = $layout->layoutID; - $pageTitle = 'SUSHI Import Confirmation'; + $pageTitle = _('SUSHI Import Confirmation'); $target_path = $importLog->fileName; $checkYear = date("Y"); @@ -67,7 +67,7 @@ }else{ if(move_uploaded_file($_FILES['usageFile']['tmp_name'], $target_path)) { - $uploadConfirm = "The file ". basename( $_FILES['usageFile']['name'])." has been uploaded successfully.
    Please confirm the following data:
    "; + $uploadConfirm = _("The file ") . basename( $_FILES['usageFile']['name']) . _(" has been uploaded successfully.") . "
    " . _("Please confirm the following data:") . "
    "; } else{ header( 'Location: import.php?error=2' ) ; } @@ -87,7 +87,7 @@ $file_handle = $util->utf8_fopen_read($target_path, false); - $pageTitle = 'Upload Process Confirmation'; + $pageTitle = _('Upload Process Confirmation'); } @@ -99,7 +99,7 @@ function updateSubmit(){ document.confirmForm.submitForm.disabled=true; - document.confirmForm.submitForm.value="Processing Contents..."; + document.confirmForm.submitForm.value=_("Processing Contents..."); document.confirmForm.submit(); } @@ -139,7 +139,7 @@ function updateSubmit(){ if ($importLog->loginID == "sushi"){ //print out report type and year - echo "
    " . $reportTypeDisplay . " for " . $checkYear . "
    " . $reportTypeDisplay . _(" for ") . $checkYear . "
    - onclick="javascript:updateSubmit();" class="submit-button" /> + onclick="javascript:updateSubmit();" class="submit-button" /> - +
    From b513fcff68e9a3e14fd34bd44686f31541f8a6ef Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 18 Apr 2016 09:39:12 -0600 Subject: [PATCH 27/52] Adding Localization --- js/admin.js | 10 +- js/forms/externalLoginSubmitForm.js | 4 +- js/forms/organizationForm.js | 2 +- js/forms/outlierSubmitForm.js | 2 +- js/forms/overrideSubmitForm.js | 2 +- js/forms/platformNoteSubmitForm.js | 6 +- js/forms/platformSubmitForm.js | 162 ++++----- js/forms/publisherNoteSubmitForm.js | 4 +- js/import.js | 146 ++++---- js/index.js | 4 +- js/publisherPlatform.js | 8 +- js/publisherPlatformList.js | 4 +- js/reporting.js | 6 +- locale/fr_FR/LC_MESSAGES/messages.mo | Bin 672 -> 672 bytes locale/fr_FR/LC_MESSAGES/messages.po | 514 ++++++++++++++++++++++++++- 15 files changed, 684 insertions(+), 190 deletions(-) diff --git a/js/admin.js b/js/admin.js index 6a1621e..63089d8 100755 --- a/js/admin.js +++ b/js/admin.js @@ -118,11 +118,11 @@ function doSubmitLogEmailAddress(){ // Validate Log Email Address function validateLogEmail(){ if($("#emailAddress").val() == ''){ - $("#span_errors").html('Error - Please enter a value.'); + $("#span_errors").html(_('Error - Please enter a value.')); $("#emailAddress").focus(); return false; }else if(!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9]+$/.test( $("#emailAddress").val() )){ - $("#span_errors").html('Error - Please enter a valid email address.'); + $("#span_errors").html(_('Error - Please enter a valid email address.')); $("#emailAddress").focus(); return false; }else{ @@ -132,7 +132,7 @@ function validateLogEmail(){ function deleteLogEmailAddress(addressID){ - if (confirm("Do you really want to delete this email address?") == true) { + if (confirm(_("Do you really want to delete this email address?")) == true) { $.ajax({ type: "GET", url: "ajax_processing.php", @@ -196,8 +196,8 @@ function validateLogEmail(){ //validates fields for outlier form function validateForm (){ myReturn=0; - if (!validateNumber('overageCount','Count over must be a number.')) myReturn="1"; - if (!validateNumber('overagePercent','% over must be a number.')) myReturn="1"; + if (!validateNumber('overageCount',_('Count over must be a number.'))) myReturn="1"; + if (!validateNumber('overagePercent',_('% over must be a number.'))) myReturn="1"; if (myReturn == "1"){ return false; diff --git a/js/forms/externalLoginSubmitForm.js b/js/forms/externalLoginSubmitForm.js index b427b62..3ea04a8 100755 --- a/js/forms/externalLoginSubmitForm.js +++ b/js/forms/externalLoginSubmitForm.js @@ -51,11 +51,11 @@ function validateExternalLogin() { if($("#username").val() == ''){ - $("#span_errors").html('
    Please enter an username to continue'); + $("#span_errors").html('
    ' + _('Please enter a username to continue'); $("#username").focus(); return false; }else if($("#password").val() == ''){ - $("#span_errors").html('
    For security, please enter a password'); + $("#span_errors").html('
    ' + _('For security, please enter a password'); $("#password").focus(); return false; }else{ diff --git a/js/forms/organizationForm.js b/js/forms/organizationForm.js index bef3cf1..61e8c4a 100755 --- a/js/forms/organizationForm.js +++ b/js/forms/organizationForm.js @@ -31,7 +31,7 @@ $(function(){ success: function(exists) { if ((exists == 0) && ($("#organizationName").val() != '')){ $("#organizationID").val(""); - $("#span_error_organizationNameResult").html("
    This organization doesn't exist in the CORAL Organizations module."); + $("#span_error_organizationNameResult").html("
    " + _("This organization doesn't exist in the CORAL Organizations module.")); $('#submitOrganization').attr("disabled", "disabled"); }else{ diff --git a/js/forms/outlierSubmitForm.js b/js/forms/outlierSubmitForm.js index fad0ff3..db05d21 100755 --- a/js/forms/outlierSubmitForm.js +++ b/js/forms/outlierSubmitForm.js @@ -91,7 +91,7 @@ function ignoreOutlier(monthlyUsageSummaryIDValue){ //validates fields function validateForm (monthlyUsageSummaryIDValue){ myReturn=0; - if (!validateRequired('overrideUsageCount_' + monthlyUsageSummaryIDValue, '
    Count is required. If you wish to remove the count the outlier should be ignored.')) myReturn="1"; + if (!validateRequired('overrideUsageCount_' + monthlyUsageSummaryIDValue, '
    ' + _('Count is required. If you wish to remove the count the outlier should be ignored.'))) myReturn="1"; if (myReturn == "1"){ return false; }else{ diff --git a/js/forms/overrideSubmitForm.js b/js/forms/overrideSubmitForm.js index 1d44d75..1300c96 100755 --- a/js/forms/overrideSubmitForm.js +++ b/js/forms/overrideSubmitForm.js @@ -55,7 +55,7 @@ function updateYTDOverride(yearlyUsageSummaryIDValue, overrideColumn){ //validates fields function validateForm (columnName){ myReturn=0; - if (!validateRequired(columnName, 'Count is required.')) myReturn="1"; + if (!validateRequired(columnName, _('Count is required.'))) myReturn="1"; if (myReturn == "1"){ return false; }else{ diff --git a/js/forms/platformNoteSubmitForm.js b/js/forms/platformNoteSubmitForm.js index f4b094c..5361b9c 100755 --- a/js/forms/platformNoteSubmitForm.js +++ b/js/forms/platformNoteSubmitForm.js @@ -51,9 +51,9 @@ function submitPlatformNotes(){ errorMessage=''; - if (isYear($("#startYear").val()) == false) { errorMessage = "
    Start Year must be 4 numbers and start with 19 or 20.\n"; } - if ((isYear($("#endYear").val()) == false) && ($("#endYear").val() != '')){ errorMessage += "
    End Year must be 4 numbers and start with 19 or 20.\n"; } - if (!($('#counterCompliantInd:checked').length > 0)) { errorMessage += "
    Please choose Yes or No for Counter Compliant.\n"; } + if (isYear($("#startYear").val()) == false) { errorMessage = "
    " + _("Start Year must be 4 numbers and start with 19 or 20.") + "\n"; } + if ((isYear($("#endYear").val()) == false) && ($("#endYear").val() != '')){ errorMessage += "
    " + _("End Year must be 4 numbers and start with 19 or 20.") + "\n"; } + if (!($('#counterCompliantInd:checked').length > 0)) { errorMessage += "
    " + _("Please choose Yes or No for Counter Compliant.") + "\n"; } $('#span_errors').html(errorMessage); diff --git a/js/forms/platformSubmitForm.js b/js/forms/platformSubmitForm.js index 8ee3b5d..7c73f3a 100755 --- a/js/forms/platformSubmitForm.js +++ b/js/forms/platformSubmitForm.js @@ -1,81 +1,81 @@ -/* -************************************************************************************************************************** -** CORAL Usage Statistics Module -** -** Copyright (c) 2010 University of Notre Dame -** -** This file is part of CORAL. -** -** CORAL 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, either version 3 of the License, or (at your option) any later version. -** -** CORAL 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 CORAL. If not, see . -** -************************************************************************************************************************** -*/ - - $(function(){ - - - $("#submitPlatformForm").click(function () { - submitPlatform(); - }); - - - //do submit if enter is hit - $('#platformName').keyup(function(e) { - if(e.keyCode == 13) { - submitPlatform(); - } - }); - - - }); - - - - - - -function submitPlatform(){ - - - if (validateForm() === true) { - $('#span_error_Platform').html(''); - - $.ajax({ - type: "POST", - url: "ajax_processing.php?action=addPlatform", - cache: false, - data: { platformName: $("#platformName").val() }, - success: function(platformID) { - window.parent.tb_remove(); - window.location = 'publisherPlatform.php?platformID=' + platformID + '&showTab=sushi'; - return false; - } - - - }); - - } - -} - - - -//validates fields -function validateForm (){ - myReturn=0; - if ($("#platformName").val() == ""){ - $('#span_error_Platform').html('
    Platform must be entered.'); - myReturn=1; - } - - - if (myReturn == "1"){ - return false; - }else{ - return true; - } -} +/* +************************************************************************************************************************** +** CORAL Usage Statistics Module +** +** Copyright (c) 2010 University of Notre Dame +** +** This file is part of CORAL. +** +** CORAL 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, either version 3 of the License, or (at your option) any later version. +** +** CORAL 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 CORAL. If not, see . +** +************************************************************************************************************************** +*/ + + $(function(){ + + + $("#submitPlatformForm").click(function () { + submitPlatform(); + }); + + + //do submit if enter is hit + $('#platformName').keyup(function(e) { + if(e.keyCode == 13) { + submitPlatform(); + } + }); + + + }); + + + + + + +function submitPlatform(){ + + + if (validateForm() === true) { + $('#span_error_Platform').html(''); + + $.ajax({ + type: "POST", + url: "ajax_processing.php?action=addPlatform", + cache: false, + data: { platformName: $("#platformName").val() }, + success: function(platformID) { + window.parent.tb_remove(); + window.location = 'publisherPlatform.php?platformID=' + platformID + '&showTab=sushi'; + return false; + } + + + }); + + } + +} + + + +//validates fields +function validateForm (){ + myReturn=0; + if ($("#platformName").val() == ""){ + $('#span_error_Platform').html('
    ' + _('Platform must be entered.')); + myReturn=1; + } + + + if (myReturn == "1"){ + return false; + }else{ + return true; + } +} diff --git a/js/forms/publisherNoteSubmitForm.js b/js/forms/publisherNoteSubmitForm.js index 7ddf276..2a3f3a3 100755 --- a/js/forms/publisherNoteSubmitForm.js +++ b/js/forms/publisherNoteSubmitForm.js @@ -52,8 +52,8 @@ function submitPublisherNote(){ errorMessage=''; - if (isYear($("#startYear").val()) == false) { errorMessage = "
    Start Year must be 4 numbers and start with 19 or 20.\n"; } - if ((isYear($("#endYear").val()) == false) && ($("#endYear").val() != '')) { errorMessage += "
    End Year must be 4 numbers and start with 19 or 20.\n"; } + if (isYear($("#startYear").val()) == false) { errorMessage = "
    " + _("Start Year must be 4 numbers and start with 19 or 20.") + "\n"; } + if ((isYear($("#endYear").val()) == false) && ($("#endYear").val() != '')) { errorMessage += "
    " + _("End Year must be 4 numbers and start with 19 or 20.") + "\n"; } $('#span_errors').html(errorMessage); diff --git a/js/import.js b/js/import.js index 30d0eb2..b75dd3a 100755 --- a/js/import.js +++ b/js/import.js @@ -1,73 +1,73 @@ -/* -************************************************************************************************************************** -** CORAL Usage Statistics Module -** -** Copyright (c) 2010 University of Notre Dame -** -** This file is part of CORAL. -** -** CORAL 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, either version 3 of the License, or (at your option) any later version. -** -** CORAL 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 CORAL. If not, see . -** -************************************************************************************************************************** -*/ - - - $(document).ready(function(){ - - updateImportTable(); - - - //do submit if enter is hit - $('#submitFile').keyup(function(e) { - if(e.keyCode == 13) { - submitForm(); - } - }); - - }); - - - - var pageStart = '1'; - - function updateImportTable(){ - $('#span_feedback').html('  Loading...'); - $.ajax({ - type: "GET", - url: "ajax_htmldata.php", - cache: false, - data: "action=getImportTable&pageStart=" + pageStart, - success: function(html) { - $('#span_feedback').html(''); - $('#div_recentImports').html(html); - tb_reinit(); - } - }); - - } - - - -function setPageStart(pageStartNumber){ - pageStart=pageStartNumber; - updateImportTable(); -} - - - -function validateForm(){ - - if ($("#usageFile").val() == '') { - $('#span_error').html(' Please select a file.'); - return false; - }else{ - $('#span_error').html(''); - return true; - } - -} - +/* +************************************************************************************************************************** +** CORAL Usage Statistics Module +** +** Copyright (c) 2010 University of Notre Dame +** +** This file is part of CORAL. +** +** CORAL 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, either version 3 of the License, or (at your option) any later version. +** +** CORAL 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 CORAL. If not, see . +** +************************************************************************************************************************** +*/ + + + $(document).ready(function(){ + + updateImportTable(); + + + //do submit if enter is hit + $('#submitFile').keyup(function(e) { + if(e.keyCode == 13) { + submitForm(); + } + }); + + }); + + + + var pageStart = '1'; + + function updateImportTable(){ + $('#span_feedback').html('  Loading...'); + $.ajax({ + type: "GET", + url: "ajax_htmldata.php", + cache: false, + data: "action=getImportTable&pageStart=" + pageStart, + success: function(html) { + $('#span_feedback').html(''); + $('#div_recentImports').html(html); + tb_reinit(); + } + }); + + } + + + +function setPageStart(pageStartNumber){ + pageStart=pageStartNumber; + updateImportTable(); +} + + + +function validateForm(){ + + if ($("#usageFile").val() == '') { + $('#span_error').html(' ' + _('Please select a file.')); + return false; + }else{ + $('#span_error').html(''); + return true; + } + +} + diff --git a/js/index.js b/js/index.js index 481979c..aee68d0 100755 --- a/js/index.js +++ b/js/index.js @@ -144,13 +144,13 @@ function showPublisherList(platformID) if (displayInds[divID] == 0) { $('#image_' + platformID).attr('src', "images/arrowright.gif"); - $('#link_' + platformID).text('show publisher list'); + $('#link_' + platformID).text(_('show publisher list')); displayInds[divID] = 1; } else { $('#image_' + platformID).attr('src', "images/arrowdown.gif"); - $('#link_' + platformID).text('hide publisher list'); + $('#link_' + platformID).text(_('hide publisher list')); displayInds[divID] = 0; } diff --git a/js/publisherPlatform.js b/js/publisherPlatform.js index 1eee096..723a3de 100755 --- a/js/publisherPlatform.js +++ b/js/publisherPlatform.js @@ -172,7 +172,7 @@ function deletePlatformNote(platformNoteID){ - if (confirm("Do you really want to remove this interface note?") == true) { + if (confirm(_("Do you really want to remove this interface note?")) == true) { $.ajax({ type: "GET", url: "ajax_processing.php", @@ -190,7 +190,7 @@ function deletePublisherNote(publisherPlatformNoteID){ - if (confirm("Do you really want to remove this Publisher note?") == true) { + if (confirm(_("Do you really want to remove this Publisher note?")) == true) { $.ajax({ type: "GET", url: "ajax_processing.php", @@ -208,7 +208,7 @@ function deleteExternalLogin(externalLoginID){ - if (confirm("Do you really want to remove this login information?") == true) { + if (confirm(_("Do you really want to remove this login information?")) == true) { $.ajax({ type: "GET", url: "ajax_processing.php", @@ -241,7 +241,7 @@ } function deleteIdentifier(titleIdentifierID, identifierType){ - if (confirm("Do you really want to delete this " + identifierType + "?") == true) { + if (confirm(_("Do you really want to delete this ") + identifierType + "?") == true) { $.ajax({ type: "GET", diff --git a/js/publisherPlatformList.js b/js/publisherPlatformList.js index 37dbae1..18f3b78 100755 --- a/js/publisherPlatformList.js +++ b/js/publisherPlatformList.js @@ -32,11 +32,11 @@ function showPublisherList(platformID){ if (displayInds[divID] == 0) { $('#image_' + platformID).attr('src', "images/arrowright.gif"); - $('#link_' + platformID).text('show Publisher list'); + $('#link_' + platformID).text(_('show Publisher list')); displayInds[divID]=1; } else { $('#image_' + platformID).attr('src', "images/arrowdown.gif"); - $('#link_' + platformID).text('hide Publisher list'); + $('#link_' + platformID).text(_('hide Publisher list')); displayInds[divID]=0; } diff --git a/js/reporting.js b/js/reporting.js index db8bd16..c5bfb06 100755 --- a/js/reporting.js +++ b/js/reporting.js @@ -32,11 +32,11 @@ function showPublisherList(platformID){ if (displayInds[divID] == 0) { $('#image_' + platformID).attr('src', "images/arrowright.gif"); - $('#link_' + platformID).text('show Publisher list'); + $('#link_' + platformID).text(_('show Publisher list')); displayInds[divID]=1; } else { $('#image_' + platformID).attr('src', "images/arrowdown.gif"); - $('#link_' + platformID).text('hide Publisher list'); + $('#link_' + platformID).text(_('hide Publisher list')); displayInds[divID]=0; } @@ -58,7 +58,7 @@ function updateReportDisplayName(){ function validateDisplay(){ if($('#reportDisplayName').val() == ''){ - $("#span_errors").html('Error - Please enter a value.'); + $("#span_errors").html(_('Error - Please enter a value.')); $('#reportDisplayName').focus(); return false; }else{ diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo index 359d228ff9c9bca3605a96b154b27b9065da9540..17cb3964c46375ff3475ee160c8718ddbe78dfb8 100644 GIT binary patch delta 32 icmZ3$x`1^9CnLLsf`O%#vH4^HMnx#wVzUKf1|tA?xCZzD delta 32 icmZ3$x`1^9CnLMLf}w?#snKKsMnx#wbh8Cx1|tA?UIy|2 diff --git a/locale/fr_FR/LC_MESSAGES/messages.po b/locale/fr_FR/LC_MESSAGES/messages.po index 6722100..00ff6bf 100644 --- a/locale/fr_FR/LC_MESSAGES/messages.po +++ b/locale/fr_FR/LC_MESSAGES/messages.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: messages\n" -"POT-Creation-Date: 2016-04-17 18:52-0600\n" -"PO-Revision-Date: 2016-04-17 18:55-0600\n" +"POT-Creation-Date: 2016-04-18 09:37-0600\n" +"PO-Revision-Date: 2016-04-18 09:38-0600\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr_FR\n" @@ -15,6 +15,101 @@ msgstr "" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-SearchPath-0: .\n" +#: js/admin.js:121 js/reporting.js:61 +msgid "Error - Please enter a value." +msgstr "" + +#: js/admin.js:125 +msgid "Error - Please enter a valid email address." +msgstr "" + +#: js/admin.js:135 +msgid "Do you really want to delete this email address?" +msgstr "" + +#: js/admin.js:199 +msgid "Count over must be a number." +msgstr "" + +#: js/admin.js:200 +#, javascript-format +msgid "% over must be a number." +msgstr "" + +#: js/forms/externalLoginSubmitForm.js:54 +msgid "Please enter a username to continue" +msgstr "" + +#: js/forms/externalLoginSubmitForm.js:58 +msgid "For security, please enter a password" +msgstr "" + +#: js/forms/organizationForm.js:34 +msgid "This organization doesn't exist in the CORAL Organizations module." +msgstr "" + +#: js/forms/outlierSubmitForm.js:94 +msgid "" +"Count is required. If you wish to remove the count the outlier should be " +"ignored." +msgstr "" + +#: js/forms/overrideSubmitForm.js:58 +msgid "Count is required." +msgstr "" + +#: js/forms/platformNoteSubmitForm.js:54 js/forms/publisherNoteSubmitForm.js:55 +msgid "Start Year must be 4 numbers and start with 19 or 20." +msgstr "" + +#: js/forms/platformNoteSubmitForm.js:55 js/forms/publisherNoteSubmitForm.js:56 +msgid "End Year must be 4 numbers and start with 19 or 20." +msgstr "" + +#: js/forms/platformNoteSubmitForm.js:56 +msgid "Please choose Yes or No for Counter Compliant." +msgstr "" + +#: js/forms/platformSubmitForm.js:71 +msgid "Platform must be entered." +msgstr "" + +#: js/import.js:65 +msgid "Please select a file." +msgstr "" + +#: js/index.js:147 ajax_htmldata.php:1541 publisherPlatformList.php:32 +msgid "show publisher list" +msgstr "" + +#: js/index.js:153 +msgid "hide publisher list" +msgstr "" + +#: js/publisherPlatform.js:175 +msgid "Do you really want to remove this interface note?" +msgstr "" + +#: js/publisherPlatform.js:193 +msgid "Do you really want to remove this Publisher note?" +msgstr "" + +#: js/publisherPlatform.js:211 +msgid "Do you really want to remove this login information?" +msgstr "" + +#: js/publisherPlatform.js:244 +msgid "Do you really want to delete this " +msgstr "" + +#: js/publisherPlatformList.js:35 js/reporting.js:35 +msgid "show Publisher list" +msgstr "" + +#: js/publisherPlatformList.js:39 js/reporting.js:39 +msgid "hide Publisher list" +msgstr "" + #: admin.php:12 msgid "Users" msgstr "" @@ -299,6 +394,7 @@ msgid "Identifier Type" msgstr "" #: ajax_forms.php:866 ajax_htmldata.php:719 ajax_htmldata.php:796 +#: spreadsheet.php:86 titles_spreadsheet.php:55 msgid "ISSN" msgstr "" @@ -306,7 +402,8 @@ msgstr "" msgid "eISSN" msgstr "" -#: ajax_forms.php:868 ajax_htmldata.php:795 +#: ajax_forms.php:868 ajax_htmldata.php:795 spreadsheet.php:85 +#: titles_spreadsheet.php:54 msgid "ISBN" msgstr "" @@ -315,10 +412,12 @@ msgid "eISBN" msgstr "" #: ajax_forms.php:870 ajax_htmldata.php:718 ajax_htmldata.php:794 +#: spreadsheet.php:63 spreadsheet.php:83 titles_spreadsheet.php:49 +#: titles_spreadsheet.php:53 msgid "DOI" msgstr "" -#: ajax_forms.php:871 +#: ajax_forms.php:871 spreadsheet.php:64 spreadsheet.php:84 msgid "Proprietary ID" msgstr "" @@ -486,6 +585,7 @@ msgid "Present" msgstr "" #: ajax_htmldata.php:350 ajax_htmldata.php:901 ajax_htmldata.php:925 +#: uploadComplete.php:317 msgid "edit" msgstr "" @@ -581,11 +681,11 @@ msgstr "" msgid "Current Outlier Parameters" msgstr "" -#: ajax_htmldata.php:924 +#: ajax_htmldata.php:924 uploadComplete.php:89 msgid "Level " msgstr "" -#: ajax_htmldata.php:924 +#: ajax_htmldata.php:924 uploadComplete.php:89 msgid " over plus " msgstr "" @@ -700,10 +800,6 @@ msgstr "" msgid "Publishers" msgstr "" -#: ajax_htmldata.php:1541 publisherPlatformList.php:32 -msgid "show publisher list" -msgstr "" - #: ajax_htmldata.php:1620 msgid "records per page" msgstr "" @@ -856,6 +952,404 @@ msgstr "" msgid "Report" msgstr "" +#: spreadsheet.php:60 +msgid "Publisher" +msgstr "" + +#: spreadsheet.php:61 +msgid "Platform" +msgstr "" + +#: spreadsheet.php:65 titles_spreadsheet.php:50 +msgid "Print ISSN" +msgstr "" + +#: spreadsheet.php:66 titles_spreadsheet.php:51 +msgid "Online ISSN" +msgstr "" + +#: spreadsheet.php:67 spreadsheet.php:87 spreadsheet.php:102 +msgid "YTD Total" +msgstr "" + +#: spreadsheet.php:68 +msgid "YTD HTML" +msgstr "" + +#: spreadsheet.php:69 +msgid "YTD PDF" +msgstr "" + +#: spreadsheet.php:70 spreadsheet.php:88 spreadsheet.php:103 +msgid "Jan-" +msgstr "" + +#: spreadsheet.php:71 spreadsheet.php:89 spreadsheet.php:104 +msgid "Feb-" +msgstr "" + +#: spreadsheet.php:72 spreadsheet.php:90 spreadsheet.php:105 +msgid "Mar-" +msgstr "" + +#: spreadsheet.php:73 spreadsheet.php:91 spreadsheet.php:106 +msgid "Apr-" +msgstr "" + +#: spreadsheet.php:74 spreadsheet.php:92 spreadsheet.php:107 +msgid "May-" +msgstr "" + +#: spreadsheet.php:75 spreadsheet.php:93 spreadsheet.php:108 +msgid "Jun-" +msgstr "" + +#: spreadsheet.php:76 spreadsheet.php:94 spreadsheet.php:109 +msgid "Jul-" +msgstr "" + +#: spreadsheet.php:77 spreadsheet.php:95 spreadsheet.php:110 +msgid "Aug-" +msgstr "" + +#: spreadsheet.php:78 spreadsheet.php:96 spreadsheet.php:111 +msgid "Sep-" +msgstr "" + +#: spreadsheet.php:79 spreadsheet.php:97 spreadsheet.php:112 +msgid "Oct-" +msgstr "" + +#: spreadsheet.php:80 spreadsheet.php:98 spreadsheet.php:113 +msgid "Nov-" +msgstr "" + +#: spreadsheet.php:81 spreadsheet.php:99 spreadsheet.php:114 +msgid "Dec-" +msgstr "" + +#: spreadsheet.php:101 +msgid "User Activity" +msgstr "" + +#: spreadsheet.php:124 +msgid "Total for all Journals" +msgstr "" + +#: spreadsheet.php:126 +msgid "Total for all Books" +msgstr "" + +#: spreadsheet.php:128 +msgid "Total for all Databases" +msgstr "" + +#: sushi.php:26 +msgid "SUSHI Import" +msgstr "" + +#: sushi.php:45 +msgid "Sushi Output Log:" +msgstr "" + +#: sushi.php:56 +msgid "SUSHI Administration" +msgstr "" + +#: sushi.php:62 +msgid "Add new platform for SUSHI" +msgstr "" + +#: sushi.php:66 +msgid "Outstanding Import Queue" +msgstr "" + +#: sushi.php:71 +msgid "Last Failed SUSHI Imports" +msgstr "" + +#: sushi.php:75 +msgid "All SUSHI Services" +msgstr "" + +#: sushiSchedule.php:33 +msgid " SUSHI runs found for day: " +msgstr "" + +#: sushiSchedule.php:52 +msgid "Log in to " +msgstr "" + +#: sushiSchedule.php:52 +msgid "Sushi Administration" +msgstr "" + +#: sushiSchedule.php:52 +msgid " for more information." +msgstr "" + +#: sushiSchedule.php:65 +msgid "SUSHI Scheduled run log for " +msgstr "" + +#: sushiSchedule.php:65 +msgid " runs" +msgstr "" + +#: sushiSchedule.php:70 +msgid "Run complete. Log has been emailed to " +msgstr "" + +#: sushiSchedule.php:72 uploadComplete.php:903 +msgid "Email to " +msgstr "" + +#: sushiSchedule.php:72 uploadComplete.php:903 +msgid " Failed!" +msgstr "" + +#: sushiSchedule.php:77 +msgid "Nothing to see here! (no sushi scheduled today)" +msgstr "" + #: templates/header.php:167 msgid "Invalid translation route!" msgstr "" + +#: titles_spreadsheet.php:35 +msgid " Titles " +msgstr "" + +#: uploadComplete.php:25 +msgid "Upload Process Complete" +msgstr "" + +#: uploadComplete.php:67 +msgid "Process started on " +msgstr "" + +#: uploadComplete.php:68 +msgid "File: " +msgstr "" + +#: uploadComplete.php:69 uploadConfirmation.php:292 +msgid "Report Format: " +msgstr "" + +#: uploadComplete.php:82 +msgid "Outlier Parameters:" +msgstr "" + +#: uploadComplete.php:89 +#, php-format +msgid "% over " +msgstr "" + +#: uploadComplete.php:246 +msgid "Override indicator set - all months will be imported." +msgstr "" + +#: uploadComplete.php:255 +msgid "" +"Entire year already exists for this Platform / year. No counts will be " +"imported." +msgstr "" + +#: uploadComplete.php:259 +msgid "Month Started at: " +msgstr "" + +#: uploadComplete.php:261 +msgid "" +"No records exist for this Platform / year. Import will start with month 1." +msgstr "" + +#: uploadComplete.php:283 +msgid "Year: " +msgstr "" + +#: uploadComplete.php:317 +msgid "New Platform set up: " +msgstr "" + +#: uploadComplete.php:399 +msgid "New Publisher / Platform set up: " +msgstr "" + +#: uploadComplete.php:616 +msgid "Publisher / Platform: " +msgstr "" + +#: uploadComplete.php:625 +msgid "Title: " +msgstr "" + +#: uploadComplete.php:662 +msgid "Duplicate record for this Print ISSN in same spreadsheet: Month: " +msgstr "" + +#: uploadComplete.php:662 +msgid " New Count: " +msgstr "" + +#: uploadComplete.php:746 +msgid "New Usage Count Record Added: Month: " +msgstr "" + +#: uploadComplete.php:746 uploadComplete.php:748 +msgid " Count: " +msgstr "" + +#: uploadComplete.php:748 +msgid "Usage Count Record is not numeric for month: " +msgstr "" + +#: uploadComplete.php:755 +msgid "Outlier found for this record: Level " +msgstr "" + +#: uploadComplete.php:764 +msgid "Current or future month will not be imported: " +msgstr "" + +#: uploadComplete.php:803 +msgid "YTD Already Exists for this Print ISSN, counts are added together." +msgstr "" + +#: uploadComplete.php:827 +msgid "YTD Total Count: " +msgstr "" + +#: uploadComplete.php:827 +msgid "YTD HTML Count: " +msgstr "" + +#: uploadComplete.php:827 +msgid "YTD PDF Count: " +msgstr "" + +#: uploadComplete.php:834 +msgid "No YTD import performed since monthly stats were not imported" +msgstr "" + +#: uploadComplete.php:844 +msgid "" +"Title match did not complete correctly, please check ISBN / ISSN to verify " +"for Title: " +msgstr "" + +#: uploadComplete.php:896 +msgid "Log Output for " +msgstr "" + +#: uploadComplete.php:897 +msgid "Usage Statistics File Import Run!" +msgstr "" + +#: uploadComplete.php:897 +msgid "Please find log file: " +msgstr "" + +#: uploadComplete.php:901 +msgid "Log has been emailed to " +msgstr "" + +#: uploadComplete.php:916 uploadComplete.php:923 uploadComplete.php:966 +msgid " titles processed." +msgstr "" + +#: uploadComplete.php:966 +msgid "Summary:" +msgstr "" + +#: uploadConfirmation.php:33 +msgid "SUSHI Import Confirmation" +msgstr "" + +#: uploadConfirmation.php:70 +msgid "The file " +msgstr "" + +#: uploadConfirmation.php:70 +msgid " has been uploaded successfully." +msgstr "" + +#: uploadConfirmation.php:70 +msgid "Please confirm the following data:" +msgstr "" + +#: uploadConfirmation.php:90 +msgid "Upload Process Confirmation" +msgstr "" + +#: uploadConfirmation.php:142 +msgid " for " +msgstr "" + +#: uploadConfirmation.php:190 +msgid "Looking for " +msgstr "" + +#: uploadConfirmation.php:190 +msgid " in column " +msgstr "" + +#: uploadConfirmation.php:190 +msgid "but found " +msgstr "" + +#: uploadConfirmation.php:265 +msgid "Error with Format" +msgstr "" + +#: uploadConfirmation.php:265 +msgid "Report format is set to " +msgstr "" + +#: uploadConfirmation.php:265 +msgid "" +" but does not match the column names listed in layouts.ini for this format - " +msgstr "" + +#: uploadConfirmation.php:265 +msgid "Expecting columns: " +msgstr "" + +#: uploadConfirmation.php:265 +msgid "Found columns: " +msgstr "" + +#: uploadConfirmation.php:265 +msgid "" +"If problems persist you can copy an existing header that works into this " +"file." +msgstr "" + +#: uploadConfirmation.php:270 +msgid "Error with Setup: This report format is not set up in layouts.ini." +msgstr "" + +#: uploadConfirmation.php:275 +msgid "" +"Error with Format: The line preceding the first should start with 'Total'." +msgstr "" + +#: uploadConfirmation.php:280 +msgid "Error with Year: Year listed in header " +msgstr "" + +#: uploadConfirmation.php:280 +msgid " may not be ahead of current year. Please correct and submit again." +msgstr "" + +#: uploadConfirmation.php:285 +msgid "" +"File is flagged to override verifications of previous month data. If this " +"is incorrect use 'Cancel' to fix." +msgstr "" + +#: uploadConfirmation.php:292 +msgid "" +"If this is incorrect, please use 'Cancel' to go back and fix the headers of " +"the file." +msgstr "" From 48ca6cc2b4562ebd89f90e0048d1d1150c73bffe Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 18 Apr 2016 11:10:12 -0600 Subject: [PATCH 28/52] Adding Localization --- uploadConfirmation.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uploadConfirmation.php b/uploadConfirmation.php index 6ef7ab4..588d29c 100755 --- a/uploadConfirmation.php +++ b/uploadConfirmation.php @@ -305,10 +305,10 @@ function updateSubmit(){
    - onclick="javascript:updateSubmit();" class="submit-button" /> + onclick="javascript:updateSubmit();" class="submit-button" /> - +
    From 21bdbcbbb9b63dace641382cb27e4b1bad00fc62 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 18 Apr 2016 13:09:55 -0600 Subject: [PATCH 29/52] Adding Localization --- images/change/en_US/coral-change.gif | Bin 0 -> 1119 bytes images/change/fr_FR/coral-change.gif | Bin 0 -> 1185 bytes images/menu/{ => en_US}/menu-admin-on.gif | Bin images/menu/{ => en_US}/menu-admin-over.gif | Bin images/menu/{ => en_US}/menu-admin.gif | Bin images/menu/{ => en_US}/menu-fileimport-on.gif | Bin images/menu/{ => en_US}/menu-fileimport-over.gif | Bin images/menu/{ => en_US}/menu-fileimport.gif | Bin images/menu/{ => en_US}/menu-home-on.gif | Bin images/menu/{ => en_US}/menu-home-over.gif | Bin images/menu/{ => en_US}/menu-home.gif | Bin .../{ => en_US}/menu-reportingoptions-on.gif | Bin .../{ => en_US}/menu-reportingoptions-over.gif | Bin .../menu/{ => en_US}/menu-reportingoptions.gif | Bin images/menu/{ => en_US}/menu-sushi-on.gif | Bin images/menu/{ => en_US}/menu-sushi-over.gif | Bin images/menu/{ => en_US}/menu-sushi.gif | Bin images/menu/fr_FR/menu-admin-on.gif | Bin 0 -> 1029 bytes images/menu/fr_FR/menu-admin-over.gif | Bin 0 -> 1027 bytes images/menu/fr_FR/menu-admin.gif | Bin 0 -> 1029 bytes images/menu/fr_FR/menu-fileimport-on.gif | Bin 0 -> 829 bytes images/menu/fr_FR/menu-fileimport-over.gif | Bin 0 -> 826 bytes images/menu/fr_FR/menu-fileimport.gif | Bin 0 -> 829 bytes images/menu/fr_FR/menu-home-on.gif | Bin 0 -> 806 bytes images/menu/fr_FR/menu-home-over.gif | Bin 0 -> 806 bytes images/menu/fr_FR/menu-home.gif | Bin 0 -> 806 bytes images/menu/fr_FR/menu-reportingoptions-on.gif | Bin 0 -> 2164 bytes images/menu/fr_FR/menu-reportingoptions-over.gif | Bin 0 -> 1101 bytes images/menu/fr_FR/menu-reportingoptions.gif | Bin 0 -> 1106 bytes images/menu/fr_FR/menu-sushi-on.gif | Bin 0 -> 1919 bytes images/menu/fr_FR/menu-sushi-over.gif | Bin 0 -> 861 bytes images/menu/fr_FR/menu-sushi.gif | Bin 0 -> 861 bytes templates/header.php | 6 +++--- 33 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 images/change/en_US/coral-change.gif create mode 100644 images/change/fr_FR/coral-change.gif rename images/menu/{ => en_US}/menu-admin-on.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-admin-over.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-admin.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-fileimport-on.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-fileimport-over.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-fileimport.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-home-on.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-home-over.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-home.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-reportingoptions-on.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-reportingoptions-over.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-reportingoptions.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-sushi-on.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-sushi-over.gif (100%) mode change 100755 => 100644 rename images/menu/{ => en_US}/menu-sushi.gif (100%) mode change 100755 => 100644 create mode 100644 images/menu/fr_FR/menu-admin-on.gif create mode 100644 images/menu/fr_FR/menu-admin-over.gif create mode 100644 images/menu/fr_FR/menu-admin.gif create mode 100644 images/menu/fr_FR/menu-fileimport-on.gif create mode 100644 images/menu/fr_FR/menu-fileimport-over.gif create mode 100644 images/menu/fr_FR/menu-fileimport.gif create mode 100644 images/menu/fr_FR/menu-home-on.gif create mode 100644 images/menu/fr_FR/menu-home-over.gif create mode 100644 images/menu/fr_FR/menu-home.gif create mode 100644 images/menu/fr_FR/menu-reportingoptions-on.gif create mode 100644 images/menu/fr_FR/menu-reportingoptions-over.gif create mode 100644 images/menu/fr_FR/menu-reportingoptions.gif create mode 100644 images/menu/fr_FR/menu-sushi-on.gif create mode 100644 images/menu/fr_FR/menu-sushi-over.gif create mode 100644 images/menu/fr_FR/menu-sushi.gif diff --git a/images/change/en_US/coral-change.gif b/images/change/en_US/coral-change.gif new file mode 100644 index 0000000000000000000000000000000000000000..67ba1b9d963b4ad0813da8a46f638534077ef24c GIT binary patch literal 1119 zcmcJM{WIGK0EfTiMdBq*x-e&@;V3q`bTcvSwnSBjy|pX5vr@J0o43*| z-hw8?OJX#MsQ0LsAQ2^wYrRCzTbfXHL>Mhfm2BPru+I z01D)f#tlYMw^qOOcRWv#BI^AzyVbb9we{+C0KH*g@_FZDeciwmQ>HnRDs@h+aY?Hg zTUg8QdNT5CH6XL);J}Q#Av=0Qwz2(sZguklzsKuV9RZa7RMEp#Xy?~91MkR>rqx_3 zRpoSQ%loE%!1}O4MY42|+x5gdT{3Jiea5U6sHZ%Czkhc5dzN;pvUp z9a{O=GtE=ud46{&w=+pPcu}BqPZOVF%Wu|dst0wm#uoQ{*#lPlbe^%EhsFy%i|Z92ujP!D}}#FS3y~lqnlJK!I255KLQ&1qVifWl@0Ekg4_P zIEPFm1fqu_tf@MEl}?Fv^b^jur>snmIt4*p96i6NRYb;+0Xme?fmyezI|3m=mA3c? zh_a5;rk}%;HBhGTL*L^}oF7;rx@OUo4^76+fHbQ$8Ywx77QqD2iSI;81R#VC<@oV% zVhxSTVTTQzuywrWjl@C|nv390QFw3z6GBH@W6elcO8Phjg10-2+aXiF=R*+ir#1=s zU{{K3ape`Frb3B_K%w||4WPx%NSmX_N48{N14tDA<77iZrIRy4)%IeL#q*$&!F-V= z3)P+?_*QGg5pHn zNvo0HD5+-9ibzEHa_M$19CRP1B35|@PCPXiiE%>5|6AzOucul2P?Y39?3TX$bs3K* zy6IvG+Oy-)sd3@BYQ`f4K}&-vONNR$5e`_+SD9&GLfkcQSB4F+gaQ_J78T*{3VKf67kddc?qpC%!(%d2)3E=Fsd*&igVh#o%#~I7)sQD^%*G zXXC0YarfBtyl-m5(udWPxl+mBW6rGVs6yG}7q2*Fot2LVjH5*+(WPI-lx8+P@0pxi zTU%dPUM0nrnZ}k)%q<4ywK#L@$-h_jO}&-$Pq`+EO=C(kr2RXXLVH%taY5_1oO0Fs z4;O@;HgUpqX}=v*b>?=9xOam0pwIehMVds>F)}l~uxuV(5?<7CyJN^DQM|aKxhU$Q z<-^DFnuk^I3fhN?yG9D+gK?FA-I5QE&%W;*RXrJ>HIFO*^m#2()a8>cYwV2^B(jJp5ws0@^CefxJDs?7E1J)# zj}&2dTJzfmK59ON+9>p%Oc=^!)yihU)%1BzdQlZ>kxy*<|JI>@)DDh zQ&Q8?Gcx&E+1GP&^KRVC7u+hieW&p5y`tj#B|=eYS$RceRdr2mUA?%W@xjAK5@}O& z3*0JeYuv=}uw~;m%b#X%BJZ+rGI#tTNe4q8!myBZtx7s@7X*0#qMR}`=U{5U)j^>q zHfZZI#wIEzU%lq`Rk*w?HX-bE&LJ^^F;F~;-E8v0I_(7c(zHUvr&mA5y7|#)YATPq z-(w6FfpjLpjv!iwx`Xb3KsViB)5C4JYuqYHE>~{gptX-Vhl>+7> zK!I-0juihYmA(-Br!W4R-A*#pt7qk&h{dk!7**5AVFYbD!NR_WOx&Vl2G*tc#y5@9@3ucoHoj z9&7j!N^oq4W@1TYP%DwXDMyc9+x6>llygp9iH@10F(-pO)Sc*I(nc zargl0(czdnGMkZN34@B_V9TRk3!eRl&TNYgWPA5-3C#^VJ^0L*b}}p^VBguco3tSm z{hkeO@#}*d4;0lBu6D~cn6mZ&>-nZMh=`YdTz)g(0-){GFv>7O-HNd;SIe+Yv+B0Z NUUm!e5)=r0^DmR05Geov literal 0 HcmV?d00001 diff --git a/images/menu/menu-admin-on.gif b/images/menu/en_US/menu-admin-on.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-admin-on.gif rename to images/menu/en_US/menu-admin-on.gif diff --git a/images/menu/menu-admin-over.gif b/images/menu/en_US/menu-admin-over.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-admin-over.gif rename to images/menu/en_US/menu-admin-over.gif diff --git a/images/menu/menu-admin.gif b/images/menu/en_US/menu-admin.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-admin.gif rename to images/menu/en_US/menu-admin.gif diff --git a/images/menu/menu-fileimport-on.gif b/images/menu/en_US/menu-fileimport-on.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-fileimport-on.gif rename to images/menu/en_US/menu-fileimport-on.gif diff --git a/images/menu/menu-fileimport-over.gif b/images/menu/en_US/menu-fileimport-over.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-fileimport-over.gif rename to images/menu/en_US/menu-fileimport-over.gif diff --git a/images/menu/menu-fileimport.gif b/images/menu/en_US/menu-fileimport.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-fileimport.gif rename to images/menu/en_US/menu-fileimport.gif diff --git a/images/menu/menu-home-on.gif b/images/menu/en_US/menu-home-on.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-home-on.gif rename to images/menu/en_US/menu-home-on.gif diff --git a/images/menu/menu-home-over.gif b/images/menu/en_US/menu-home-over.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-home-over.gif rename to images/menu/en_US/menu-home-over.gif diff --git a/images/menu/menu-home.gif b/images/menu/en_US/menu-home.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-home.gif rename to images/menu/en_US/menu-home.gif diff --git a/images/menu/menu-reportingoptions-on.gif b/images/menu/en_US/menu-reportingoptions-on.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-reportingoptions-on.gif rename to images/menu/en_US/menu-reportingoptions-on.gif diff --git a/images/menu/menu-reportingoptions-over.gif b/images/menu/en_US/menu-reportingoptions-over.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-reportingoptions-over.gif rename to images/menu/en_US/menu-reportingoptions-over.gif diff --git a/images/menu/menu-reportingoptions.gif b/images/menu/en_US/menu-reportingoptions.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-reportingoptions.gif rename to images/menu/en_US/menu-reportingoptions.gif diff --git a/images/menu/menu-sushi-on.gif b/images/menu/en_US/menu-sushi-on.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-sushi-on.gif rename to images/menu/en_US/menu-sushi-on.gif diff --git a/images/menu/menu-sushi-over.gif b/images/menu/en_US/menu-sushi-over.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-sushi-over.gif rename to images/menu/en_US/menu-sushi-over.gif diff --git a/images/menu/menu-sushi.gif b/images/menu/en_US/menu-sushi.gif old mode 100755 new mode 100644 similarity index 100% rename from images/menu/menu-sushi.gif rename to images/menu/en_US/menu-sushi.gif diff --git a/images/menu/fr_FR/menu-admin-on.gif b/images/menu/fr_FR/menu-admin-on.gif new file mode 100644 index 0000000000000000000000000000000000000000..75b86de53ea719efae6118f21308e1a786777e79 GIT binary patch literal 1029 zcmd6k|5K880DwO)zVIS`$rxjtcQ`b%<#N|9=Wdx00n0q?&O=;#dIF25xe$R?D^sO`MG;OXB|CQ zaE1py0Db`G0+H}~)U*&(SQgoR(>#NtOl8^F+`eb?F1`3?+Phk-wd)+q*NpQ*qsRMl z<7ISfcs`(Z`E{P)s5^K_KE+Z!`KoXFh{DVrbDrq3j{h0@cF-mXVkN0-B#oCuyGULczU|9dhw;r|-_={cDq2oVDy zK@(;$;w0QvToMZpX$r}^(sm2pC80Z;un3YOvUOrnSb{^IY7Y@Vem{#vq3-ysj6zf@ z*^KHAoVlt5RP002I8LQ0i%B4gf+^+aa#?(UV&I?1G{_3WL|Tyyu3&;aKIoPOu&kKK zc`{J0@gQuzbpN^U-kH$Taln0|rPKr|(KO-K(k@JEB2`RF_c{u{>_+bHrPs3|egZU; zL0RGU@JE>O>dC5Jwyao&EN5EfC4e}RdVP}4HgPINpD+Y9!_Xg11aWfqN$=pqBs~$$ zNh7f@w90akytXZmX9kM`_i=7?q`Ejl$dl-81Baa{3PLmWm=&flG|l)^*6+*ZFe#N- z$gOAvvqfXNKx!W525SBY&c*Y=>iq=7+s@I0A2XyRPzS+8QhM>SwiZTIkEo$ct>Opn zh1sX22ij?_f<0&{e$?`;9<$o}{QLsUmeUOFWAaO#qat(CVY+kzA(m({nTg3dg%CNI zV83F=QqqMzm$P}rVH@^~{KdM{9mm3#cYh6pG7hgXqz)vepav8FEG@f`#>ak|EU38h z9$5>}tYJKrk7@RoOO!5-qa4R`f{P(qEx=Slk4-08xh~SB<+@YCoyQ4(741)Dd#5{j kxSXI;NUjO0#M%A9JCgjBU{}l0oKSb$>6*PC@&RD{3({nx#Q*>R literal 0 HcmV?d00001 diff --git a/images/menu/fr_FR/menu-admin-over.gif b/images/menu/fr_FR/menu-admin-over.gif new file mode 100644 index 0000000000000000000000000000000000000000..3dfb0f7f6e417ba52b4ecd4cb681ae490c198166 GIT binary patch literal 1027 zcmZ?wbhEHbY+%q}c*ekR^XARBZ{Hq0dUWyP#d&#oU0q#qadF?ieOteN{o}`vYierF zpFh8A*RJW)r|;dnciXmY6DCZ^&(DvJjt&S2=wrj5oG`HeZ*XpEZfR|6 z@96C6?&`Ah<}F*d zZQrqT*X})g*Qg3`iikF|X~?%TvUe~r^f)n}Vd~&w>t*9|=3rc>Da5a+-y|&QWYfmV z&d%F@c0Q{UOAj0S#SP~Cx(ag6;!>P^brM1w79?1w&tp51?7|SG!(m#Ma6(`SbEjnc z3*LZ?T#rTuCnlBxF$KmGEG$ACj+QJ@&J5~L8D|`G@HoNrAxDg1!Ka2sRLZs%UBBX6OIu zhmyA^%ygQ`{zUPFwM&D*X1@MIDhUTt;@eHFo0twca1=Ap5qJ>W?EZVK9AwoO7q!fj5pLc@}9q4c2E5+=R#&~=MsiP z%t}WbJeZty#UC=BJMj2^F+)?qFCD z669^#Dpxso#)hUz&LILkEaE>NJ)hseruAY$i&)l+g&k_EUM%V{d-Y=R1UIdhOQwXK J@={>11_1YVf42Yt literal 0 HcmV?d00001 diff --git a/images/menu/fr_FR/menu-admin.gif b/images/menu/fr_FR/menu-admin.gif new file mode 100644 index 0000000000000000000000000000000000000000..d7159b13706d17181ca6cdb9c850b065cce18e96 GIT binary patch literal 1029 zcmZ?wbhEHbY+%q}c*ekR`N6AKAHMEBe}D4UbN;>CN){fnXxi}g`>%!juH1j|K56=% z<2RnJJASie^@+k&Cl?;SbNkh&RcG!mJ$W~F-XXUMJLM}@tv~-zu42{Mhi~3~`Jvmm zp?dvUyY6iX^A9gRaYwOgwL$a7hi|{EIDPN?uRq4Eo8El+;WcTuLgng>7ancB^!VbF zcgOC&{Qc+er6=$5SDtLxeBO7;p5oP~UVZxByZg$Cd#}`M*XlH^FIagpWzo@jM{ocB z`!9LnkwwSvl&m?u``XiGC+|Lf_tkUaF7L^^o%?poJ#y>k@4xO7cC9{h|J$!W|NsA& zE?dbkxPjtN7O(?#KqM$m7})Yz*tlu)maW^i@7TF(_ny6L)cFL=#hVpe@iFZ)0U==WRbbpVgD4hmHN>1_ypiWmzwIX#sZ+ z384)O60Fnbu^mZvVTjUUSM7Qs5SZ-LA>RIiHz32;vys7*iKReHf$;R z2KA?mGma^Eo?!ZrBgU}cQ$r)G*<^!^OyPrOs%#85d?xrFU|irS&?2BH*Da3i?r`{s0~4_qca z+s>}Gy}~<(t4lV^qeW61BYG^l9E}Wb zHZik5SevqqAy00y2*XiE=Sd<8HX9t24zn)YEBjJ$!<^ir;&T^$jpr&{wN&@;<=ArU zZY9&3<@a)Ku_Vk^*fDqe?5g=&rnhhzXc!*k;P((I;Vx*g86*?c~%LjmZi07 z4NkAmvih6dDGi(F^}1Fyf}v$*N<-_*wa+sdh0f~zT)1K1j_FqFSkDP&-ZXFPf!&{OxSNY#_lM~At*xr!VO_-Y=Up5MTx m^2Jau6Lg2W+vI{; z7uO)+Os#1Q#~-*elWW@b-NUj`IZv@|L`Am1^BF@!C%%0{X3r)+cY==3Q| z63LRZ$u>h7La1@PYJ4T4UOcw3M_`H)nkSlPmD~mOluCDGIvZZrNY;1TWvV|K!}-O9 zU{$-mfAp3sP3w^w5R=+)@^NrMe_~qH9#Z%U-ikJBV7_vErAeyP9iM8Ary0Goy>hkL zY!0Rgfd3L##PVO4*QGC?0BAEQmYn~ofKpiWx%f*-Y1!9r<`{dLHK>k|Y8 zx=o9iz+BgTzuW$h13rQx00bZeT|?PGVC=FM@*tzEcF|*?Nw4sAgl+l$;MEOZj5r0X zKtZ`WLLlTwwy>^!{kxXEC{71ZUbSg#5*Z6RK$^$9guDzh9RpL@^X1u2#p(7@Z0mTU z@Rt)NbB!R$@S|ZuU5Zoy_6frgP9gEgi4WaE(-Ym%6s&i@T};iix(`bn4oFOZw_K`0 zdfZ$Ewv(BJvWmXh1``XZ&V(=miI@CdoR&HZVq)ew3Yw)Vr1>ST8)u*GAtLca>vqB& z3@aAj{c61Yg^f?CCr*)I;VpmU2nXMyq6QX`0a#dolBU|XE~5kP>T_|b8#qD*JP6vn x%cm3hd0A*8HIofT+C5L=jN}J;Rzka=b{rd6a$9L`8_2I*ZO`A4_hK7cPg{@n+?%~6S zJ9g|SEiL`~_wVi7wmoGnl{P^k9 zr!8By%$qkaI5@bux%tSEBQs{qNJ>h2{rdI2d-pzn{#;g877!3nQBkpW?b=tbUY$OD z`oxJ7Yu2p!{{4GmVq#!m;Q#;seSLiyhAdG0$pUt}4u}NB2?P882FIr6me#iRj?S*` zp5DIx2@@wxo-%dX^cgc}&7L!N-uwj%7cE}0blLJ1D_5;vvv%G34I4LYULs*5#IS9huAJz_`IseV_fo!}Ay}uTzz_v~|!_ls|X)5VL~= zHyft|v*X>@4kAr#9B4A^^IPH z1xhh6az2sN*r0Htf#u4sK$Z>i~VEA=!iNW9C#VO8)z$#jMT zo1DOspabU=*cv1hCL~Ph<>oio^TI&MgL_TOJln@RbvXj^9mPaCEIpn!O!_>18E3M4 z_`!pL!YLs)3KzF=@(L&%;Fz6vJ7P0K6Q6FE*)xY7zNuonv{y03a!M*#Y;liJ-*`Cv zY3XkXp{&NG`K+G8Rtr*Zu`p@02VGoXwwpt^q$A>DrOt~Z5;uRgtm5aepIpEyGQn~} zY-7wO$HtBa3#v*vSd}(RSP~?@>fJrxMt=W&dwza?ad~z8`F(qTfB*3K^nCyMH3|&Y E0GO^ir2qf` literal 0 HcmV?d00001 diff --git a/images/menu/fr_FR/menu-fileimport.gif b/images/menu/fr_FR/menu-fileimport.gif new file mode 100644 index 0000000000000000000000000000000000000000..761ab1f1ace8a15f4dbc6b76a58f4e671a5670c8 GIT binary patch literal 829 zcmZ?wbhEHbOkmJpc*ejmdFwg<-ffp3ys~K8uyEg%S0BD6P2Y3;#?$*R-nXnivHSe} zuit-_EIjn_+pmBB{(t)ZOSXK~%TM3cYSzB`^!@L@e;>a6+4qg_2=)P>HGYr z?tS~^$J6&;FFkoT_sFd~uRh6?uiSC<$;}rZ<{iC#_Q9LXrN^4LUVQQKn_1iDg!zZ7 zH=Mot?ER7xcLS#FJ@epA>(+~Z{{CBb@~&a?#*)>i-hBBnb^rBg2X3g>uHAm+@$`c? zW*ofn?(5I=CCC2%|1Vv(l40-x#h)x-N9lk_P@FKZ|8MYXYHn$5Ywzgn>h9_7>z^=j z(&Q;qr%j(RbJpxRbLY)puyE1hB}NRWEt>3V5)8-|zt|q2iRw!8estL3+ z`ZCOCW8UB-@9Sl7@bEkyU&ajLU1p1r*YtDGjny6ZS_TFrJX4s)G|TVOWVJPOW7#;| z6%!p*+`8m^Qha7CNX|K$o_di^pAT9!PLJ%yS`Cc==s+Q~8f|8c+E&94061X5!9n zmioA$@hh9C(w&L~XCd#{75kdaRqOWr{QTnb>iF~f_Wu6<;qmGD{`>dUer{x7um%8` Cu4bM9 literal 0 HcmV?d00001 diff --git a/images/menu/fr_FR/menu-home-on.gif b/images/menu/fr_FR/menu-home-on.gif new file mode 100644 index 0000000000000000000000000000000000000000..d954f0a2da6dcbc4ae72910d8fdb85b906cb49ff GIT binary patch literal 806 zcmZ?wbhEHb3}et>c*el6;_QRhpTA#w{=skIv4oYUzyAC^=h&Uo58ga{`=w#W<-!f; zt!EwDdilwLTQBddoG-*3GBJn8to-XnMNwp{xB^Y@jP zpZbp8IduO`^y;&lu0MbO{nwHUkJC3^NL+XBweaOug@ zPu>SFKlSpx1CxJFz_9s^k&yjGIvsdu(v2~Hvkr8TP zW@TgZVQymKc*n!SSkUgk$f(A~!YOberGcS|rGt0%HqWE2q8@j4Iu|~4VdZJz5s@%x z;ACiJWaBBBaNtP;0|%d4&ZZ3~8yN&y6(*dxd|9B^AyGmreRAT-$;}c5iYmbi8x}W- z7z76NJX*%;IOEQS1Vv6xH6yO6ET>u=E<5s``|AASi^5Ho(B`XgTMwqREnt_N@j`1HHD=i47&bu5|Ixagll=M z-E#~!6{-vCO<@o;VZ6=k6eKE;HS@rH>&r*(uzD2iVh}#!CT}Ep?((X&&o3c*el6e*OBlZ{Nnn#ofGlGcPZ1@#4kbzI{7?{`}*|k85gby1Ke{ z?b_w%=Xdnz(fs`U>C>lw`SRt)jT@gneR}!w<*i${UcY|r@9#fj#*Ddh=O!m7-??)q zD=X{t>C=Dy{CWTW{gER_E?l^3UfyLWHfwrz!lg)?W)3=a=qxNu=zU0r8qXMcbHzJ2>vty)!GU48fN-E-&8 z_4fAW+1^*4Q**@`T6tb|NsAeeSH~*4p98b0(Ptphy=w6 z1N;95x2EQn*0%PJ&aUpB-oE|`6DLicGIiSY88c_io-=pe`~?daEnc#8+42=DSFK*N zcHR07>y*_bH!k2&5t0(t?_y+|&%o$*Xugw`FrS#YrgH}u8yo+^qjOaSMVJgUq)h~j z#M*e-pIkXShf|c>(81MJ%h*O#iK&H&jg{5)s~Zc)J8l-nf_4SQMkQ7jUWo*k0}M?p z9lWczaUNk6lex3=b%A1Y8%qn9gn+^V4u)1n7M_{~2bMH2aPX;_Y`SowkwK7MVZw>a z!Q8zLg%VonlM_!)ZWa?!R0)3Au((M`#517hks6y^*OLPc2aonEIdV;9iE44U?8tkL z(`xqzg-F)W=BsgU1CO*RunTm((O^kfvY?t_fm*B=$3g`b|85^;k?X?DoUV2ppB$HX z^g3}cEs`};SQ^5h>n|sf`Jh3tmdDyX$6!;TI-8>38i6g0vzeWO9Qm?V9++=^`N$pC wfPz~Nf=Ars#U#&NUbXi5g~i_U{r2wq`ufJ^?EB~T?*9J%!Qt+3Q4R)c097X{_y7O^ literal 0 HcmV?d00001 diff --git a/images/menu/fr_FR/menu-home.gif b/images/menu/fr_FR/menu-home.gif new file mode 100644 index 0000000000000000000000000000000000000000..acd8f90202594d44e6383ea704fa74fce9fed011 GIT binary patch literal 806 zcmZ?wbhEHb3}et>c*el6aNm_zAHH6G@XDfTgMaU~$y?8T{r>Ctji>ityf0aJC~5j0 z+45EEj^EsU{(j5q6K)fBUU>ZW(vx?Nz1u&2`_;7NLd}M=auuu2K711~`@o}jU#1O zi-~)$B`r8&(Y_^W&cWY*{_el=+`N7B`>#I@n>V&^zjXKYr|-Z1Oxb_^)#vXEkKYNH zw)gpmZwAd9o%(jX`}*_s=O3FdJ~C+9ShMlmj;l}BoPBWl>ARo5|DL-4`sw?xc`Hsl z`|vG)<;k~Se*FLcU%G51!{7soKUu(z(gBg6IALJ_-{9BO+|t_C-qG3B-P7CGKVjme z$y26In?7Uatl4ws&YQnr;iAP$mM&YqV&$sUYu2t?zhRw{f#Jpl+|qV}l5$;)Z1Wiy z{SM8SQI_Nv)9}&h;ACUtTX=M?qqu;Lle>_ju!&e3FZ+`#hv!ImsA)?1`r7N+dN~`n zFtf3;`Z71MaJ=JTVJv8OU~E)lW#JTfkkY`=#L~gLdYh+fE1&$Goz;O0U0HZqxFjSD z7H~4OGP3cMOgQkQfq{chtz^@MlZ_05tO^rOTn^^!b?}$aN}rr~a&ohTiK0sI!iL37 zA|`QO%QUD$A`Fhs%z<=e|0>_@Z!=CA9f!+}(>U9ShinXEkWB zBrI7_&9Fc%)~jQ!FpK|eA7zp2mzgAe8#pc{E83+UFM*d(ZdV ayX))g8=JH5pWD0p`}+rnyTe5}7_0&1#7NWt literal 0 HcmV?d00001 diff --git a/images/menu/fr_FR/menu-reportingoptions-on.gif b/images/menu/fr_FR/menu-reportingoptions-on.gif new file mode 100644 index 0000000000000000000000000000000000000000..15d877458302a0442c336f1c3af7f0859ba4012a GIT binary patch literal 2164 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 WBa2c*SJPsV6AKji>^wXa7_0$eJcBU+ literal 0 HcmV?d00001 diff --git a/templates/header.php b/templates/header.php index 9597699..867dba3 100755 --- a/templates/header.php +++ b/templates/header.php @@ -88,9 +88,9 @@ isAdmin()){ ?> -.gif" hover="images/menu/menu-home-over.gif" class="rollover" />.gif" hover="images/menu/menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu/menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu/menu-admin-over.gif" class="rollover" />.gif" hover="images/menu/menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> +.gif" hover="images/menu//menu-home-over.gif" class="rollover" />.gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu//menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu//menu-admin-over.gif" class="rollover" />.gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> -.gif" hover="images/menu/menu-home-over.gif" class="rollover" />.gif" hover="images/menu/menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu/menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu/menu-admin-over.gif" class="rollover" />.gif" hover="images/menu/menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> +.gif" hover="images/menu//menu-home-over.gif" class="rollover" />.gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu//menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu//menu-admin-over.gif" class="rollover" />.gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> @@ -104,7 +104,7 @@
      -
    •   +
    •  
        getCORALPath() . "index.php")) {?>
      • From 8f5dae0318c30350f1e668bbe820a9bc77afb255 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 18 Apr 2016 13:16:20 -0600 Subject: [PATCH 30/52] Adding Localization --- css/style.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/css/style.css b/css/style.css index 702585f..9d6f860 100755 --- a/css/style.css +++ b/css/style.css @@ -2421,6 +2421,10 @@ a#help:before { margin-right: 3px; } +td#setLanguage { + vertical-align:middle; +} + /*--- Adjustments for Language Dropdown ---*/ select#lang { From 6698ee01d128fd06dc49c309701a022dc4c3b101 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 18 Apr 2016 13:50:36 -0600 Subject: [PATCH 31/52] Adding Localization --- templates/header.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/templates/header.php b/templates/header.php index 867dba3..b5373a5 100755 --- a/templates/header.php +++ b/templates/header.php @@ -49,6 +49,22 @@ + +getLanguage($str); + if($default_l==null || empty($default_l)){$default_l=$str;} + if(isset($_COOKIE["lang"])){ + if($_COOKIE["lang"]==$http_lang && $_COOKIE["lang"] != "en_US"){ + echo ""; + } + }else if($default_l==$http_lang && $default_l != "en_US"){ + echo ""; + } +?> + From b4e3e5bd51146411a0978f2dfff5084c8d4f3c91 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Tue, 19 Apr 2016 11:39:13 -0600 Subject: [PATCH 32/52] Adding Localization --- locale/fr_FR/LC_MESSAGES/messages.mo | Bin 672 -> 25473 bytes locale/fr_FR/LC_MESSAGES/messages.po | 644 +++++++++++++++------------ 2 files changed, 348 insertions(+), 296 deletions(-) diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo index 17cb3964c46375ff3475ee160c8718ddbe78dfb8..b12399b490aa36ac3633056aa3241ea71eddf021 100644 GIT binary patch literal 25473 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 Y+hQpTq?qji@p`MC_cffz$4T)20H>eL+5i9m delta 291 zcmZoX&bWZJ{+?_46Hy&kOe?K24De-fGhz6$CMNX zAXe~8EoVps(s`-n3Z=!VMGVP_dC93c48^5MxtS%CA6g`_SST1+Zg#iSWwdk5$}cSe sszIX_O7j%*@=ME7a}-KTGIKJE6H8J{ix?8~@=9}ns#EjI@+*Nf0C)m67ytkO diff --git a/locale/fr_FR/LC_MESSAGES/messages.po b/locale/fr_FR/LC_MESSAGES/messages.po index 00ff6bf..3ebed95 100644 --- a/locale/fr_FR/LC_MESSAGES/messages.po +++ b/locale/fr_FR/LC_MESSAGES/messages.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: messages\n" "POT-Creation-Date: 2016-04-18 09:37-0600\n" -"PO-Revision-Date: 2016-04-18 09:38-0600\n" +"PO-Revision-Date: 2016-04-19 16:08+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr_FR\n" @@ -17,102 +17,104 @@ msgstr "" #: js/admin.js:121 js/reporting.js:61 msgid "Error - Please enter a value." -msgstr "" +msgstr "Erreur - Entrez une valeur." #: js/admin.js:125 msgid "Error - Please enter a valid email address." -msgstr "" +msgstr "Erreur - Veuillez entrer une adresse email valide." #: js/admin.js:135 msgid "Do you really want to delete this email address?" -msgstr "" +msgstr "Voulez-vous vraiment supprimer cette adresse email ?" #: js/admin.js:199 msgid "Count over must be a number." -msgstr "" +msgstr "Le dépassement de décompte doit être un chiffre." #: js/admin.js:200 #, javascript-format msgid "% over must be a number." -msgstr "" +msgstr "Le % dépassé doit être un chiffre." #: js/forms/externalLoginSubmitForm.js:54 msgid "Please enter a username to continue" -msgstr "" +msgstr "Veuillez entrer un nom d'utilisateur pour continuer" #: js/forms/externalLoginSubmitForm.js:58 msgid "For security, please enter a password" -msgstr "" +msgstr "Pour des raisons de sécurité, veuillez entrer un mot de passe" #: js/forms/organizationForm.js:34 msgid "This organization doesn't exist in the CORAL Organizations module." -msgstr "" +msgstr "Cette organisation n'existe pas dans le module Organisations de CORAL." #: js/forms/outlierSubmitForm.js:94 msgid "" "Count is required. If you wish to remove the count the outlier should be " "ignored." msgstr "" +"Le décompte est obligatoire. Si vous voulez supprimer le décompte, la valeur " +"hors norme doit être ignorée." #: js/forms/overrideSubmitForm.js:58 msgid "Count is required." -msgstr "" +msgstr "Le décompte est obligatoire." #: js/forms/platformNoteSubmitForm.js:54 js/forms/publisherNoteSubmitForm.js:55 msgid "Start Year must be 4 numbers and start with 19 or 20." -msgstr "" +msgstr "L'année de début doit comporter 4 chiffres et commencer par 19 ou 20." #: js/forms/platformNoteSubmitForm.js:55 js/forms/publisherNoteSubmitForm.js:56 msgid "End Year must be 4 numbers and start with 19 or 20." -msgstr "" +msgstr "L'année de fin doit comporter 4 chiffres et commencer par 19 ou 20." #: js/forms/platformNoteSubmitForm.js:56 msgid "Please choose Yes or No for Counter Compliant." -msgstr "" +msgstr "Sélectionnez Oui ou Non pour la Conformité au décompte." #: js/forms/platformSubmitForm.js:71 msgid "Platform must be entered." -msgstr "" +msgstr "La plateforme doit être indiquée." #: js/import.js:65 msgid "Please select a file." -msgstr "" +msgstr "Veuillez sélectionner un fichier." #: js/index.js:147 ajax_htmldata.php:1541 publisherPlatformList.php:32 msgid "show publisher list" -msgstr "" +msgstr "Afficher la liste des éditeurs" #: js/index.js:153 msgid "hide publisher list" -msgstr "" +msgstr "Masquer la liste des éditeurs" #: js/publisherPlatform.js:175 msgid "Do you really want to remove this interface note?" -msgstr "" +msgstr "Voulez-vous vraiment supprimer cette note d'interface ?" #: js/publisherPlatform.js:193 msgid "Do you really want to remove this Publisher note?" -msgstr "" +msgstr "Voulez-vous vraiment supprimer cette note d'éditeur ?" #: js/publisherPlatform.js:211 msgid "Do you really want to remove this login information?" -msgstr "" +msgstr "Voulez-vous vraiment supprimer ces informations de connexion ?" #: js/publisherPlatform.js:244 msgid "Do you really want to delete this " -msgstr "" +msgstr "Voulez-vous vraiment supprimer ce/cette " #: js/publisherPlatformList.js:35 js/reporting.js:35 msgid "show Publisher list" -msgstr "" +msgstr "Afficher la liste des éditeurs" #: js/publisherPlatformList.js:39 js/reporting.js:39 msgid "hide Publisher list" -msgstr "" +msgstr "Masquer la liste des éditeurs" #: admin.php:12 msgid "Users" -msgstr "" +msgstr "Utilisateurs" #: admin.php:13 msgid "add new user" @@ -120,24 +122,24 @@ msgstr "Ajouter un nouvel utilisateur" #: admin.php:16 admin.php:31 admin.php:46 msgid "Loading..." -msgstr "" +msgstr "Chargement en cours..." #: admin.php:27 msgid "Email addresses for logs" -msgstr "" +msgstr "Adresses email des fichiers journaux" #: admin.php:28 msgid "add new email address" -msgstr "" +msgstr "Ajouter une nouvelle adresse email" #: admin.php:43 msgid "Outlier Parameters" -msgstr "" +msgstr "Paramètres des valeurs hors normes" #: ajax_forms.php:39 ajax_forms.php:168 ajax_forms.php:257 ajax_forms.php:354 #: ajax_forms.php:421 ajax_forms.php:486 ajax_forms.php:977 msgid "Update" -msgstr "" +msgstr "Mettre à jour" #: ajax_forms.php:43 ajax_forms.php:257 ajax_forms.php:363 ajax_forms.php:427 #: ajax_forms.php:490 @@ -146,1210 +148,1260 @@ msgstr "Ajouter" #: ajax_forms.php:55 msgid "Email Address" -msgstr "" +msgstr "Adresse email" #: ajax_forms.php:65 ajax_forms.php:229 msgid "close" -msgstr "" +msgstr "Fermer" #: ajax_forms.php:106 msgid "SUSHI Service for " -msgstr "" +msgstr "Service SUSHI pour " #: ajax_forms.php:106 msgid "Optional Parameters" -msgstr "" +msgstr "Paramètres facultatifs" #: ajax_forms.php:109 msgid "Start Date:" -msgstr "" +msgstr "Date de début :" #: ajax_forms.php:113 msgid "End Date:" -msgstr "" +msgstr "Date de fin :" #: ajax_forms.php:114 msgid "(yyyy-mm-dd)" -msgstr "" +msgstr "(AAAA-MM-JJ)" #: ajax_forms.php:119 msgid "Ensure platform name stays CORAL's Platform Name: " msgstr "" +"Vérifier que le nom de la plateforme garde le Nom de la plateforme CORAL : " #: ajax_forms.php:128 msgid "submit for processing" -msgstr "" +msgstr "Envoyer pour traitement" #: ajax_forms.php:129 ajax_forms.php:169 ajax_forms.php:326 ajax_forms.php:395 #: ajax_forms.php:462 ajax_forms.php:625 ajax_forms.php:830 ajax_forms.php:884 #: ajax_forms.php:1022 msgid "cancel" -msgstr "annuler" +msgstr "Annuler" #: ajax_forms.php:142 msgid "No Sushi Service passed in!" -msgstr "" +msgstr "Aucun Service SUSHI envoyé !" #: ajax_forms.php:163 msgid "Update Outlier - " -msgstr "" +msgstr "Mettre à jour la valeur hors-norme - " #: ajax_forms.php:164 msgid "Count Over" -msgstr "" +msgstr "Dépassement de décompte" #: ajax_forms.php:165 msgid "% Over prior 12 months" -msgstr "" +msgstr "% de dépassement des 12 derniers mois" #: ajax_forms.php:218 msgid "Update Report Display Name" -msgstr "" +msgstr "Mettre à jour le nom d'affichage du rapport" #: ajax_forms.php:223 ajax_forms.php:769 ajax_forms.php:776 ajax_forms.php:783 #: ajax_htmldata.php:1013 ajax_htmldata.php:1020 ajax_htmldata.php:1027 #: ajax_htmldata.php:1418 msgid "update" -msgstr "" +msgstr "Mettre à jour" #: ajax_forms.php:296 msgid " Interface Notes" -msgstr "" +msgstr " Notes de l'interface" #: ajax_forms.php:299 ajax_forms.php:377 msgid "Start Year:" -msgstr "" +msgstr "Année de début :" #: ajax_forms.php:303 ajax_forms.php:381 msgid "End Year:" -msgstr "" +msgstr "Année de fin :" #: ajax_forms.php:307 msgid "Counter Compliant?" -msgstr "" +msgstr "Conformité du décompte ?" #: ajax_forms.php:309 msgid "Yes" -msgstr "" +msgstr "Oui" #: ajax_forms.php:310 msgid "No" -msgstr "" +msgstr "Non" #: ajax_forms.php:316 msgid "Interface Notes:" -msgstr "" +msgstr "Notes de l'interface :" #: ajax_forms.php:325 ajax_forms.php:394 ajax_forms.php:461 ajax_forms.php:624 #: ajax_forms.php:829 ajax_forms.php:883 msgid "submit" -msgstr "envoyer" +msgstr "Envoyer" #: ajax_forms.php:374 ajax_htmldata.php:320 msgid "Publisher Notes" -msgstr "" +msgstr "Notes de l'éditeur" #: ajax_forms.php:385 msgid "Publisher Notes:" -msgstr "" +msgstr "Notes de l'éditeur :" #: ajax_forms.php:438 msgid "Login" -msgstr "" +msgstr "Connexion" #: ajax_forms.php:441 msgid "Username:" -msgstr "" +msgstr "Nom d'utilisateur :" #: ajax_forms.php:445 ajax_forms.php:549 msgid "Password:" -msgstr "" +msgstr "Mot de passe :" #: ajax_forms.php:448 msgid "URL:" -msgstr "" +msgstr "URL :" #: ajax_forms.php:452 msgid "Login Notes:" -msgstr "" +msgstr "Notes de connexion :" #: ajax_forms.php:500 msgid "SUSHI Connection" -msgstr "" +msgstr "Connexion SUSHI" #: ajax_forms.php:503 msgid "Service/Endpoint URL:" -msgstr "" +msgstr "URL du Service/du point de terminaison :" #: ajax_forms.php:505 msgid " - if using COUNTER's WSDL" -msgstr "" +msgstr " - lors de l'utilisation du WSDL de COUNTER" #: ajax_forms.php:509 msgid " - or - WSDL URL:" -msgstr "" +msgstr " - ou - URL de WSDL :" #: ajax_forms.php:511 msgid " - if not using COUNTER's WSDL" -msgstr "" +msgstr " - Si le WSDL de COUNTER n'est pas utilisé" #: ajax_forms.php:514 msgid "Report Type(s):" -msgstr "" +msgstr "Type(s) de rapport(s) :" #: ajax_forms.php:516 msgid "separate report types with semi-colon, e.g. JR1;BR1" -msgstr "" +msgstr "Séparer les types de rapport par des points-virgules (ex : JR1 ; BR1)" #: ajax_forms.php:520 msgid "COUNTER Release:" -msgstr "" +msgstr "Version COUNTER :" #: ajax_forms.php:529 msgid "Requestor ID:" -msgstr "" +msgstr "ID du demandeur :" #: ajax_forms.php:533 msgid "Customer ID:" -msgstr "" +msgstr "ID du client :" #: ajax_forms.php:537 msgid "Security Type:" -msgstr "" +msgstr "Type de sécurité :" #: ajax_forms.php:539 ajax_forms.php:545 ajax_forms.php:558 msgid "(optional)" -msgstr "" +msgstr "(facultatif)" #: ajax_forms.php:539 msgid "can be: HTTP Basic, WSSE Authentication" -msgstr "" +msgstr "peut être : HTTP basique, Authentification WSSE" #: ajax_forms.php:543 msgid "Login:" -msgstr "" +msgstr "Connexion :" #: ajax_forms.php:545 msgid " - only needed for HTTP or WSSE Authentication" -msgstr "" +msgstr " - uniquement requis pour HTTP ou une Authentification WSSE" #: ajax_forms.php:551 msgid " - only needed for HTTP or WSSE Authentication" -msgstr "" +msgstr " - uniquement requis pour HTTP ou une Authentification WSSE" #: ajax_forms.php:556 msgid "Service Day:" -msgstr "" +msgstr "Jour de service :" #: ajax_forms.php:558 msgid " - number indicating the day of month the service should run" msgstr "" +" - chiffre indiquant le jour du mois pendant lequel le service doit être " +"exécuté" #: ajax_forms.php:558 msgid "(e.g. 27 will run 27th of every month)" msgstr "" +"(ex : 27 indique que le service sera lancé tous les 27ème jour du mois)" #: ajax_forms.php:561 msgid "Sushi Notes:" -msgstr "" +msgstr "Notes Sushi :" #: ajax_forms.php:609 msgid "Link Associated Organization" -msgstr "" +msgstr "Rattacher à l'organisation associée" #: ajax_forms.php:613 msgid "Organization:" -msgstr "" +msgstr "Organisation :" #: ajax_forms.php:691 ajax_htmldata.php:969 msgid "ignore outlier" -msgstr "" +msgstr "Ignorer la valeur hors norme" #: ajax_forms.php:700 ajax_forms.php:795 ajax_forms.php:952 msgid "Close" -msgstr "" +msgstr "Fermer" #: ajax_forms.php:751 msgid "(showing only titles for which there were outliers during the year)" msgstr "" +"(Afficher uniquement les titres pour lesquels il y a avait des valeurs hors " +"normes pendant l'année)" #: ajax_forms.php:766 msgid "Total" -msgstr "" +msgstr "Total" #: ajax_forms.php:820 msgid "Add New Platform for SUSHI Connection" -msgstr "" +msgstr "Ajouter une nouvelle plateforme pour une connexion SUSHI" #: ajax_forms.php:821 ajax_htmldata.php:1514 msgid "Platform Name" -msgstr "" +msgstr "Nom de la plateforme" #: ajax_forms.php:862 msgid "Add Identifier" -msgstr "" +msgstr "Ajouter un identifiant" #: ajax_forms.php:863 msgid "Identifier Type" -msgstr "" +msgstr "Type d'identifiant" #: ajax_forms.php:866 ajax_htmldata.php:719 ajax_htmldata.php:796 #: spreadsheet.php:86 titles_spreadsheet.php:55 msgid "ISSN" -msgstr "" +msgstr "ISSN" #: ajax_forms.php:867 ajax_htmldata.php:720 msgid "eISSN" -msgstr "" +msgstr "eISSN" #: ajax_forms.php:868 ajax_htmldata.php:795 spreadsheet.php:85 #: titles_spreadsheet.php:54 msgid "ISBN" -msgstr "" +msgstr "ISBN" #: ajax_forms.php:869 msgid "eISBN" -msgstr "" +msgstr "eISBN" #: ajax_forms.php:870 ajax_htmldata.php:718 ajax_htmldata.php:794 #: spreadsheet.php:63 spreadsheet.php:83 titles_spreadsheet.php:49 #: titles_spreadsheet.php:53 msgid "DOI" -msgstr "" +msgstr "DOI" #: ajax_forms.php:871 spreadsheet.php:64 spreadsheet.php:84 msgid "Proprietary ID" -msgstr "" +msgstr "ID propriétaire" #: ajax_forms.php:875 msgid "Identifier" -msgstr "" +msgstr "Identifiant" #: ajax_forms.php:917 msgid "Associated Titles and Identifiers" -msgstr "" +msgstr "Titres et identifiants associés" #: ajax_forms.php:980 msgid "Add New" -msgstr "Ajouter" +msgstr "Ajouter un nouveau" #: ajax_forms.php:987 msgid " User" -msgstr "" +msgstr " Utilisateur" #: ajax_forms.php:988 ajax_htmldata.php:1402 msgid "Login ID" -msgstr "" +msgstr "Identifiant de connexion" #: ajax_forms.php:989 ajax_htmldata.php:1403 msgid "First Name" -msgstr "" +msgstr "Prénom" #: ajax_forms.php:990 ajax_htmldata.php:1404 msgid "Last Name" -msgstr "" +msgstr "Nom" #: ajax_forms.php:991 ajax_htmldata.php:1405 msgid "Privilege" -msgstr "" +msgstr "Privilège" #: ajax_forms.php:995 msgid "Add/Edit users have access to everything" -msgstr "" +msgstr "Les utilisateurs \"Add/Edit\" ont accès à tout" #: ajax_forms.php:995 msgid "except the Admin tab and admin users" -msgstr "" +msgstr "sauf à l'onglet Administration et aux utilisateurs Admin" #: ajax_forms.php:995 msgid "have access to everything" -msgstr "" +msgstr "qui ont accès à tout" #: ajax_forms.php:1041 ajax_htmldata.php:1639 ajax_processing.php:598 msgid "Function " -msgstr "" +msgstr "Fonction " #: ajax_forms.php:1041 ajax_htmldata.php:1639 ajax_processing.php:598 msgid " not set up!" -msgstr "" +msgstr " non définie !" #: ajax_htmldata.php:46 msgid "Import History for " -msgstr "" +msgstr "Importer l'historique pour " #: ajax_htmldata.php:61 ajax_htmldata.php:1147 msgid "Import Date" -msgstr "" +msgstr "Date d'importation" #: ajax_htmldata.php:62 ajax_htmldata.php:1148 msgid "Imported By" -msgstr "" +msgstr "Importé par" #: ajax_htmldata.php:63 ajax_htmldata.php:1149 msgid "Import Summary" -msgstr "" +msgstr "Résumé de l'importation" #: ajax_htmldata.php:75 msgid "view log" -msgstr "" +msgstr "Voir le fichier journal" #: ajax_htmldata.php:76 msgid "view archive" -msgstr "" +msgstr "Voir l'archive" #: ajax_htmldata.php:81 msgid "(no imports found)" -msgstr "" +msgstr "(aucune importation trouvée)" #: ajax_htmldata.php:112 msgid "Interface Login" -msgstr "" +msgstr "Connexion à l'interface" #: ajax_htmldata.php:113 ajax_htmldata.php:241 msgid "Password" -msgstr "" +msgstr "Mot de passe" #: ajax_htmldata.php:114 ajax_htmldata.php:242 msgid "URL" -msgstr "" +msgstr "URL" #: ajax_htmldata.php:115 msgid "Login Notes" -msgstr "" +msgstr "Notes de connexion" #: ajax_htmldata.php:137 ajax_htmldata.php:198 ajax_htmldata.php:358 #: ajax_htmldata.php:427 ajax_htmldata.php:637 ajax_htmldata.php:698 #: ajax_htmldata.php:1428 ajax_htmldata.php:1536 msgid "(none found)" -msgstr "" +msgstr "(non-trouvé)" #: ajax_htmldata.php:145 ajax_htmldata.php:206 msgid "add new login" -msgstr "" +msgstr "Ajouter une nouvelle connexion" #: ajax_htmldata.php:156 msgid "Interface Logins" -msgstr "" +msgstr "Connexions à l'interface" #: ajax_htmldata.php:188 ajax_htmldata.php:350 ajax_htmldata.php:419 #: ajax_htmldata.php:1419 msgid "remove" -msgstr "" +msgstr "Supprimer" #: ajax_htmldata.php:236 msgid "For " -msgstr "" +msgstr "Pour " #: ajax_htmldata.php:236 ajax_htmldata.php:260 msgid "view organization" -msgstr "" +msgstr "Voir l'organisation" #: ajax_htmldata.php:239 msgid "Login Type" -msgstr "" +msgstr "Type de connexion" #: ajax_htmldata.php:240 msgid "Username" -msgstr "" +msgstr "Nom d'utilisateur" #: ajax_htmldata.php:243 ajax_htmldata.php:337 msgid "Notes" -msgstr "" +msgstr "Remarques" #: ajax_htmldata.php:260 msgid "No login information stored for " -msgstr "" +msgstr "Aucune information de connexion stockée pour " #: ajax_htmldata.php:265 msgid "change associated organization" -msgstr "" +msgstr "Changer l'organisation associée" #: ajax_htmldata.php:274 msgid "link to associated organization" -msgstr "" +msgstr "Rattacher à l'organisation associée" #: ajax_htmldata.php:299 msgid "Login Credentials are also available for the following publishers:" msgstr "" +"Les identifiants de connexion sont aussi disponibles pour les éditeurs " +"suivants :" #: ajax_htmldata.php:335 ajax_htmldata.php:394 msgid "Start Year" -msgstr "" +msgstr "Année de début" #: ajax_htmldata.php:336 ajax_htmldata.php:395 msgid "End Year" -msgstr "" +msgstr "Année de fin" #: ajax_htmldata.php:344 msgid "Present" -msgstr "" +msgstr "Actuel" #: ajax_htmldata.php:350 ajax_htmldata.php:901 ajax_htmldata.php:925 #: uploadComplete.php:317 msgid "edit" -msgstr "" +msgstr "Modifier" #: ajax_htmldata.php:363 msgid "add new publisher notes" -msgstr "" +msgstr "Ajouter de nouvelles notes d'éditeur" #: ajax_htmldata.php:376 ajax_htmldata.php:397 msgid "Interface Notes" -msgstr "" +msgstr "Notes de l'interface" #: ajax_htmldata.php:396 msgid "Counter" -msgstr "" +msgstr "Décompte" #: ajax_htmldata.php:396 msgid "Compliant?" -msgstr "" +msgstr "Conforme ?" #: ajax_htmldata.php:432 msgid "add new interface note" -msgstr "" +msgstr "Ajouter une nouvelle note d'interface" #: ajax_htmldata.php:474 msgid "Edit SUSHI Connection Info" -msgstr "" +msgstr "Modifier les infos de connexion SUSHI" #: ajax_htmldata.php:475 msgid "Test SUSHI Connection" -msgstr "" +msgstr "Tester la connexion SUSHI" #: ajax_htmldata.php:477 msgid "Add SUSHI Connection" -msgstr "" +msgstr "Ajouter une connexion SUSHI" #: ajax_htmldata.php:483 msgid "Visit the " -msgstr "" +msgstr "Allez sur le" #: ajax_htmldata.php:483 msgid "SUSHI Server Registry" -msgstr "" +msgstr "Registre du serveur SUSHI (en anglais)" #: ajax_htmldata.php:483 msgid " for information about adding your provider." -msgstr "" +msgstr " pour plus d'informations sur l'ajout de votre fournisseur." #: ajax_htmldata.php:510 msgid "delete entire month" -msgstr "" +msgstr "Supprimer le mois entier" #: ajax_htmldata.php:521 msgid "view outliers for this month" -msgstr "" +msgstr "Voir les valeurs hors normes de ce mois" #: ajax_htmldata.php:556 ajax_htmldata.php:637 msgid "Statistics Management" -msgstr "" +msgstr "Gestion des statistiques" #: ajax_htmldata.php:698 msgid "Titles" -msgstr "" +msgstr "Titres" #: ajax_htmldata.php:713 msgid "Journals - Associated Titles and ISSNs" -msgstr "" +msgstr "Périodiques - Titres et numéros ISSN associés" #: ajax_htmldata.php:717 ajax_htmldata.php:793 msgid "Title" -msgstr "" +msgstr "Titre" #: ajax_htmldata.php:760 msgid "view related titles" -msgstr "" +msgstr "Voir les titres connexes" #: ajax_htmldata.php:760 msgid "view in link resolver" -msgstr "" +msgstr "Afficher dans le résolveur de liens" #: ajax_htmldata.php:789 msgid "Books - Associated Titles and ISBNs" -msgstr "" +msgstr "Livres - Titres et numéros ISBN associés" #: ajax_htmldata.php:896 msgid "Current Email Addresses" -msgstr "" +msgstr "Adresses email actuelles" #: ajax_htmldata.php:902 msgid "delete" -msgstr "" +msgstr "Supprimer" #: ajax_htmldata.php:921 msgid "Current Outlier Parameters" -msgstr "" +msgstr "Paramètres actuels des valeurs hors normes" #: ajax_htmldata.php:924 uploadComplete.php:89 msgid "Level " -msgstr "" +msgstr "Niveau " #: ajax_htmldata.php:924 uploadComplete.php:89 msgid " over plus " -msgstr "" +msgstr " dépassant de " #: ajax_htmldata.php:924 #, php-format msgid "% over - displayed " -msgstr "" +msgstr "“% dépassé – affiché " #: ajax_htmldata.php:929 msgid "" "Outliers are currently disabled in the configuration file. Contact your " "technical support to enable them." msgstr "" +"Les valeurs hors normes sont actuellement désactivées dans le fichier de " +"configuration. Contactez votre service informatique pour les activer." #: ajax_htmldata.php:961 msgid "None currently" -msgstr "" +msgstr "Aucun actuellement" #: ajax_htmldata.php:968 msgid "update override" -msgstr "" +msgstr "Mettre à jour l'outrepassement" #: ajax_htmldata.php:1017 msgid "PDF" -msgstr "" +msgstr "PDF" #: ajax_htmldata.php:1055 ajax_htmldata.php:1080 msgid "edit report display name" -msgstr "" +msgstr "Modifier le nom d'affichage du rapport" #: ajax_htmldata.php:1106 msgid "No imports found." -msgstr "" +msgstr "Aucune importation trouvée." #: ajax_htmldata.php:1112 ajax_htmldata.php:1472 msgid "Displaying " -msgstr "" +msgstr "Affichage de " #: ajax_htmldata.php:1112 ajax_htmldata.php:1472 msgid " to " -msgstr "" +msgstr " à " #: ajax_htmldata.php:1112 ajax_htmldata.php:1472 msgid " of " -msgstr "" +msgstr " de " #: ajax_htmldata.php:1112 msgid " Records" -msgstr "" +msgstr " Résultats" #: ajax_htmldata.php:1228 ajax_htmldata.php:1280 ajax_htmldata.php:1337 msgid "Platform/Publisher" -msgstr "" +msgstr "Plateforme/éditeur" #: ajax_htmldata.php:1229 msgid "Import Run Date" -msgstr "" +msgstr "Date d'exécution de l'importation" #: ajax_htmldata.php:1230 msgid "Details" -msgstr "" +msgstr "Détails" #: ajax_htmldata.php:1260 msgid "(no outstanding imports found)" -msgstr "" +msgstr "(aucune importation en attente)" #: ajax_htmldata.php:1281 ajax_htmldata.php:1340 ajax_htmldata.php:1517 msgid "Latest Run" -msgstr "" +msgstr "Dernière date d'exécution le" #: ajax_htmldata.php:1282 ajax_htmldata.php:1341 ajax_htmldata.php:1518 msgid "Latest Status" -msgstr "" +msgstr "Dernier statut" #: ajax_htmldata.php:1308 msgid "view full log" -msgstr "" +msgstr "Voir le fichier journal complet" #: ajax_htmldata.php:1309 ajax_htmldata.php:1372 msgid "run now" -msgstr "" +msgstr "Exécuter maintenant" #: ajax_htmldata.php:1310 ajax_htmldata.php:1373 msgid "change/test connection" -msgstr "" +msgstr "Changer/tester la connexion" #: ajax_htmldata.php:1317 msgid "(no failed imports found)" -msgstr "" +msgstr "(aucune importation échouée)" #: ajax_htmldata.php:1338 msgid "Report(s)" -msgstr "" +msgstr "Rapport(s)" #: ajax_htmldata.php:1339 ajax_htmldata.php:1516 msgid "Next Run" -msgstr "" +msgstr "Prochaine date d'exécution" #: ajax_htmldata.php:1380 msgid "(no sushi services set up)" -msgstr "" +msgstr "(Aucun service Sushi configuré)" #: ajax_htmldata.php:1468 msgid "Sorry, no platforms or publishers fit your query" msgstr "" +"Désolé, aucune plateforme ou aucun éditeur ne correspond à votre demande" #: ajax_htmldata.php:1472 msgid " Platform Records" -msgstr "" +msgstr " Notices de plateformes" #: ajax_htmldata.php:1515 msgid "Publishers" -msgstr "" +msgstr "Editeurs" #: ajax_htmldata.php:1620 msgid "records per page" -msgstr "" +msgstr "Résultats par page" #: import.php:14 msgid "Usage Statistics Import" -msgstr "" +msgstr "Importer des statistiques d'utilisation" #: import.php:25 msgid "Incorrect File format, must be .txt!" -msgstr "" +msgstr "Format de fichier incorrect, doit être en .txt !" #: import.php:28 msgid "" "There was an error uploading the file. Please verify the size is not over " "5MB and try again!" msgstr "" +"Erreur lors du téléchargement du fichier. Vérifiez que le fichier ne dépasse " +"pas 5 Mo et réessayez !" #: import.php:31 msgid "File has an incorrectly formatted name - try filename.txt!" -msgstr "" +msgstr "Format incorrect du nom du fichier - renommez-le en nomdefichier.txt !" #: import.php:43 msgid "File:" -msgstr "" +msgstr "Fichier :" #: import.php:48 msgid "Layout:" -msgstr "" +msgstr "Mise en page :" #: import.php:57 msgid "Override previous month verification" -msgstr "" +msgstr "Outrepasser la vérification du mois précédent" #: import.php:58 msgid "Upload" -msgstr "" +msgstr "Télécharger" #: import.php:68 msgid "Instructions:" -msgstr "" +msgstr "Consignes :" #: import.php:70 msgid "Save file as .txt files in tab delimited format" -msgstr "" +msgstr "Enregistrez le fichier au format .txt séparé par des tabulations." #: import.php:71 msgid "File may not be larger than 5MB" -msgstr "" +msgstr "Le fichier ne peut dépasser 5 Mo." #: import.php:72 msgid "" "Ensure column headers conform to Counter's standards for the report type" msgstr "" +"Vérifiez que les en-têtes de colonnes sont conformes aux normes Counter pour " +"ce type de rapport." #: import.php:73 msgid "More info: " -msgstr "" +msgstr "Pour plus d'informations : " #: import.php:82 msgid "Recent Imports" -msgstr "" +msgstr "Importations récentes" #: index.php:50 msgid "Search" -msgstr "" +msgstr "Rechercher" #: index.php:51 msgid "new search" -msgstr "" +msgstr "Nouvelle recherche" #: index.php:60 msgid "Name (contains)" -msgstr "" +msgstr "Nom (contient)" #: index.php:63 msgid "go!" -msgstr "" +msgstr "OK !" #: index.php:70 msgid "Starts with" -msgstr "" +msgstr "Commençant par" #: not_avail.php:21 msgid "Not Available" -msgstr "" +msgstr "Non disponible" #: not_avail.php:29 msgid "Usage Statistics Module - " -msgstr "" +msgstr "- Module Statistiques d'utilisation" #: not_avail.php:61 msgid "" "Please contact your Administrator for access to the Usage Statistics Module." msgstr "" +"Veuillez contacter votre Administrateur pour accéder au Module Statistiques " +"d'utilisation." #: publisherPlatform.php:20 msgid "View or Edit Publisher / Platform" -msgstr "" +msgstr "Voir ou modifier la plateforme/l'éditeur" #: publisherPlatformList.php:4 msgid "Edit Publishers / Platforms" -msgstr "" +msgstr "Modifier les éditeurs/plateformes" #: publisherPlatformList.php:16 msgid "Publisher / Platform Update" -msgstr "" +msgstr "Mettre à jour un éditeur/une plateforme" #: publisherPlatformList.php:31 msgid "view / edit" -msgstr "" +msgstr "voir/modifier" #: publisherPlatformList.php:50 reporting.php:71 msgid "No publishers / platforms found." -msgstr "" +msgstr "Aucun éditeur/plateforme trouvé" #: reporting.php:2 msgid "Report Options" -msgstr "" +msgstr "Options de rapport" #: reporting.php:10 msgid "Publisher / Platform Reporting Administrative Update" -msgstr "" +msgstr "Mise à jour administrative des rapports d'éditeur/de plateforme" #: reporting.php:12 msgid "Directions:" -msgstr "" +msgstr "Consignes :" #: reporting.php:12 msgid "" " Mark the checkboxes to add / remove specific Platforms or Publishers to the " "default report list." msgstr "" +" Cochez les cases pour ajouter/supprimer des plateformes ou des éditeurs " +"spécifiques à la liste des rapports par défaut." #: reporting.php:12 msgid "" "Click 'edit report display name' to change the display name in the reporting " "system for specific Platforms or Publishers." msgstr "" +"Cliquez sur \"Modifier le nom d'affichage du rapport\" pour modifier le nom " +"affiché dans le système de rapports pour des plateformes ou des éditeurs " +"spécifiques." #: reporting.php:25 msgid "Available" -msgstr "" +msgstr "Disponible" #: reporting.php:25 msgid "As Default" -msgstr "" +msgstr "Par défaut" #: reporting.php:25 msgid "Report" -msgstr "" +msgstr "Rapport" #: spreadsheet.php:60 msgid "Publisher" -msgstr "" +msgstr "Editeur" #: spreadsheet.php:61 msgid "Platform" -msgstr "" +msgstr "Plateforme" #: spreadsheet.php:65 titles_spreadsheet.php:50 msgid "Print ISSN" -msgstr "" +msgstr "Numéro ISSN de la version imprimée" #: spreadsheet.php:66 titles_spreadsheet.php:51 msgid "Online ISSN" -msgstr "" +msgstr "ISSN en ligne" #: spreadsheet.php:67 spreadsheet.php:87 spreadsheet.php:102 msgid "YTD Total" -msgstr "" +msgstr "Total du cumul annuel" #: spreadsheet.php:68 msgid "YTD HTML" -msgstr "" +msgstr "Cumul annuel en HTML" #: spreadsheet.php:69 msgid "YTD PDF" -msgstr "" +msgstr "Cumul annuel en PDF" #: spreadsheet.php:70 spreadsheet.php:88 spreadsheet.php:103 msgid "Jan-" -msgstr "" +msgstr "Janv-" #: spreadsheet.php:71 spreadsheet.php:89 spreadsheet.php:104 msgid "Feb-" -msgstr "" +msgstr "Févr-" #: spreadsheet.php:72 spreadsheet.php:90 spreadsheet.php:105 msgid "Mar-" -msgstr "" +msgstr "Mar-" #: spreadsheet.php:73 spreadsheet.php:91 spreadsheet.php:106 msgid "Apr-" -msgstr "" +msgstr "Avr-" #: spreadsheet.php:74 spreadsheet.php:92 spreadsheet.php:107 msgid "May-" -msgstr "" +msgstr "Mai-" #: spreadsheet.php:75 spreadsheet.php:93 spreadsheet.php:108 msgid "Jun-" -msgstr "" +msgstr "Juin-" #: spreadsheet.php:76 spreadsheet.php:94 spreadsheet.php:109 msgid "Jul-" -msgstr "" +msgstr "Juil-" #: spreadsheet.php:77 spreadsheet.php:95 spreadsheet.php:110 msgid "Aug-" -msgstr "" +msgstr "Aôut-" #: spreadsheet.php:78 spreadsheet.php:96 spreadsheet.php:111 msgid "Sep-" -msgstr "" +msgstr "Sept-" #: spreadsheet.php:79 spreadsheet.php:97 spreadsheet.php:112 msgid "Oct-" -msgstr "" +msgstr "Oct-" #: spreadsheet.php:80 spreadsheet.php:98 spreadsheet.php:113 msgid "Nov-" -msgstr "" +msgstr "Nov-" #: spreadsheet.php:81 spreadsheet.php:99 spreadsheet.php:114 msgid "Dec-" -msgstr "" +msgstr "Déc-" #: spreadsheet.php:101 msgid "User Activity" -msgstr "" +msgstr "Activité de l'utilisateur" #: spreadsheet.php:124 msgid "Total for all Journals" -msgstr "" +msgstr "Total de tous les périodiques" #: spreadsheet.php:126 msgid "Total for all Books" -msgstr "" +msgstr "Total de tous les Livres" #: spreadsheet.php:128 msgid "Total for all Databases" -msgstr "" +msgstr "Total de toutes les Bases de données" #: sushi.php:26 msgid "SUSHI Import" -msgstr "" +msgstr "Import SUSHI" #: sushi.php:45 msgid "Sushi Output Log:" -msgstr "" +msgstr "Fichier des résultats SUSHI :" #: sushi.php:56 msgid "SUSHI Administration" -msgstr "" +msgstr "Administration SUSHI" #: sushi.php:62 msgid "Add new platform for SUSHI" -msgstr "" +msgstr "Ajouter une nouvelle plateforme à SUSHI" #: sushi.php:66 msgid "Outstanding Import Queue" -msgstr "" +msgstr "File d'attente des importations" #: sushi.php:71 msgid "Last Failed SUSHI Imports" -msgstr "" +msgstr "Dernières importations SUSHI ayant échouées" #: sushi.php:75 msgid "All SUSHI Services" -msgstr "" +msgstr "Tous les services SUSHI" #: sushiSchedule.php:33 msgid " SUSHI runs found for day: " -msgstr "" +msgstr " Processus SUSHI trouvés pour le jour : " #: sushiSchedule.php:52 msgid "Log in to " -msgstr "" +msgstr "Connectez-vous à " #: sushiSchedule.php:52 msgid "Sushi Administration" -msgstr "" +msgstr "l'administration Sushi" #: sushiSchedule.php:52 msgid " for more information." -msgstr "" +msgstr " pour plus d'informations." #: sushiSchedule.php:65 msgid "SUSHI Scheduled run log for " -msgstr "" +msgstr "Fichier journal du processus SUSHI prévu pour " #: sushiSchedule.php:65 msgid " runs" -msgstr "" +msgstr " fonctionne" #: sushiSchedule.php:70 msgid "Run complete. Log has been emailed to " -msgstr "" +msgstr "Processus terminé. Le fichier journal a été envoyé par email à " #: sushiSchedule.php:72 uploadComplete.php:903 msgid "Email to " -msgstr "" +msgstr "Envoyer par email à " #: sushiSchedule.php:72 uploadComplete.php:903 msgid " Failed!" -msgstr "" +msgstr " Echec !" #: sushiSchedule.php:77 msgid "Nothing to see here! (no sushi scheduled today)" -msgstr "" +msgstr "Rien à afficher (aucun processus Sushi prévu pour aujourd'hui)" #: templates/header.php:167 msgid "Invalid translation route!" -msgstr "" +msgstr "Chemin d'accès aux traductions invalide !" #: titles_spreadsheet.php:35 msgid " Titles " -msgstr "" +msgstr " Titres" #: uploadComplete.php:25 msgid "Upload Process Complete" -msgstr "" +msgstr "Processus de téléchargement terminé" #: uploadComplete.php:67 msgid "Process started on " -msgstr "" +msgstr "Processus démarré le " #: uploadComplete.php:68 msgid "File: " -msgstr "" +msgstr "Fichier : " #: uploadComplete.php:69 uploadConfirmation.php:292 msgid "Report Format: " -msgstr "" +msgstr "Format du rapport : " #: uploadComplete.php:82 msgid "Outlier Parameters:" -msgstr "" +msgstr "Paramètres des valeurs hors normes :" #: uploadComplete.php:89 #, php-format msgid "% over " -msgstr "" +msgstr "% de dépassement " #: uploadComplete.php:246 msgid "Override indicator set - all months will be imported." -msgstr "" +msgstr "Indicateur d'outrepassement défini - tous les mois seront importés." #: uploadComplete.php:255 msgid "" "Entire year already exists for this Platform / year. No counts will be " "imported." msgstr "" +"L'année entière existe déjà pour cette Plateforme/année. Aucun décompte ne " +"sera importé." #: uploadComplete.php:259 msgid "Month Started at: " -msgstr "" +msgstr "Mois commencé à : " #: uploadComplete.php:261 msgid "" "No records exist for this Platform / year. Import will start with month 1." msgstr "" +"Aucun résultat n'existe pour cette plateforme/année. L'importation " +"commencera avec le mois 1." #: uploadComplete.php:283 msgid "Year: " -msgstr "" +msgstr "Année : " #: uploadComplete.php:317 msgid "New Platform set up: " -msgstr "" +msgstr "Nouvelle plateforme configurée : " #: uploadComplete.php:399 msgid "New Publisher / Platform set up: " -msgstr "" +msgstr "Nouvel éditeur/plateforme configuré : " #: uploadComplete.php:616 msgid "Publisher / Platform: " -msgstr "" +msgstr "Editeur/plateforme : " #: uploadComplete.php:625 msgid "Title: " -msgstr "" +msgstr "Titre : " #: uploadComplete.php:662 msgid "Duplicate record for this Print ISSN in same spreadsheet: Month: " msgstr "" +"Notice dupliquée pour ce numéro ISSN imprimé dans la même feuille de " +"calcul : Mois : " #: uploadComplete.php:662 msgid " New Count: " -msgstr "" +msgstr " Nouveau décompte : " #: uploadComplete.php:746 msgid "New Usage Count Record Added: Month: " -msgstr "" +msgstr "Nouvelle notice de décompte ajoutée : Mois : " #: uploadComplete.php:746 uploadComplete.php:748 msgid " Count: " -msgstr "" +msgstr " Décompte : " #: uploadComplete.php:748 msgid "Usage Count Record is not numeric for month: " msgstr "" +"La notice du décompte d'utilisation n'est pas numérique pour le mois : " #: uploadComplete.php:755 msgid "Outlier found for this record: Level " -msgstr "" +msgstr "Valeur hors normes trouvée pour cette notice : Niveau " #: uploadComplete.php:764 msgid "Current or future month will not be imported: " -msgstr "" +msgstr "Le mois actuel ou le mois prochain ne seront pas importés : " #: uploadComplete.php:803 msgid "YTD Already Exists for this Print ISSN, counts are added together." msgstr "" +"Le cumul annuel existe déjà pour ce numéro ISSN imprimé, les décomptes sont " +"ajoutés ensemble." #: uploadComplete.php:827 msgid "YTD Total Count: " -msgstr "" +msgstr "Décompte total du cumul annuel: " #: uploadComplete.php:827 msgid "YTD HTML Count: " -msgstr "" +msgstr "Décompte total du cumul annuel en HTML : " #: uploadComplete.php:827 msgid "YTD PDF Count: " -msgstr "" +msgstr "Décompte total du cumul annuel en PDF : " #: uploadComplete.php:834 msgid "No YTD import performed since monthly stats were not imported" msgstr "" +"Aucune importation de cumul annuel effectuée car les statistiques mensuelles " +"n'ont pas été importées" #: uploadComplete.php:844 msgid "" "Title match did not complete correctly, please check ISBN / ISSN to verify " "for Title: " msgstr "" +"La correspondance de titres n'a pas pu terminer correctement, merci de " +"vérifier l'ISBN/l'ISSN du titre : " #: uploadComplete.php:896 msgid "Log Output for " -msgstr "" +msgstr "Fichier journal des résultats pour " #: uploadComplete.php:897 msgid "Usage Statistics File Import Run!" -msgstr "" +msgstr "Importation avec succès du fichier statistiques des utilisations !" #: uploadComplete.php:897 msgid "Please find log file: " -msgstr "" +msgstr "Voici le fichier journal : " #: uploadComplete.php:901 msgid "Log has been emailed to " -msgstr "" +msgstr "Le fichier journal a été envoyé par email à " #: uploadComplete.php:916 uploadComplete.php:923 uploadComplete.php:966 msgid " titles processed." -msgstr "" +msgstr " titres traités." #: uploadComplete.php:966 msgid "Summary:" -msgstr "" +msgstr "Résumé :" #: uploadConfirmation.php:33 msgid "SUSHI Import Confirmation" -msgstr "" +msgstr "Confirmation de l'importation SUSHI" #: uploadConfirmation.php:70 msgid "The file " -msgstr "" +msgstr "Le fichier " #: uploadConfirmation.php:70 msgid " has been uploaded successfully." -msgstr "" +msgstr " a été téléchargé avec succès." #: uploadConfirmation.php:70 msgid "Please confirm the following data:" -msgstr "" +msgstr "Veuillez confirmer les données suivantes :" #: uploadConfirmation.php:90 msgid "Upload Process Confirmation" -msgstr "" +msgstr "Confirmation du processus de téléchargement" #: uploadConfirmation.php:142 msgid " for " -msgstr "" +msgstr " par " #: uploadConfirmation.php:190 msgid "Looking for " -msgstr "" +msgstr "Rechercher " #: uploadConfirmation.php:190 msgid " in column " -msgstr "" +msgstr " dans la colonne " #: uploadConfirmation.php:190 msgid "but found " -msgstr "" +msgstr "mais a trouvé " #: uploadConfirmation.php:265 msgid "Error with Format" -msgstr "" +msgstr "Erreur du format" #: uploadConfirmation.php:265 msgid "Report format is set to " -msgstr "" +msgstr "Le format du rapport est défini à " #: uploadConfirmation.php:265 msgid "" " but does not match the column names listed in layouts.ini for this format - " msgstr "" +" mais ne correspond pas aux noms de colonnes indiqués dans le fichier " +"layouts.ini pour ce format - " #: uploadConfirmation.php:265 msgid "Expecting columns: " -msgstr "" +msgstr "Colonnes prévues : " #: uploadConfirmation.php:265 msgid "Found columns: " -msgstr "" +msgstr "Colonnes trouvées : " #: uploadConfirmation.php:265 msgid "" "If problems persist you can copy an existing header that works into this " "file." msgstr "" +"Si les problèmes persistent, vous pouvez copier un en-tête existant qui " +"fonctionne dans ce fichier." #: uploadConfirmation.php:270 msgid "Error with Setup: This report format is not set up in layouts.ini." msgstr "" +"Erreur de Configuration : Ce format de rapport n'est pas configuré dans le " +"fichier layouts.ini." #: uploadConfirmation.php:275 msgid "" "Error with Format: The line preceding the first should start with 'Total'." msgstr "" +"Erreur de format : La ligne précédent la première devrait commencer par " +"\"Total\"." #: uploadConfirmation.php:280 msgid "Error with Year: Year listed in header " -msgstr "" +msgstr "Erreur avec l'Année : l'Année est présente dans l'en-tête " #: uploadConfirmation.php:280 msgid " may not be ahead of current year. Please correct and submit again." msgstr "" +" pourrait ne pas être en avance de l'année actuelle. Corrigez ce problème et " +"envoyez à nouveau." #: uploadConfirmation.php:285 msgid "" "File is flagged to override verifications of previous month data. If this " "is incorrect use 'Cancel' to fix." msgstr "" +"Le fichier est identifié comme pouvant outrepasser les vérifications des " +"données du mois précédent. Si ceci est incorect, utilisez \"Annuler\" pour " +"corriger ce problème." #: uploadConfirmation.php:292 msgid "" "If this is incorrect, please use 'Cancel' to go back and fix the headers of " "the file." msgstr "" +"Si ceci est incorrect, veuillez utiliser \"Annuler\" pour revenir en arrière " +"et corriger les en-têtes du fichier." From 0b29b99903f1573684f60210db8388295ef5bad8 Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Mon, 2 May 2016 14:18:45 -0600 Subject: [PATCH 33/52] Relocating Language Dropdown --- css/style.css | 12 +++++- templates/header.php | 90 ++++++++++++++++++++++---------------------- 2 files changed, 57 insertions(+), 45 deletions(-) diff --git a/css/style.css b/css/style.css index 9d6f860..dc348f6 100755 --- a/css/style.css +++ b/css/style.css @@ -84,6 +84,8 @@ fieldset {border:0;} select option { color: #3D545D; font-family: "arial"; font-size: 95%; margin:1px; } .optionStyle { color: #3D545D; font-family: "arial"; font-size: 8pt; font-weight: medium; } +input, select, multiple, textarea {color: #3D545D; font-family: "arial"; font-size: 8pt; font-weight: medium;} + /* following is for the right panel (helpful links) in the resource page *************************/ div.rightPanel a {color:#3D545D;text-decoration:none;} @@ -2429,8 +2431,11 @@ td#setLanguage { select#lang { border: none; - margin-left: 10px; + margin-left: 6px; background-color: #fff; + position: relative; + top: 3px; + font-size: 12px; } /*--- Consistentcy for Form Buttons ---*/ @@ -2474,4 +2479,9 @@ a.save-button table.noBorderTable td.arrow { text-align: right; +} + +span#divider { + position: relative; + top: 3px; } \ No newline at end of file diff --git a/templates/header.php b/templates/header.php index b5373a5..733afb7 100755 --- a/templates/header.php +++ b/templates/header.php @@ -96,13 +96,57 @@ } ?> -
        settings->authModule == 'Y'){ echo "logout | Help"; } ?> +
        settings->authModule == 'Y'){ echo "logout | Help | "; } ?> + + + + +
    - + isAdmin()){ ?> .gif" hover="images/menu//menu-home-over.gif" class="rollover" />.gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu//menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu//menu-admin-over.gif" class="rollover" />.gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> @@ -163,48 +207,6 @@ ?> - - - From 841c9647b4eb11af29e99f35cad2b6100d97c100 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Mon, 2 May 2016 15:54:53 -0600 Subject: [PATCH 34/52] New French Images --- css/style.css | 10 +++++- images/menu/fr_FR/menu-admin-on.gif | Bin 1029 -> 1079 bytes images/menu/fr_FR/menu-admin-over.gif | Bin 1027 -> 1078 bytes images/menu/fr_FR/menu-admin.gif | Bin 1029 -> 1083 bytes images/menu/fr_FR/menu-fileimport-on.gif | Bin 829 -> 893 bytes images/menu/fr_FR/menu-fileimport-over.gif | Bin 826 -> 878 bytes images/menu/fr_FR/menu-fileimport.gif | Bin 829 -> 885 bytes js/common.js | 25 ++++++++++++++ templates/header.php | 37 +++++++++++++++++---- 9 files changed, 65 insertions(+), 7 deletions(-) diff --git a/css/style.css b/css/style.css index dc348f6..b8e3b9e 100755 --- a/css/style.css +++ b/css/style.css @@ -1969,7 +1969,7 @@ input#submitPlatformForm:hover { a#usage-reports { position: relative; - top: -9px; + top: 9px; } /*--- Align Text When No Documents Fit the Query ---*/ @@ -2484,4 +2484,12 @@ table.noBorderTable td.arrow { span#divider { position: relative; top: 3px; +} + +#main-menu-titles img { + float: left; +} + +#usage-reports img { + float: none; } \ No newline at end of file diff --git a/images/menu/fr_FR/menu-admin-on.gif b/images/menu/fr_FR/menu-admin-on.gif index 75b86de53ea719efae6118f21308e1a786777e79..8febece91bf70919fb2b9e84b1db5c41f0153080 100644 GIT binary patch delta 695 zcmV;o0!aOZ2)78ZjRAiw00000fB+}}00;ko21$d2g@%WSiHeJijgF6yh=P%nm6n&7 zkdv95ot~eDo1mklrHi7bsj8r;tFEtT&nHdILTF^K|m4M-+Qz*E7X z0Jf7XEjqxYTHWTBEyiXWzuT}wgS!z3MY5OV?m-9y%x|ta!1W}~2{2C*|2;C=1t1`Sf(9YvV8anO z6hhe~3?UF3Jg%X48++@xHwb*`4bl_>$lWKP02U&_-*W*(H^_7XTBjm*k06M|3q2%} z!3PpVutI+!32bFviwBs4kcR4U$eWyV9|kADNCgmxL<0!Hb02O13Kb<@n+4FBPX@#& zWt5scLIV;ma4?7o5J+Ib4TKDbp^ODAfRj#0uJ>Vwy`2P{ZcJshl>s<4a9==39Do2` zSTXQbSYwqnV1dp&QiKs|4&p&J4q#ACFQt9jOsFrSCPQke#hi+2FsiN!s;jWJ3M($M d&RR>Yw$6fUuCMIMD@wn9>T9s{5KB!U06Q!P7TEv* delta 644 zcmV-~0(&*pEHr#x5R-Q`heI-}`gqdW3h3T#52@OcNz=2{QCO{y81vd7_LkNEXrqd}B4^GH@WBuSYi?v;g5@$OR1v9Q-&WV1Y-2=1L7n*oXkSRns8U*nuHK zkPakfAYwRRq`M&n0tg8Zz+8X?Iuj5`AVla8bS41=RR~}m10g#L6o4wE005!~3@o6^ z;3!lC^M)7z05yL>JOKx`3PBJHl8+oB|AaWuFe1@_tOnMKJ+N-1&jShw90(BjKv$$i z4G8YqbZWr`<3=()pb!D&Ap(R1J{eXi0RuoWpL}}r(KJFpI0)e|A<@Sn3(PejIV6G4 z1%m?M9@6ya0F!Kan`^2-2mpseB=g>_tE$O#^YS_@-T;5?psA;EMsnexhYYzMA{fd` z6)J&|gar6pHzWZ2-iRF@?2Uk^kiH~)4?-Zoeu3xm1c2Qj&j~;ePE|#6+6ETfXTS#- z(0~I4g;;hILkP?k4{Yn@_TD=24Kg2lgFJodxh2PzKD1 zV0P1}AOsBJ4RJyU4@h7GA;oP-V*v{2#FLWli3s9vCq3EQQ&4qffKCnQCy)>aAfVS) z41_gSS!W$MppA~0utJ(cRFDk>7gWZ`22ic74r c)YQWFROJ2%lF9smFU delta 642 zcmV-|0)73q2!jZ)jRAil`2+v}0000i00000fB+}}00;koLxO{Zg@%WSiHeJijgF6y zk&=^?m6n&7nVOrNot~edp`xRtrKYE-sj922t*)=Iv9hzYwYImoxw^Z&y{sh=2^1BB z1}Gng0SAZx0E|Kd%mRoC28{*^LkIz`DH0DMFM<;pLOg~A2M2!*hs~b_LIjKk2hp%M z4=o@bLl+te4t^LCu%KW&XPyScV?+R2EC@ArV8{@p1Bn@j=nYV4ZAgItLIMPE79au0 z1OyTYK{*6kLjWh`0hq=>NXP>4Y!(2Z@_>N_Hia-~X%oS=AqD{0Opr~$0iZ$5ENkZkeMw9G?e<;*-QmO0N5LH_p@h0 z@Cr1Hw#}W=k2E6C+!KL0}DfR0Kx+z#6U;_LoFBK0nWhV-*W(l_F!qB382t= zbHS4hcb$5br_y>~2^IihCK*s+dh2~4TGS@pM?b|0Fp>6LN{Q5 zqB#U3Xf@e1lmQ?$z+E~*9Du-AKrwJsQcE?39(kRZu!539R1gdV7x?1mpMVA`=%9oa cYUrVeCaUP7j5g}%qmV`_>7_N(g@erqeMRJQ*f~6(UJL zhYB1x&;U_6Qw5R`Xk_3(I$w`~JjgMkgOU#$ARHlaNWg-R2F;Zkps*1EbgQO0C{aX* zh#C_@yg<}&07-XB3Is?JAb`0533etRkRZuWCFo895V{b+ItEF27DyPi0Dz(g3@nJ6 zgaOj12<9m<03d&Af_MTBY)yh779=4%|0E=dumMM+0a*>O9eZFM$)5)l5I7J(@Byz$ zjT#v2)oH?l3&xRbdSD@f%1Q(z5sXsoQUV5oW=07W=c8$aY*P zp9=;B$gRXF(g7#i_BQ8KK@tEDl}zrm@V8rmMJ>3OX90i~ zlmRy;xS%GF(2zt66buqX1`lY^10lwFh+_c??9@|}@Rc|sa41RX8&pwwWx!4i@F!3b z2OzN5Rt$(mmRV>aNZ@IY_^?8ogIth}10Ph=3wJZ3HbZKu$()L6F{-W_OslSr8tbgE h&WcN|w$_4cuCwgQ>npzgnv$@h21{%`$5Imr06UfCV~|rNk4`K2M2!*hs~b_Nd$}r2hp%V z4>=N_Hj^-DX%oRVB?bW4Opr~$0ia0`gc7nt zLXrp@a3C7s(?EYzqz9%cBzZsqfdc`|9vJF!rGc|U|7XHuw_uq&*pEHr#x5R-Q`heI-}`gqdW3h3T#52@OfKK!IW)L1gfN20aXdT7MT7pa4iBu?QW3 z0*dBPjG)zI(@+M0)BtzsByj)&UjfCyQAsV;6nf-!;=>9{3UWa(4t(ItpMVA`=%9oa eYUrVeCaUP7j5g}%qmV`_>7;-`TXzq`iR2XOryy5`}}FL(Tv30@%a1j_xd`S!t?q2 zK%K-ypT^tl^vB}vrqSc!@Akmn>_wl(l*rybo5QNp41ejE#mYJHHjF_CCpqZYbq@|0arm3o^s;!}{uCbc1vbB@6wz-|Uytlo-jkv(S z!o$49h9Wc+N5-beg)bvbH4%scO#rF~1gX%389+@XAJ^Hb4NU^xls`#LD=OyNrU2^f zk0?PC8ci1_e>x6f1AuKnlO_rdFlaKsi9Lf&d<;5};2?r-11c^&*nj}U1nUYISlEEl zHzzGBG*Bh6fBNa58|wI(zF77+9ClNr5H{ES+>> z z3k@8|^_-Kh_nas&@RShJ0Ye?C!*;N81Ce$eotSW;#|9figg}76L2%4-gbxD%E0%2H zrye7-g=z@1)JH5TQ;-3niAo-(38FTPxS_qCKj9is3wcnwumhGVW&I z2M!WQUV;-&jku!QiRLd7jZDA*RF4M@l(cU0(Gm*|@;m6jgouR{l_2E|Ayb7S;DAmP y2+Dy2Du`ey4nFvbgvLZjAtx4IIE#kFaM(+R9@ZCPE+CG0iHWw9h$16_0029HYj^Ab delta 687 zcmV;g0#N<^2E7J+|<-G74yw~3D^*Wit*Xr{=o5QBjyy>~*-*l*rzs(Bts;`t0@kX|mC>*XRHL|2dh$ z000000001!2mytY5CIC4jR6&ZO@f1jg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~ed zp`xRtrKYE-sj922t*)=Iv9hzIC?padw5S_GOeqhC0Zag&1_Q7wAxtA6!NZ;mOaZVk zI7~Mp&cvMn(yk{m6*Np1J41%T0Kx)HObP}IOae{a>`Wzs1_o)B`focDm5MYv^ z)RA@>if9u?pb1Yw!@3y|bl^b7X)>7*JRpeW046<~7+_+6z=BaKB0OkOBL{{iFSHU$ zm(J(2CPBS5QBYv!AeI7unoiP_Caj%Z1_(zHsbE2ek{&=lK!CtuY{h3~(E<=k)Tr8- z1m!xVStze46LuxUfWXAz62s~cpG`ZjTgZ`83owltHh$bte( z2@xIelcBn61tTi}Dc8{i85MTis9{0_1PCzv3Y-UcFo3RK!xmo3v2j|ahA2CIR3Wm2 z3=mL06m2zIX~GNZ<=n}(z*)v5-2y#oIDr7!m71w&K)qyOgb6xCtl$m!_i330wX&TE zq$1G90tztYSg?Q~=#-j)h~S`peFz02u&6}T8KI}4^ygm?0D>Z*e+3R$N`eZ$(x5R6 iKFCRg63$W~F&FkiVTSQ>sLO^PUJ{}$AdbjLAOJhO#?B!C delta 440 zcmV;p0Z0Ds2D%2YjRAil`2+v}0000i00000U;rop00;koL4t#Xg@%WSiHeJijgF6y zk&=^?m6n&7nVOrNot~edp`xRtrKYE-sj922t*)=Iv9hzI7(5aRw5UEaKo$>&0YCts z1_H1G9zX=ZhQh?13P1s{F(p&EO z1_HC>=X#7hkzP^0`PK$BGCXyLlhj)0T6~j00STuFEZ#>Q5paN3FH|lupr2Q z1k}1wJ5Yd{zaRvFFertC9Ss-SCN2vijDVnF-3$miaNr^}m_P;|5TsJT&L9SW7$A^f zl#L4yFudq6B1nG=tc0FD+w z0w{-4(V#ZF2orROSkZYb=)@S=`Gl$u2tSi>1r(4ukXj)HB$bix}CqF1OanR(1 z3W3?MAsCRL$;_Gw?9EIEV8DWg1_~%}B4EKfd+QDqSeMZWfhGwoopfU4V1*p>un};g zbx@NY_6!Up3Uc zkPcE%;3*-b0){$NhwY$c1|sh|Lc)Sbj1)bX$e1ue$KaUf3L^#(c5K;uXgx}93)N6& zsgFWf_K_q)6O}f&LD_mP;(h$dc=qAh^{06Xpq)#(5L delta 443 zcmV;s0Yv`w2E7KbjRAil`2+v}0000i00000U;rop00;koPJ)Akg@%WSiHeJijgF6y zk&=^?m6n&7nVOrNot~edp`xRtrKYE-sj922t*)=Iv9hzI9Yr)Xw5T9EO(qbB0Zjm( z1_Q7{A5BUy!NZ;mO#!etEln;S&cvMn(yk&rBq&WQFGGgH0K$I)O-%|03rzw}-Rw;z zf(8if2gd^Y@!ByMU=P7G0tMnR5cPvX69-LBs6aPN7=i%_nq177pxec000u0WXP|%r zCju5s>o)B`focDo5NML1l#zB7a%dAqzzI)5!@3y|bl^b7X)>D-JRpeWfF?bi7-(XE zz=Ba3BtST_0my#^CmggAN|(;(Gbcg4IZ;qx<{*{=noiP_Caj%Z1_(zXVL>EDiXKd4 zOqif!Y{h3~(E<=k)Tr8-1m!xVStzfl5O#eeiO|Gh5X0&apG`ZjTgZ`83owl - -isAdmin()){ ?> -.gif" hover="images/menu//menu-home-over.gif" class="rollover" />.gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu//menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu//menu-admin-over.gif" class="rollover" />.gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> - -.gif" hover="images/menu//menu-home-over.gif" class="rollover" />.gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu//menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu//menu-admin-over.gif" class="rollover" />.gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> - + +isAdmin()) +{ +?> + + .gif" hover="images/menu//menu-home-over.gif" class="rollover" /> + + + .gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" /> + + + .gif" hover="images/menu//menu-sushi-over.gif" class="rollover" /> + + + .gif' hover="images/menu//menu-admin-over.gif" class="rollover" /> + + + .gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" /> + + settings->reportingModule == "Y") { + echo "      "; + } ?> + + .gif" hover="images/menu//menu-home-over.gif" class="rollover" />.gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu//menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu//menu-admin-over.gif" class="rollover" />.gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> + From b0f7ea546626c5cddf61765432146f86f7805e77 Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Tue, 3 May 2016 09:58:21 -0600 Subject: [PATCH 35/52] Moved Language Dropdown/Main Menu Images --- css/style.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/css/style.css b/css/style.css index b8e3b9e..9ee8361 100755 --- a/css/style.css +++ b/css/style.css @@ -399,7 +399,7 @@ ul.tabs li{ display: table-cell; float: left; position: relative; - width:130px; + width: 166px; height: 19px; } @@ -799,7 +799,7 @@ ul.tabs li{ display: table-cell; float: left; position: relative; - width: 150px; + width: 166px; height: 40px; } From 8d6adeebe1b3e01935b38b9018cd44ffd4ad9e0e Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Wed, 4 May 2016 10:36:25 -0600 Subject: [PATCH 36/52] New French Images --- .../menu/fr_FR/menu-reportingoptions-on.gif | Bin 2164 -> 1193 bytes .../menu/fr_FR/menu-reportingoptions-over.gif | Bin 1101 -> 1190 bytes images/menu/fr_FR/menu-reportingoptions.gif | Bin 1106 -> 1193 bytes images/menu/fr_FR/menu-usage-reports-on.gif | Bin 0 -> 1210 bytes images/menu/fr_FR/menu-usage-reports-over.gif | Bin 0 -> 988 bytes images/menu/fr_FR/menu-usage-reports.gif | Bin 0 -> 1210 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/menu/fr_FR/menu-usage-reports-on.gif create mode 100644 images/menu/fr_FR/menu-usage-reports-over.gif create mode 100644 images/menu/fr_FR/menu-usage-reports.gif diff --git a/images/menu/fr_FR/menu-reportingoptions-on.gif b/images/menu/fr_FR/menu-reportingoptions-on.gif index 15d877458302a0442c336f1c3af7f0859ba4012a..3c664d5610847a53e1334487864767f9329ff53c 100644 GIT binary patch delta 1087 zcmV-F1i<_B5UB}&M@dFFIboUrC;;XF0KnSloW|TzmAa_S;Oq1EV5!T1xYJId#`XF8 z;qCO+=kRf`&&%NKwbSH|zt@w;-j>PVVy@5B>GI?8_OsaMnabZ^thn68!mrlm+?XJ#Od_-n#41ejE#unD%FV3I&e5gN($${SM~5FWP}bgy)H8!0D_V`6Yxr?qC&$1 z4iFGrfWX?$Y6mGupfmx3r-!Q~hMC}iXNZCq5U}@d5KOCdA8`nR;Yo-L7%KQR6n}W| zN~nYo3|L(6z)H4M96+x^5-R|QJbhXp;Gp3kc0bJ{1W z7fsaIW04V1Vv}+Sb(VA5m*qx52cp6!yy9@(9~Q|5k+c}_{v^9^zyjk-aKY;yjPN%KFKkW24od@Z#Li4iu?8|0Uu;Yu F06Plw8KeLJ literal 2164 zcmd5+X;@R&7QI16MZ~~swTQh5R-jKZ5T;y3AOsX86ax;=p&F7aq>zCmNVM8Ah@enF zWe^cTCPicrs6#~wBn)8?1XMtgKp6!@Br=K8geUg>c)Z{5eD}NeoO9P&d+)Q?cec4W z+Yo7?fC^`MA4QHe#PFK6qXFc5+rWDj$_kKWrZ;YVJKRYJb{4#x7{Q)!6NlTKU7Z zs>eN}qK?6txsTGW;pnoqKc4q9^BN9hOQRk=Z|NILm3EHEr@KbwT_cKTVsdtFetw>q zQ~~@S4AlIJeH3?)OcT%)-z|1RE{*OB3qUW}o5{9Ck3A?ugG`1kdaoq~N8vicKFsYW zc(BI_H&6NrUpkS2w%ZDB5kf*1mjw%GppfOq=0ieTG>yUWf+59Rxs64G3lM>?E!si( z160OzdJ|}l!&_o;1S|n(W=?=CaFB&L_<5ie(Rhrb z5S8rwIhJB&i}n!+xDXZ_7#N5NBw#o^Z!DfjBw}&qSaWkT1;UJfoGqXU&DeaSMFld< zr}LOx0h7Z9m5MYkPJqA`t;qD>C9t?(WZ8VoLOB>ZhlLf=xL7;}rz~j^NTK|1D2w$4 z%@ww4QJ+-@AL~_mbkG+l2-BdAD+J=G?fRot2r9el0EaYRZ-5%So3K6XN48UN|2c z6a8CM+WLRXQuRS1i}k)KFJbU8aHn0Mv}?!acP~ z`BvWAfW~}~ibv?_uruKiXU|1O{T3Y)8yRvwE3>`lh6_HFbYuD zH1Tu~3Qk9;`HULKLsa!Z2YVaPhpVe%Itd{}-Vs1B$=GoH{#gHKRi^9h$w58#;u_Mx z4mY9{6NC`R_taiQ`_~3%X}zLtfnu5v31ONz_j7JNL4v7wYn>n`Cc;!pJ35{;_M`;m zG4HqGzQ2Q5dxf2rnxO!6sJJNC-+sKX2v7mkzH&vm1NL1}hrf-h{0W(bx*WF3_$rC7 zyR}^YSZ!aD43Ma68@SHQzG=-^Woc5Q>mRJ5UaH!1?bLG-fKoruuJcW-?yyutqLCLz zY~`WqEB1bPv+j;VgQ<42b0D$OKIBep_9&5B1tF1IXxJ+wJ5%qxNP+yb( z6s78=mmw0_5-z6f)!X{)V|Gd~b_fn~$|qJ-=ha0Z&OoKzbOHRaI5Q#KcZcPFh-8zP`StrKP5(rcqH*wzjriR#sMwjEvme+=+>a@9*za zR8-K=(6qF)P*6~0WMuB{?v0I&-QC?{Vq(qB&8)1fTU%SCq@?xr^^}y9=jZ2RV`IX? z!f5<&Nf0_U&000O7fC5H?goTEOh>41ejE#unD%FV3I&e5gN($${SHHRN7F4o?Q)FFc(HWWr3899gp2t`E-3yTTy2LPo- ze*?t}36qZ)gBnl-IfvuHp#}&73}R3u9-;&ZQQ;G2ph$s!j{X?|;e&$-5Go)Ts%W4P z0|JQ(6j69;Vz2-fF*eeu;m3mv5G;r+)Bt6niVFY`P*5bIJACzwBsky>o)G{D7*1T; z^kSg_O(!lOT7<#Kclfrtizt+6M3_vAe>4~*wktodNB@hIghXxaju|i>Shyi!Cm{w0 z45BpbeIkqFd%OgtN7kABT>6R0fFA*$@w)%1FIFXKtn91$I^k>`Q+gLAXI&a5Om{NmPkcb4b@;}>_G|N zLi6QkpLH?j2b?1%7(s&p9-P2K3?8I#P((&BRMKa!T{ID6jzLDih)T*O)J684mJe2- zArKg38V*9G5h~?lKs&GHQ&<6Lg&DwYM m_W(I2oOR!b_#lTxEg@)aXj65%%(qWEGf)OhkOxF;GSBQ3I=3$DBCqEarp^uAK>y_w95@4kcR%P+qE m{#$Rr0;5ZC!QUK=ur&%V5-d%_4m$&J#L7%eu>&!I0028eht$ph delta 926 zcmV;P17ZB83C#$9M@dFFIbnkUC;;XF0B&w>qobqQ+1XN+y05RV?d|RM_V!+0UVMCf zXy1Kfdp`o6ho|l)Ga&mIJySv-l+i!1gQ&Usr<>ln$+9>p#Kc!uS5;M2Y;0`z_xJGd@agI4zP`R)`1ts?wziCnjE;_ujg5_B zVq(e3$+Wbz?(XhnWMtgj+*?~)@9*!4iHXqA(B0kLtgNh5R8&@0R%2shrlzLn=jU*6 za8OWC_4W0orKO~#q|MFEQBhHpl$654!jas*e}e!h000O7fCEN@goTEOh>41ejE#6oSmMZiJPFKq@|9crm3o>sH?88m#wg~w34;AxQMd3ysx{xz^1>! z#Gk{($e72;%#q8@(2UPUHisKGJ<-Y2C4(C=6-FQvLxurG=;#FsqX!6w00QX*jO<25 ze*v!35`!NwDdK!MFjoWsApr&sd^%ttUm*Yn1SnKcV1Xh61!(OXq(KA+92#UiAZTz9 zf+F@h0l;TSfPg|L9Ufwkan?p7A4WKs@F2s;Lgz{vIms@70d(|M$}1w#$bqE^-eEjC zkI(^@g#;{6icTVdbocTZMQTK8fg%YEe~v9e@6ogdM*niGaN!^W5DPyE1s!xCLBf;t z6cmB5vH$`A1sE6+Pyj&Rj9(#?#cC3zA)18`CpJQJ5I({5&IMSR-~hx14B>u#cj^%a zAs0C8aBv|2UV`b+zH4BB(1NXO2N6h!^(2JhgI3BMYPk^R;6{*l4%?unkp*d?f4ekd zAVFJ5(=b#pP?xstyo2_hQ_MLxQ|0OLHCK)?Ic2AV4gH31B`O;cVp~(mh6S$9 zT8paM#A*brvPMH|to&Xgs*A6{5~6Fcy$nn2sK@$hY_hL1yX&&f!V(AoJBhcu AF#rGn diff --git a/images/menu/fr_FR/menu-reportingoptions.gif b/images/menu/fr_FR/menu-reportingoptions.gif index 9601fb45e33812dde813ba0859b46f19858e832c..d9d8232b99fb165311e6082cf6375529b582144f 100644 GIT binary patch delta 1077 zcmV-51j_r;2&oBwM@dFFIboUrC;;XF0K3oMleNyFzSL5cy6W)tPmQ*8p~5(Vu=V%) z-{|jRm%P*9>c`mSuE*JgtH^`2(9YrQhPKg4lDmhu(x}VcN07SS>+^}Y($C`U-|X|; z>hc_SsVIJ~B6_SNd#ojVt)$4@A9<_NGJnBhO^-8^L??-^Z5IIvd%1kuV|#kjJne;fv|O~%PWAdYNf}~ zxz*+N`uwyG(&M7X+-s)C|Ns9RcBzvQ0eq7n0R@wd0S$ke04M+e2mgQrRD*IgBwR4R3A%7hyn;xQwa)- z2k{F4rBi02VPe(#QcugclDoh%D3qWub}+01!wpC89fg^{5>v~HN~oej!vYQv5L|%3+RkbR zEl8j=0fMK8sU(J(;DBd{f)x<3_ihkOt8^cMz@Z@skO>+t_%#%G@JgtJ5C~XY@4!m7 zQyhOlr$Q1d0Eaw%S{LA;;UIQD%^Sk{^z|U=FdZ^rP~Ixm@xEh5q6VUakO&zdr`%tI zG{9OR3N$1XA-hor07-)owjg(MQGrlV`49qtV1p1K08DXBk)Blt03eh*Px(Z}Zods8 z6nptCMn#MJJ<>u4Ph4<<5j8N;ghA;!VA6kN?olC~gVwQ>p#OG0K{yCi;2{(pd6y+p zkyS%IXjywx#MwRcHtZ78!?wTuFsW`54d+Z21^g09s@QfEyLMc{L_bGBM(W3KCQxfeC-5 zmb$_r0ua#DTu>23z+4P9kQ7z##4{mDxXwukh(zVnRsz6LXkSy71%-gDCDGcMOK`#K9*poe3NICGO~VdL198O8OiZx`G8SKKOdtR|(RmDD delta 989 zcmV<310wvX3DO9EM@dFFIbnkUC;;XF08fp!leNxLmAaw6)YIVV>hSgT_xd=3uws|I z-{|kV&);;R!pGRc#HiolqsK~R?;(oHu(d6!b>+|?0eXXp`;5dl1^Z5Je z^7nnQ&TXg2D}b-lES_vP>P zpT*nKu_uCJG^u(Pz1wYRv4vbnsk zyS>1szrnv@HR8xNeuG1BR8&4wQY)CLS1ppxe1`d2WU?5*100sysTu^|4q5%bH?HlCc2#FI? zm^dJ4a1eqi_BsK;XNUlSLMI&_Qjl@hMk*UjNKoP+!^lGCN>Vw=E`R}a^j6B7B9Y30 zr3v0)JUWli0hWabFi?t4;(&Db@)<=+MQMR42@HRZokH)?v>8(lk^r$d9bno0ssXRP$5tNK;MjCAC$#v5~U%Ug%2mDLURy4!Sv1rSef7e#0Cr- zQ2F}q)FTc>F0jC%;lc#G1k<5?*T4WF23y$<8juj{$p^#-t&};`av{vZSNrZ9wn0rQ z4AOr_cS*%Sg0_&RarmG@LWbJ6^A6g3PBCZQOqZ|6=X^Ov<&>QcHUwNgm7vt&!`&dz zImF!pOA#QHG><^>K@t-zfy50_G%*lR1q~-$0|^+iQd`7b<-* z6F%1crk#N=>1BXLt~ufZ6*b5Zgb+luFam!NBpqY`0H6(3z^?#>0f4|}j5(G-0SAC;2mpklqb8qI;CRv$BK}8JQf9uiR#R&-V#E&-P|)e8FF0|Df2NR{%QQWu z=0}RDxS(1JtE0eLi>unyN(HU9MuTgv&FsqSHopd|i?GBJ;%l+J9E$B3r5(of0jvx0q diff --git a/images/menu/fr_FR/menu-usage-reports-on.gif b/images/menu/fr_FR/menu-usage-reports-on.gif new file mode 100644 index 0000000000000000000000000000000000000000..1061a1a3013b38bb497a0074c3d02b7711084450 GIT binary patch literal 1210 zcmdUs`8%5j0D!+FpHv)0Hb^II zxJKe;F;Ou}i$q9B5VwZ9ifCnOTDL8G+W%tj5AVd_0f3r;`L(w@ zA+@3|>1uKB4AeU6^Qdh?wz2TnyRE&0Z<)QZ?4jn-CDFY6LFZ(VXuf`YqeKqDd6P@UUbf`-Dw^7uMzdVTo0%fHBQP(2Npz2ZyZZ|1dHoyTYH?TRa{Ar z8&fdxdUN~WP%3}NdA@2}$jk4aqwr@gSMveyD|lS)uPCzk?@A0(E35#Z$0+K ze0-y%3n6)(SWVf5CFEbSlu6U7-R8CZBIm?d;RztJ$%H78dn6qo`Y@c+Sh z5Bw1O<$J$>0vu65Nau7yMrIa~M7~eSe()=mmXn?KFpr*JP*{}nsJN8DEMu0GS5?>4 zrdQV0|It8Yv70zekDFVcl()1!>!3gFl$ z%u-{x8+Um8x_CQ6nV_Pt!cE)&m;g?d%(2x5%4`7@_*us>bh*8o6~=lo#3YNNVy*10 z944IUb1E~BOpZO+|Wj<;yQTd_J(TI-F}(4|m!EyJk<)CKZMUkGB_9dQvMduex`_D=r)~i1h+*vz$$> z1NADx`9?aLCa(V`Z%Nt{o3CEZh&sLu2Q9L9|ICU%#jiw2b;Dw=z@!TSc|zB|jsk6l zVFXZ<5#+oon6uyiSTf-TMh4PJ(b=xUQKx)HgsPyH38;Av>(#BuK%Krx4^f+HxtfTg zWcg~zDqFtCVbsfX^9Yt+%SPsC9zFN`Y}2&ok0&HRZUov4O1*Igc$tQ~goY{E@gZeO zS+h0dQFeES4ydM7p>I~ye;pWuG6bd>rl+k&@1ZfI97hfbIZfGv@C3Y?npD&GjvLwB zUJ#mur&1y=5>?EJ5?(1Pdw;H2rUqdVe<%8ZNibh)fB$Rs$#lP99U9h&kbgUmd@uWl zNgrjXZs9FMe zb%Twr>J9e|?kf`(`y}!!Ia^Ep0xO1({>&p*w+9hSY3$IC7JCXl4M)TY$0#0W&ZYu@ F?SDkS1|t9f literal 0 HcmV?d00001 diff --git a/images/menu/fr_FR/menu-usage-reports-over.gif b/images/menu/fr_FR/menu-usage-reports-over.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e257d9a1e8f3cb9acfc4fbc203b37fa3e96b277 GIT binary patch literal 988 zcmV<210(!LNk%w1VWt2m0M!5hudlD|?d@)EZpFpLqobpWii%Q|y4l&;US3|~dt@gM)*eot<-YbIHlcRaI4=pPyP-hZmuJ8M=e1C$2OM!%kh=z!Ze~OHcc#e>hZ<3Uk zXqK3pWKbnG8b%QtMFcyirvU|Rt57=t0y_jss|7m(00BI?QMI>wP#Y)+MlU<1ze5KK z#ApWtQLj7$vq;ZHyi(VhPZkg@DMcC)5y%2W3p=f60nn}h2m#GU?by0f_1sM%AUZfV zFot<4Ix@QNMxZ!X+sPSc_s3I zEnK>I5m0anzz~xl5wv{CL*tJB0JBUDh}fkGg$WgSV5nhX2!ab3%{fiL%$5TlreOVC zAfR3VSv(HJR5$IGEe1pC0ZPys@D zIM{JDP7@go9t>eIVu%X}5(<8_7`4c&SajD;e9I%c_0HxrA zgL&kQsY^iux<_)qL`|fxsi?M{IPzeEh=dLzR1BbSL}lWX0~*wfRn1^N?zY?Uoal}L zO$ETG9Uu|_xJn+vZ|T)lpyfFN*=v&5eJeaQyXjHU1P$}>5W@rk35>PMP=FbXfa#k69=(=81F_^uS^!jyl+i|L-ei$ZrzlVj5vH7! zo=;*~X;GKD%oLGBc@D7WE|dP^6HvFU6d)5e4)H(*7v!J?cSdx`Ngkz!!D#t|v3hb~-2utj-MHq`LvdS(?Y_rY+3vIN$PD|~p)?T|ww%T68ZMTzr K3+^L900281F2#EQ literal 0 HcmV?d00001 diff --git a/images/menu/fr_FR/menu-usage-reports.gif b/images/menu/fr_FR/menu-usage-reports.gif new file mode 100644 index 0000000000000000000000000000000000000000..a9606e12efabca7165bd7792443f7ab662018256 GIT binary patch literal 1210 zcmd6k`!|~h06@Pl`J_@*q&haW#k*QeTa0-uOe-l)QKfX9N7u2Pb{^FtRp%oKNyNmX z($ZGq9TEu=@AoTSC0?arv{Mz@t!f9ww(N9&Meh&y=X=ieAfB~%2rCDU0j~gn+cAAU zvtfN>t95)SS2E^zuO*J#GxdCZN%3}TXU{%W6wYp|kv@~otx&25xzYtg5}(;Jb&_1$ zJhPHgKYlcxN0G?9^4i3c%VC_}zJ;}{wi#k}OK4HA;@!4MlE8*qH@))Ki6PnA-S3=R zecUIHsT#T?eBztmegYPf#WLCQ9}QE>7O?PGat*6(#+qDfK&rM+7yIP5SB@+;PQCQZ zZH=oQHcb-j?*HRRm$+m!Sf+@&ba_G&&=LnfYrLD?2AMH8-Dq|3N`v&b^04 z9Bwi9aY=baC68QIC8!ay_@a7oeVwGKxumhBy@TD>+0&cR-6tI!7#!&w9vyEQlT8UH zr)Mjl&dryyTy)LTv@EC)VRaRO61-*+0FVGNUZV&gfFSN>Z|$_QetyXcr9nBdN|Zi< zgPTbKvlmT1wbq>Ib^F`+%ILPD2Wez@P(s6iVSt+&OYCR@6gvV3AshE;Y>5le*1=9* zi|Eh7o>UF;2^(A(ay6d?@$q=qHsor7sg?+XPE{f6mKH{6f?peZbAz4FMe;7v$;?9} zvu)TpX;1lHix7RN3s)a{M0~f<{R9^LYgB_K=lQ1TXy-h~gkNP*(5?(qe;DREA0Uo) z@3-Rc-r#1=QCfBE@6LDBQ8N$=haW{z-#pQ~{?!dPy6w{DNCnPyy-dw2VnD+;eytmX z%wk~ZCjYDv$zL~)Jis}ui6i_=+LE;4e7Uz_mv^#I^oe5K=}&~ zy4i$&UP2E~Mya#pKX`@?7MO$8D zhpNvt1|^`G>Dt)Uvc~V-95jk`@+sCnD>!p(4?E9kv3}nBCleWv7m3w{Q+_xFET_7i zL!_vf>jU!~GfUg4WUK={$6ZWE%`5bdgx~Mw2dW%y;?UF6;)cAf>KKS9gUzwa zp6%R)`Eb(SpL!cz6&s!#-D`$?ktyoSH_=#)Z}`!D*e|?dbo!AY%-W96qDH-?pI=4B O4o)+@PT8aYfa8DLqy2pV literal 0 HcmV?d00001 From 5329127be8d5116567cf78d3ad68b04cc8089a55 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Wed, 4 May 2016 13:34:32 -0600 Subject: [PATCH 37/52] Updated French Images --- images/menu/en_US/menu-usage-reports-over.gif | Bin 0 -> 1817 bytes .../en_US/menu-usage-reports.gif} | Bin images/menu/fr_FR/menu-usage-reports-on.gif | Bin 1210 -> 0 bytes images/menu/fr_FR/menu-usage-reports-over.gif | Bin 988 -> 884 bytes images/menu/fr_FR/menu-usage-reports.gif | Bin 1210 -> 1100 bytes templates/header.php | 10 +++++++--- 6 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 images/menu/en_US/menu-usage-reports-over.gif rename images/{usage-reports-button.gif => menu/en_US/menu-usage-reports.gif} (100%) delete mode 100644 images/menu/fr_FR/menu-usage-reports-on.gif diff --git a/images/menu/en_US/menu-usage-reports-over.gif b/images/menu/en_US/menu-usage-reports-over.gif new file mode 100644 index 0000000000000000000000000000000000000000..6211c99ab6b5ba0920dc246b1cf79b1689331559 GIT binary patch literal 1817 zcmaJ>X;>3i6rF5VDhL7! zf~EqpX#rUT7ocuvUC>&styU51Qd_iEyV#8;RL~!#@5h_>?woV(z3-jxMMMdM*{~jP z0j>i;TU%RRUY=5^Y-(yU7z`qjNUzs-cXuZwBve;dmzS4|#p2r9+M1f0o}Qk=hYy#P zm7yrA)9G?^bG2G+baZrle0)(+kyI)zEG&$SjBIFVsI06s8jV?5SOR$pJAlarH~ znORy|+Su3_5fQO}|NfGalHT54fj|JfHOQkj%SEvuAI4zQH*|p(g(WEn28xljawUiI z>{uTKluJ33WkDjk2<0I%d8AH_EYU5Fm*`R?Y$;{Idtj&*(kf5|g2A9xu}-Ohv>Xa7 zRf!SEv^Ixn6mSfJrEnYSPuKvk*N(im(un@0Di`TP5s z5Pq7CN(|QeDK(zs3VcK(QOi+Gu2O<#MOds##W)mGrT?~|Kqq9C8tPa(REbJK)50i? zL8Y5p8V8C*{|{9tCeRuz4tZ1We+p~jH=+nF4$-Jm)e^)6_cW(MA)Xq6F_k)ArCK+B zim@^krqak%D9GcDof_yZf+cdLIXG{OB@#hVN(}}pB}f#XLow-4<#H($&gA-Y`Rs5y zn-$1l2$<|(HjmAtvsl~!K94Kpj&u1cNvZ--V&h!t8!mTJuGtU@)RdWzsO1|FsZgy_ zfMbnA^2uuno>cEOS2}qu>`A#aQ!zC2^}co8;~|rW%*zS$nl=;mN0cVdt4-#{jsE@D zpMU)R>bGBi`T6CGpPv8t?CHo4-#_{8@uP3! z8N7Vy;)T!7pBp%P=JctPpZ53lo;ZH&XixW%uFj73!)>iCpBy^a+|<}mf1s|mX8*^= zeS52`_Ec8v-c?>!y0fHsM^WMSZCeZS^Kx^tvog0B^qW80l##C6s7>3DifPpAQI%4$ zE+ttmTe}94O2lx|hl#6KeXw%H@?}dC;+Mp|9~-k+6uoF+RAhuuV7kiium$gNLPH>S zFpC)!7~s#K)2M#FKJ({!&wY1}mnVe`&h~JhvR`qCr5{OrrF!sPPMU~Vr6MT zA`htTMeODT=g@;zQ+&sA9!icVKs8t(H z-81;OV`arHr-C52s{qKvCvH*pt(7@i$XK8sS>W!iN##w|uGaBv>L<^)-hfaxxfLo;N9hw#p`+Yj212-EmGxOh9FH#$`2LDVIN zH`D-OM{!dsk!g5+e<7|#eB$|VQl?hsFlu8)fVJ^>Hw?t<{rE%&Y4@Hae6odL5Z@@cV!T^u z)qa3;ZC;k)6dXd>=EjW~nA35ob?I$`(Is>H>ge6zu$XA;5OEo|H?S7SO!A?5Is5P* z2o`o@BU*Y=ZWdt}J1);Pv^~eo4(S<$j`&3c=Z;f%NKo|9R-crN;(oss7ZdK~@QGPY b)|+P}pShRkRW2LO_dd`tT;OJb148}*Q46Bw literal 0 HcmV?d00001 diff --git a/images/usage-reports-button.gif b/images/menu/en_US/menu-usage-reports.gif similarity index 100% rename from images/usage-reports-button.gif rename to images/menu/en_US/menu-usage-reports.gif diff --git a/images/menu/fr_FR/menu-usage-reports-on.gif b/images/menu/fr_FR/menu-usage-reports-on.gif deleted file mode 100644 index 1061a1a3013b38bb497a0074c3d02b7711084450..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmdUs`8%5j0D!+FpHv)0Hb^II zxJKe;F;Ou}i$q9B5VwZ9ifCnOTDL8G+W%tj5AVd_0f3r;`L(w@ zA+@3|>1uKB4AeU6^Qdh?wz2TnyRE&0Z<)QZ?4jn-CDFY6LFZ(VXuf`YqeKqDd6P@UUbf`-Dw^7uMzdVTo0%fHBQP(2Npz2ZyZZ|1dHoyTYH?TRa{Ar z8&fdxdUN~WP%3}NdA@2}$jk4aqwr@gSMveyD|lS)uPCzk?@A0(E35#Z$0+K ze0-y%3n6)(SWVf5CFEbSlu6U7-R8CZBIm?d;RztJ$%H78dn6qo`Y@c+Sh z5Bw1O<$J$>0vu65Nau7yMrIa~M7~eSe()=mmXn?KFpr*JP*{}nsJN8DEMu0GS5?>4 zrdQV0|It8Yv70zekDFVcl()1!>!3gFl$ z%u-{x8+Um8x_CQ6nV_Pt!cE)&m;g?d%(2x5%4`7@_*us>bh*8o6~=lo#3YNNVy*10 z944IUb1E~BOpZO+|Wj<;yQTd_J(TI-F}(4|m!EyJk<)CKZMUkGB_9dQvMduex`_D=r)~i1h+*vz$$> z1NADx`9?aLCa(V`Z%Nt{o3CEZh&sLu2Q9L9|ICU%#jiw2b;Dw=z@!TSc|zB|jsk6l zVFXZ<5#+oon6uyiSTf-TMh4PJ(b=xUQKx)HgsPyH38;Av>(#BuK%Krx4^f+HxtfTg zWcg~zDqFtCVbsfX^9Yt+%SPsC9zFN`Y}2&ok0&HRZUov4O1*Igc$tQ~goY{E@gZeO zS+h0dQFeES4ydM7p>I~ye;pWuG6bd>rl+k&@1ZfI97hfbIZfGv@C3Y?npD&GjvLwB zUJ#mur&1y=5>?EJ5?(1Pdw;H2rUqdVe<%8ZNibh)fB$Rs$#lP99U9h&kbgUmd@uWl zNgrjXZs9FMe zb%Twr>J9e|?kf`(`y}!!Ia^Ep0xO1({>&p*w+9hSY3$IC7JCXl4M)TY$0#0W&ZYu@ F?SDkS1|t9f diff --git a/images/menu/fr_FR/menu-usage-reports-over.gif b/images/menu/fr_FR/menu-usage-reports-over.gif index 6e257d9a1e8f3cb9acfc4fbc203b37fa3e96b277..5dbeeed5f89b09fc4753415c0781724ee5677f61 100644 GIT binary patch literal 884 zcmV-)1B?7eNk%w1VWt2U0M!5h$;ruYZ*QxstCWqdwY9fVPU|)z_+)zudlD&-QAd&n99n^adC0W%gdacoY&XaT3T8F00000 z00000A^8LV00000EC2ui0Hy#I000L6K%Q_&EEKb*(&_!{ebQ}l}YylDfLxUt1#Ft4_F@KB_AvkbRn}U)jje05Mm+%G)(Ty8Tk`vs7`S{dE`=Hz!wjuhR)$!v_pViA_WTMh-F zKufxaB-0)eJ(WoTJ~eoei#Ed`CQ5d=h$0kBKK+(RTRgCoK!crpQxJzDB2v|O0ygIb z1SD|KLV}sJ$e4e32w=bhfwZ$jTmXzD4?619Xiz!o?QlRTL)c-DZ4Jd#kTwRWsE9z| zbfct^K7qMVLk|_EkB(hHkiZ2lT%lSK=&_>bo=MzEM4o&G8mOPS*(Kdt@gM)*eot<-YbIHlcRaI4=pPyP-hZmuJ8M=e1C$2OM!%kh=z!Ze~OHcc#e>hZ<3Uk zXqK3pWKbnG8b%QtMFcyirvU|Rt57=t0y_jss|7m(00BI?QMI>wP#Y)+MlU<1ze5KK z#ApWtQLj7$vq;ZHyi(VhPZkg@DMcC)5y%2W3p=f60nn}h2m#GU?by0f_1sM%AUZfV zFot<4Ix@QNMxZ!X+sPSc_s3I zEnK>I5m0anzz~xl5wv{CL*tJB0JBUDh}fkGg$WgSV5nhX2!ab3%{fiL%$5TlreOVC zAfR3VSv(HJR5$IGEe1pC0ZPys@D zIM{JDP7@go9t>eIVu%X}5(<8_7`4c&SajD;e9I%c_0HxrA zgL&kQsY^iux<_)qL`|fxsi?M{IPzeEh=dLzR1BbSL}lWX0~*wfRn1^N?zY?Uoal}L zO$ETG9Uu|_xJn+vZ|T)lpyfFN*=v&5eJeaQyXjHU1P$}>5W@rk35>PMP=FbXfa#k69=(=81F_^uS^!jyl+i|L-ei$ZrzlVj5vH7! zo=;*~X;GKD%oLGBc@D7WE|dP^6HvFU6d)5e4)H(*7v!J?cSdx`Ngkz!!D#t|v3hb~-2utj-MHq`LvdS(?Y_rY+3vIN$PD|~p)?T|ww%T68ZMTzr K3+^L900281F2#EQ diff --git a/images/menu/fr_FR/menu-usage-reports.gif b/images/menu/fr_FR/menu-usage-reports.gif index a9606e12efabca7165bd7792443f7ab662018256..285a71b11fb5cce88bbd7dc14cbe113e26860402 100644 GIT binary patch delta 936 zcmV;Z16TaI3Csw8M@dFFIbo&%769e|0ItW}OMRzwo4b#%%AdQ_VT`d>g{(exp|#E7 zroq^LqQGmEwz$yam$lAnm%4YM!CQ>7e5Ay?)8($o-fWq>eWk=$im_gfw6@RUo4eGJ zw9lNo)V0pyU5>M-!`fw(xJ`nqvdrLytI1V}ub8>gsKwi3Ws|pUn!Gk~pRdW@hpozI zmASFY-&~EeREMv1pTJg$u%N%zs>a-WrNnffzp~5Vp1sw9sKzvKo~_8;yVB&BxYC}z z)_J1BN`R`U#M)kuv_5yEw9Vm?w9kg9#V~E0ywl~8@tl$Y50i}n4}TT_00;koMuLNc zg@%WSiHeJijgF6yk&=^?m6n&7nVOrNot~edp`xRtrKYE-sj922mOVfrg%2Hs14XyD z0R*JGk3~cPMFWYu1VsQu0Y=G?#mB8iEjSZ}7Dctsf&~W%q6GqwzeWPXhu?(Ek>}8Y zHVza&gf$Nj*Z_kGMSs1Z0pPww2m*9F)DNAqNCnw>0Fi+N1qOp6%qV2*o}hfYh~O%K zAXtH09E}9nR>VL8K?-sWGiCr+5sn{AS{$UYq&Ptp1^tRyz!)-R%my5|MMO}|mk4P&H1gBAeZbAwUBDfjZqGTh8fhs#-VDRdqhmX}B z#MqW@;+lM{7=OgTMGO`fh8W6;8K-~+M1z&9m{2|OeoJ?w9D2a{xB`O$IL~S1c=Bb+ z5Wv$t1Dr>cd_KKLPGR)=1<=O$TT~q{Zw&9jdLV_eU z;vfouC`f&SEY%@`$0T+TP6sTo;f&D%Fx`s^@Q2+e41Yv$LJ5cP2iK`y0tf^bYfb@> zKwJ8VCD$%eJ(f)Yel>ZIMgt)yPKNl1BN$wM{g+H@MzEzolihq&6qjNmQ`v|@Ht2~C zCIpc~lG(J$oR7B%V88;wv{XcF0gNRRN-EW9R7olpaX>kP*kY4?O~qA|Mh2*M@dFFIbo&%C;;XF0HMCrPmQ+f@b$aT-;=e@QkA-Np~BPP>fh+^ z_4oQXg0NzjyspRD$JphBtH`0p+#-6cjJne?gR!~Q<$<%$9CxXNwa`qIytLBeVW7jr z-06?J)k%@MV4uV2@%ANrtu%$Q)aCCyinaCm`@h)dp2XU0ajMCCugy`Gy(@sPgS61l zLnZKsV-B+5x!`tW`cdDDi*|pN+oy6Ly%isV1{~LCxk@1|80S1$e0S|vD z000O7fCWi|goTEOh>41ejE#w%sDTWa& zg#<|F=K=<;>yStQ0Z0Uj>jp>x00MtW`H}VayO3(+kYI=el5+nB9Y~-c)qw$#-X$3@ z57EOy{3Kn>_UOU`BO(g5h!6o`0746pv^ymLqB{Tz1T;j{5~DszH90ogu>!@95-|u_ zP+`d2$w4XC0YG;^LA(R!nkEsj5D9_>gBYZnXAc27Bu$}OJxXY)Rf&U)4tjql_JBQn z`v3S5NN^6oAhTc1IwRvY(Zug)^h;Qb!cb_B9ga8B~5NN;w4@Govh+4{}H9!M(#Z!?{IeBc1eGVDL%(xd1sJ}XhX;lM|c3jp9zin-<;~JI!4L_`K#1bD&aTmn{ aUyQN78gI-^#~xz?a>&$-Ofocq002AH%>^R> diff --git a/templates/header.php b/templates/header.php index 32cd281..955de51 100755 --- a/templates/header.php +++ b/templates/header.php @@ -166,9 +166,13 @@ .gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" /> settings->reportingModule == "Y") { - echo "      "; - } ?> - +        + + + + Date: Wed, 4 May 2016 15:26:28 -0600 Subject: [PATCH 38/52] Patched Security Hole --- user.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/user.php b/user.php index 381285b..236babc 100755 --- a/user.php +++ b/user.php @@ -56,6 +56,7 @@ $authURL = $util->getCORALURL() . "auth/" . $addURL . htmlentities($_SERVER['REQUEST_URI']); header('Location: ' . $authURL, true); + exit; //PREVENT SECURITY HOLE } @@ -107,6 +108,7 @@ //if the user doesn't exist in database we need to redirect them to a page to give instructions on how to be added if ($user->privilegeID == ""){ header('Location: not_avail.php'); + exit; //PREVENT SECURITY HOLE } } From fb9c6d58be2ecca9224cbe3796f3a9fbecda9be2 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Thu, 5 May 2016 10:50:39 -0600 Subject: [PATCH 39/52] Merged V1.2 --- .gitignore | 11 +- README | 85 +- admin/classes/common/Configuration.php | 66 +- admin/classes/common/Utility.php | 270 +-- admin/classes/domain/ImportLog.php | 371 ++- admin/classes/domain/Platform.php | 2106 +++++++++-------- admin/classes/domain/SushiService.php | 1677 ++++++------- admin/classes/domain/Title.php | 718 +++--- ajax_forms.php | 1 - ajax_htmldata.php | 7 +- directory.php | 2 +- index.php | 3 +- install/CORALInstaller.php | 81 +- ...URITY-Enforce-redirect-to-login-page.patch | 21 + install/install.php | 8 +- install/protected/update_1.2.sql | 8 + js/common.js | 10 +- sushi.php | 13 +- uploadComplete.php | 125 +- uploadConfirmation.php | 11 +- user.php | 7 +- 21 files changed, 2874 insertions(+), 2727 deletions(-) create mode 100644 install/SECURITY-Enforce-redirect-to-login-page.patch create mode 100644 install/protected/update_1.2.sql diff --git a/.gitignore b/.gitignore index 9631778..9dc8805 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -.DS_Store -/admin/configuration.ini -/archive/* -/logs/* -/sushistore/* +.DS_Store +/admin/configuration.ini +/archive/* +/logs/* +/sushistore/* +*.bak diff --git a/README b/README index 91c50d3..30d4ab1 100755 --- a/README +++ b/README @@ -1,39 +1,46 @@ -************************** -Installation -Copy this entire directory to your web server under a directory named '/coral/usage/', then point your web browser to: -http://your_server/coral/usage/install/ -and follow instructions - -For the manual install, refer to the Technical Documentation available on http://erm.library.nd.edu - - -************************** -License / Copyright notices - -Copyright (c) 2013 University of Notre Dame -This file is part of CORAL. -CORAL 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, either version 3 of the License, or (at your option) any later version. -CORAL 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 CORAL. If not, see . - - -Parts of code used in the SushiService class is reused from Sushi Starters. Here is their license: -Copyright (c) 2011, Cranfield University - All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - -More information on Sushi Starters here: -http://cclibweb-4.dmz.cranfield.ac.uk/projects/sushistarters/ - - - -************************** -To contact the CORAL Developers: -CORAL-ADMIN@LISTSERV.ND.EDU +************************** +Installation +Copy this entire directory to your web server under a directory named '/coral/usage/', then point your web browser to: +http://your_server/coral/usage/install/ +and follow instructions + +For the manual install, refer to the Technical Documentation available on http://erm.library.nd.edu + +************************** +Changelog 1.2.0 + +* Misc. bug fixes +* Migrated from deprecated mysql to mysqli functions +* Added form validation +* SUSHI improvements + +************************** +License / Copyright notices + +Copyright (c) 2013 University of Notre Dame +This file is part of CORAL. +CORAL 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, either version 3 of the License, or (at your option) any later version. +CORAL 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 CORAL. If not, see . + + +Parts of code used in the SushiService class is reused from Sushi Starters. Here is their license: +Copyright (c) 2011, Cranfield University + All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +More information on Sushi Starters here: +http://cclibweb-4.dmz.cranfield.ac.uk/projects/sushistarters/ + + + +************************** +To contact the CORAL Developers: +CORAL-ADMIN@LISTSERV.ND.EDU diff --git a/admin/classes/common/Configuration.php b/admin/classes/common/Configuration.php index e650f3a..5a1420f 100755 --- a/admin/classes/common/Configuration.php +++ b/admin/classes/common/Configuration.php @@ -1,32 +1,36 @@ -. -** -************************************************************************************************************************** -*/ - - -class Configuration extends DynamicObject { - - public function init(NamedArguments $arguments) { - $arguments->setDefaultValueForArgumentName('filename', BASE_DIR . '/admin/configuration.ini'); - $config = parse_ini_file($arguments->filename, true); - foreach ($config as $section => $entries) { - $this->$section = Utility::objectFromArray($entries); - } - } - -} - +. +** +************************************************************************************************************************** +*/ + + +class Configuration extends DynamicObject { + + public function init(NamedArguments $arguments) { + $arguments->setDefaultValueForArgumentName('filename', BASE_DIR . 'admin/configuration.ini'); + if ((file_exists($arguments->filename)) and (is_readable($arguments->filename))) { + $config = parse_ini_file($arguments->filename, true); + } else { + die( BASE_DIR . 'admin/configuration.ini is missing or unreadable.'); + } + foreach ($config as $section => $entries) { + $this->$section = Utility::objectFromArray($entries); + } + } + +} + ?> \ No newline at end of file diff --git a/admin/classes/common/Utility.php b/admin/classes/common/Utility.php index 9e55623..f3ada5a 100755 --- a/admin/classes/common/Utility.php +++ b/admin/classes/common/Utility.php @@ -1,136 +1,136 @@ -. -** -************************************************************************************************************************** -*/ - - -class Utility { - - static public function unixTimeFromMysqlTimestamp($timestamp) { - - // taken from Dan Green, and then modified to be correct - // http://www.weberdev.com/get_example-1427.html - - $year = substr($timestamp,0,4); - $month = substr($timestamp,5,2); - $day = substr($timestamp,8,2); - $hour = substr($timestamp,11,2); - $minute = substr($timestamp,14,2); - $second = substr($timestamp,17,2); - $newdate = mktime($hour,$minute,$second,$month,$day,$year); - - return $newdate; - - } - - static public function secondsFromDays($days) { - return $days * 24 * 60 * 60; - } - - static public function objectFromArray($array) { - $object = new DynamicObject; - foreach ($array as $key => $value) { - if (is_array($value)) { - $object->$key = Utility::objectFromArray($value); - } else { - $object->$key = $value; - } - } - return $object; - } - - //returns file path up to /coral/ - static public function getCORALPath(){ - $pagePath = $_SERVER["DOCUMENT_ROOT"]; - - $currentFile = $_SERVER["SCRIPT_NAME"]; - $parts = Explode('/', $currentFile); - for($i=0; $i. +** +************************************************************************************************************************** +*/ + + +class Utility { + + static public function unixTimeFromMysqlTimestamp($timestamp) { + + // taken from Dan Green, and then modified to be correct + // http://www.weberdev.com/get_example-1427.html + + $year = substr($timestamp,0,4); + $month = substr($timestamp,5,2); + $day = substr($timestamp,8,2); + $hour = substr($timestamp,11,2); + $minute = substr($timestamp,14,2); + $second = substr($timestamp,17,2); + $newdate = mktime($hour,$minute,$second,$month,$day,$year); + + return $newdate; + + } + + static public function secondsFromDays($days) { + return $days * 24 * 60 * 60; + } + + static public function objectFromArray($array) { + $object = new DynamicObject; + foreach ($array as $key => $value) { + if (is_array($value)) { + $object->$key = Utility::objectFromArray($value); + } else { + $object->$key = $value; + } + } + return $object; + } + + //returns file path up to /coral/ + static public function getCORALPath(){ + $pagePath = $_SERVER["DOCUMENT_ROOT"]; + + $currentFile = $_SERVER["SCRIPT_NAME"]; + $parts = Explode('/', $currentFile); + for($i=0; $i \ No newline at end of file diff --git a/admin/classes/domain/ImportLog.php b/admin/classes/domain/ImportLog.php index e5b991a..29e56fc 100755 --- a/admin/classes/domain/ImportLog.php +++ b/admin/classes/domain/ImportLog.php @@ -1,187 +1,186 @@ -. -** -************************************************************************************************************************** -*/ - -class ImportLog extends DatabaseObject { - - protected function defineRelationships() {} - - protected function overridePrimaryKeyName() {} - - - static public function shortStatusFromDetails($details){ - //first, find if titles were processed - preg_match('/[0-9]+ titles processed/i', $details, $matches); - $titles = str_replace(" processed", "", $matches[0]); - - if ($titles){ - if (preg_match("/finished/i", $details)){ - $status = $titles . " (via sushi)"; - }else{ - $status = $titles; - } - - }else{ - - if (preg_match("/fail/i", $details)){ - $status = "Failed"; - }elseif (preg_match("/finished/i", $details)){ - $status = "awaiting import"; - } - - } - - return $status; - - } - - - //returns array of Platform records - public function getPlatforms(){ - - //now formulate query - $query = "SELECT platformID - FROM ImportLogPlatformLink - WHERE importLogID = '" . $this->importLogID . "'"; - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $searchArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['platformID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($searchArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($searchArray, $resultArray); - } - } - - return $searchArray; - - - } - - - - //returns array of import log records - public function getImportLogRecords($limit){ - - if ($limit != ""){ - $limitStatement = " LIMIT " . $limit; - }else{ - $limitStatement = ""; - } - - - //now formulate query - $query = "SELECT importLogID, loginID, importDateTime dateTime, fileName, archiveFileURL, logFileURL, details - FROM ImportLog - ORDER BY importDateTime DESC " . $limitStatement; - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $searchArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['importLogID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($searchArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($searchArray, $resultArray); - } - } - - return $searchArray; - - - } - - - - //returns array of import log records from user "sushi" - public function getSushiImports(){ - - //now formulate query - $query = "SELECT importLogID, loginID, importDateTime, fileName, archiveFileURL, logFileURL, details - FROM ImportLog - WHERE loginID = 'sushi' - AND fileName is not null - AND ucase(details) not like '%FAIL%' - ORDER BY importDateTime DESC"; - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $searchArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['importLogID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($searchArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($searchArray, $resultArray); - } - } - - return $searchArray; - - - } - - - - -} - +. +** +************************************************************************************************************************** +*/ + +class ImportLog extends DatabaseObject { + + protected function defineRelationships() {} + + protected function overridePrimaryKeyName() {} + + + static public function shortStatusFromDetails($details){ + //first, find if titles were processed + preg_match('/[0-9]+ titles processed/i', $details, $matches); + if (isset($matches[0])) { + $titles = str_replace(" processed", "", $matches[0]); + } + + if (isset($titles)){ + if (preg_match("/finished/i", $details)){ + $status = $titles . " (via sushi)"; + }else{ + $status = $titles; + } + }else{ + if (preg_match("/fail/i", $details)){ + $status = "Failed"; + }elseif (preg_match("/finished/i", $details)){ + $status = "awaiting import"; + } else { + $status = null; + } + } + return $status; + } + + + //returns array of Platform records + public function getPlatforms(){ + + //now formulate query + $query = "SELECT platformID + FROM ImportLogPlatformLink + WHERE importLogID = '" . $this->importLogID . "'"; + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $searchArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['platformID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($searchArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($searchArray, $resultArray); + } + } + + return $searchArray; + + + } + + + + //returns array of import log records + public function getImportLogRecords($limit){ + + if ($limit != ""){ + $limitStatement = " LIMIT " . $limit; + }else{ + $limitStatement = ""; + } + + + //now formulate query + $query = "SELECT importLogID, loginID, importDateTime dateTime, fileName, archiveFileURL, logFileURL, details + FROM ImportLog + ORDER BY importDateTime DESC " . $limitStatement; + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $searchArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['importLogID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($searchArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($searchArray, $resultArray); + } + } + + return $searchArray; + + + } + + + + //returns array of import log records from user "sushi" + public function getSushiImports(){ + + //now formulate query + $query = "SELECT importLogID, loginID, importDateTime, fileName, archiveFileURL, logFileURL, details + FROM ImportLog + WHERE loginID = 'sushi' + AND fileName is not null + AND ucase(details) not like '%FAIL%' + ORDER BY importDateTime DESC"; + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $searchArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['importLogID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($searchArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($searchArray, $resultArray); + } + } + + return $searchArray; + + + } + + + + +} + ?> \ No newline at end of file diff --git a/admin/classes/domain/Platform.php b/admin/classes/domain/Platform.php index 25af66e..fa2bcaf 100755 --- a/admin/classes/domain/Platform.php +++ b/admin/classes/domain/Platform.php @@ -1,1052 +1,1054 @@ -. -** -************************************************************************************************************************** -*/ - -class Platform extends DatabaseObject { - - protected function defineRelationships() {} - - protected function overridePrimaryKeyName() {} - - - protected function defineAttributes() { - $this->addAttribute('platformID'); - $this->addAttribute('organizationID'); - $this->addAttribute('name'); - $this->addAttribute('reportDisplayName'); - $this->addAttribute('reportDropDownInd'); - } - - - - //override of database object all() function - //returns array of all platform objects - needed for proper ordering - public function all(){ - - $query = "SELECT * - FROM Platform - ORDER BY name;"; - - $result = $this->db->processQuery($query, 'assoc'); - - $objects = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['platformID'])){ - $object = new Platform(new NamedArguments(array('primaryKey' => $result['platformID']))); - array_push($objects, $object); - }else{ - foreach ($result as $row) { - $object = new Platform(new NamedArguments(array('primaryKey' => $row['platformID']))); - array_push($objects, $object); - } - } - - return $objects; - } - - //returns array of publisher platform note objects - public function getPlatformNotes(){ - - $query = "SELECT * - FROM PlatformNote - WHERE platformID='" . $this->platformID . "';"; - - $result = $this->db->processQuery($query, 'assoc'); - - $objects = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['platformNoteID'])){ - $object = new PlatformNote(new NamedArguments(array('primaryKey' => $result['platformNoteID']))); - array_push($objects, $object); - }else{ - foreach ($result as $row) { - $object = new PlatformNote(new NamedArguments(array('primaryKey' => $row['platformNoteID']))); - array_push($objects, $object); - } - } - - return $objects; - } - - //returns array of importlog objects - public function getImportLogs(){ - - $query = "SELECT * - FROM ImportLog - WHERE importLogID IN (select importLogID from ImportLogPlatformLink WHERE platformID ='" . $this->platformID . "') - Order by importDateTime desc;"; - - $result = $this->db->processQuery($query, 'assoc'); - - $objects = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['importLogID'])){ - $object = new ImportLog(new NamedArguments(array('primaryKey' => $result['importLogID']))); - array_push($objects, $object); - }else{ - foreach ($result as $row) { - $object = new ImportLog(new NamedArguments(array('primaryKey' => $row['importLogID']))); - array_push($objects, $object); - } - } - - return $objects; - } - - - //returns most recent date of the last month of imports for any titles under this platform - public function getLastImportDate(){ - - $query = "SELECT max(concat(year,'-',month,'-01')) max_month - FROM MonthlyUsageSummary tsm INNER JOIN Title USING (titleID), PublisherPlatform pp - WHERE pp.publisherPlatformID = tsm.publisherPlatformID - AND pp.platformID = '" . $this->platformID . "';"; - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - if (isset($result['max_month'])){ - return $result['max_month']; - } - - } - - - - - //returns array of import log records from user "sushi" - public function removeFailedSushiImports(){ - - //now formulate query - $query = "DELETE FROM ImportLog - WHERE loginID = 'sushi' - AND importLogID IN (SELECT importLogID FROM ImportLogPlatformLink WHERE platformID = '" . $this->platformID . "') - AND ucase(details) like '%FAIL%'"; - - - return $this->db->processQuery($query); - - } - - - - - - - //returns array of platforms - used on publisherPlatformList.php - public function getPlatformArray(){ - - - //now formulate query - $query = "SELECT * FROM Platform ORDER BY name;"; - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['platformID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - - - } - - - //returns array of external login objects - public function getExternalLogins(){ - - $query = "SELECT * - FROM ExternalLogin - WHERE platformID='" . $this->platformID . "';"; - - $result = $this->db->processQuery($query, 'assoc'); - - $objects = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['externalLoginID'])){ - $object = new ExternalLogin(new NamedArguments(array('primaryKey' => $result['externalLoginID']))); - array_push($objects, $object); - }else{ - foreach ($result as $row) { - $object = new ExternalLogin(new NamedArguments(array('primaryKey' => $row['externalLoginID']))); - array_push($objects, $object); - } - } - - return $objects; - } - - - //returns array of titles and identifiers - public function getJournalTitles(){ - - $query = "SELECT DISTINCT t.titleID titleID, t.title title, - MAX(IF(ti.identifierType='DOI', identifier, null)) doi, - MAX(IF(ti.identifierType='Proprietary Identifier', identifier, null)) pi, - MAX(IF(ti.identifierType='ISSN', concat(substr(ti.identifier,1,4), '-', substr(ti.identifier,5,4)),null)) issn, - MAX(IF(ti.identifierType='eISSN', concat(substr(ti.identifier,1,4), '-', substr(ti.identifier,5,4)),null)) eissn - FROM MonthlyUsageSummary mus, PublisherPlatform pp, Title t LEFT JOIN TitleIdentifier ti ON t.titleID = ti.titleID - WHERE pp.publisherPlatformID = mus.publisherPlatformID - AND mus.titleID = t.titleID - AND pp.platformID = '" . $this->platformID . "' - AND t.resourceType='Journal' - GROUP BY t.titleID, t.title - ORDER BY title;"; - - $result = $this->db->processQuery($query, 'assoc'); - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['titleID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - } - - - - //returns array of titles and identifiers - public function getBookTitles(){ - - $query = "SELECT DISTINCT t.titleID titleID, t.title title, - MAX(IF(ti.identifierType='DOI', identifier, null)) doi, - MAX(IF(ti.identifierType='Proprietary Identifier', identifier, null)) pi, - MAX(IF(ti.identifierType='ISBN', identifier, null)) isbn, - MAX(IF(ti.identifierType='ISSN', concat(substr(ti.identifier,1,4), '-', substr(ti.identifier,5,4)),null)) issn - FROM MonthlyUsageSummary mus, PublisherPlatform pp, Title t LEFT JOIN TitleIdentifier ti ON t.titleID = ti.titleID - WHERE pp.publisherPlatformID = mus.publisherPlatformID - AND mus.titleID = t.titleID - AND pp.platformID = '" . $this->platformID . "' - AND t.resourceType='Book' - GROUP BY t.titleID, t.title - ORDER BY title;"; - - $result = $this->db->processQuery($query, 'assoc'); - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['titleID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - } - - //returns array of titles and identifiers - public function getDatabaseTitles(){ - - $query = "SELECT DISTINCT t.titleID titleID, t.title title - FROM MonthlyUsageSummary mus, PublisherPlatform pp, Title t - WHERE pp.publisherPlatformID = mus.publisherPlatformID - AND mus.titleID = t.titleID - AND t.resourceType='Database' - AND pp.platformID = '" . $this->platformID . "' - GROUP BY t.titleID, t.title - ORDER BY title;"; - - $result = $this->db->processQuery($query, 'assoc'); - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['titleID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - } - - - - //returns array of publisher platform objects - public function getPublisherPlatforms(){ - - $query = "SELECT publisherPlatformID - FROM PublisherPlatform pp, Publisher - WHERE pp.publisherID = Publisher.publisherID - AND platformID = '" . $this->platformID . "' - ORDER BY Publisher.name;"; - - - $result = $this->db->processQuery($query, 'assoc'); - - $objects = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['publisherPlatformID'])){ - $object = new PublisherPlatform(new NamedArguments(array('primaryKey' => $result['publisherPlatformID']))); - array_push($objects, $object); - }else{ - $db = new DBService; - foreach ($result as $row) { - $object = new PublisherPlatform(new NamedArguments(array('primaryKey' => $row['publisherPlatformID'],'db'=>$db))); - array_push($objects, $object); - } - } - - return $objects; - } - - - - //returns array of monthly outlier records - public function getMonthlyOutliers($resourceType, $archiveInd, $year, $month){ - - - //now formulate query - $query = "select monthlyUsageSummaryID, Title, archiveInd, usageCount, overrideUsageCount, color - from MonthlyUsageSummary tsm, Title t, Outlier o, PublisherPlatform pp - where tsm.titleID = t.titleID - and o.outlierID = tsm.outlierID - and pp.publisherPlatformID = tsm.publisherPlatformID - and platformID='" . $this->platformID . "' - and archiveInd='" . $archiveInd . "' - and resourceType='" . $resourceType . "' - and year='" . $year . "' - and month='" . $month . "' and ignoreOutlierInd = 0 - order by 1,2,3;"; - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['monthlyUsageSummaryID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - - - } - - - - //returns array of yearly override records - public function getYearlyOverrides($resourceType, $archiveInd, $year){ - - //now formulate query - $query = "SELECT DISTINCT yearlyUsageSummaryID, Title, totalCount, ytdHTMLCount, ytdPDFCount, overrideTotalCount, overrideHTMLCount, overridePDFCount - FROM YearlyUsageSummary tsy, MonthlyUsageSummary tsm, Title t, PublisherPlatform pp - WHERE tsy.titleID = t.titleID - AND tsm.publisherPlatformID = tsy.publisherPlatformID - AND tsm.titleID = tsy.titleID - AND tsm.year = tsy.year - AND tsm.archiveInd = tsy.archiveInd - AND tsm.outlierID > 0 - AND pp.publisherPlatformID = tsm.publisherPlatformID - AND pp.platformID='" . $this->platformID . "' - AND tsy.archiveInd='" . $archiveInd . "' - AND tsy.year='" . $year . "' - AND t.resourceType='" . $resourceType . "' - AND ignoreOutlierInd = 0;"; - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['yearlyUsageSummaryID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - - - } - - - - //returns array of full statistics info for display - public function getFullStatsDetails($resourceType = null){ - - if ($resourceType){ - $addWhere = "AND t.resourceType = '" . $resourceType . "'"; - } - - //now formulate query - $query = "SELECT DISTINCT resourceType, year, GROUP_CONCAT(DISTINCT concat(month, '|', if(ignoreOutlierInd=0,ifnull(outlierID,0),0)) ORDER BY month, 1 SEPARATOR ',') months, archiveInd, MAX(month) max_month, MIN(month) min_month, MAX(IF(ignoreOutlierInd=0,outlierID,null)) outlierID - FROM PublisherPlatform pp, MonthlyUsageSummary tsm INNER JOIN Title t USING (titleID) - WHERE pp.platformID = '" . $this->platformID . "' - AND pp.publisherPlatformID = tsm.publisherPlatformID " . $addWhere . " - GROUP BY resourceType, year, archiveInd - ORDER BY resourceType desc, year desc, archiveInd, month;"; - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['year'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - - - } - - - - - //returns array of months available for a given year - public function getAvailableMonths($resourceType, $archiveInd, $year){ - - //now formulate query - if ($year){ - $addWhere = " AND year = '" . $year . "'"; - } - if ($archiveInd){ - $addWhere .= " AND archiveInd = '" . $archiveInd . "'"; - } - if ($resourceType){ - $addWhere = " AND resourceType = '" . $resourceType . "'"; - } - - $query = "SELECT DISTINCT year, month, archiveInd - FROM MonthlyUsageSummary tsm INNER JOIN Title USING (titleID), PublisherPlatform pp - WHERE pp.publisherPlatformID = tsm.publisherPlatformID - AND pp.platformID = '" . $this->platformID . "'" . $addWhere . " - ORDER BY year, archiveInd, month;"; - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['month'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - - - } - - - //remove an entire month for this platform - public function deleteMonth($resourceType, $archiveInd, $year, $month){ - - //now formulate query - $query = "DELETE FROM MonthlyUsageSummary - WHERE publisherPlatformID IN - (SELECT publisherPlatformID - FROM PublisherPlatform - WHERE platformID = '" . $this->platformID . "') - AND year = '" . $year . "' - AND month = '" . $month . "' - AND titleID IN (select titleID from Title where resourceType = '" . $resourceType . "') - AND archiveInd = '" . $archiveInd . "';"; - - return $this->db->processQuery($query); - - } - - - - //returns array total stats devided by month - public function getStatMonthlyTotals($resourceType, $archiveInd, $year){ - - //now formulate query - $query = "SELECT pp.platformID, - SUM(IF(month='1',usageCount,null)) january, - SUM(IF(month='2',usageCount,null)) february, - SUM(IF(month='3',usageCount,null)) march, - SUM(IF(month='4',usageCount,null)) april, - SUM(IF(month='5',usageCount,null)) may, - SUM(IF(month='6',usageCount,null)) june, - SUM(IF(month='7',usageCount,null)) july, - SUM(IF(month='8',usageCount,null)) august, - SUM(IF(month='9',usageCount,null)) september, - SUM(IF(month='10',usageCount,null)) october, - SUM(IF(month='11',usageCount,null)) november, - SUM(IF(month='12',usageCount,null)) december - FROM Title t, MonthlyUsageSummary tsm, PublisherPlatform pp, Publisher p - WHERE t.titleID = tsm.titleID - AND tsm.publisherPlatformID = pp.publisherPlatformID - AND pp.publisherID = p.publisherID - AND pp.platformID = '" . $this->platformID . "' - AND tsm.year='" . $year . "' - AND tsm.archiveInd = '" . $archiveInd . "' - AND t.resourceType = '" . $resourceType . "' - GROUP BY pp.platformID;"; - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['platformID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - } - - return $resultArray; - - - } - - - - - - - //returns array total stats devided by month - public function getStatYearlyTotals($resourceType, $archiveInd, $year){ - - //now formulate query - $query = "SELECT pp.platformID, SUM(totalCount) totalCount, SUM(ytdHTMLCount) ytdHTMLCount, SUM(ytdPDFCount) ytdPDFCount - FROM YearlyUsageSummary yus, PublisherPlatform pp, MonthlyUsageSummary mus INNER JOIN Title t ON (mus.titleID = t.titleID) - WHERE pp.publisherPlatformID = yus.publisherPlatformID - AND pp.platformID = '" . $this->platformID . "' - AND yus.archiveInd ='" . $archiveInd . "' - AND yus.year='" . $year . "' - AND yus.titleID=mus.titleID - AND mus.publisherPlatformID = yus.publisherPlatformID - AND mus.year = '" . $year . "' - AND mus.archiveInd = '" . $archiveInd . "' - AND t.resourceType = '" . $resourceType . "' - AND mus.month = '1' - GROUP BY pp.platformID;"; - - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['platformID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - } - - return $resultArray; - - - } - - - - - //returns arrays of monthly statistics by title - public function getMonthlyStats($resourceType, $archiveInd, $year){ - - //now formulate query - $query = "SELECT pp.publisherPlatformID, t.titleID, t.Title, Publisher.name Publisher, Platform.name Platform, - MAX(IF(month='1',usageCount,null)) january, - MAX(IF(month='2',usageCount,null)) february, - MAX(IF(month='3',usageCount,null)) march, - MAX(IF(month='4',usageCount,null)) april, - MAX(IF(month='5',usageCount,null)) may, - MAX(IF(month='6',usageCount,null)) june, - MAX(IF(month='7',usageCount,null)) july, - MAX(IF(month='8',usageCount,null)) august, - MAX(IF(month='9',usageCount,null)) september, - MAX(IF(month='10',usageCount,null)) october, - MAX(IF(month='11',usageCount,null)) november, - MAX(IF(month='12',usageCount,null)) december, - MAX(IF(month='1',outlierID,0)) january_outlier, - MAX(IF(month='2',outlierID,0)) february_outlier, - MAX(IF(month='3',outlierID,0)) march_outlier, - MAX(IF(month='4',outlierID,0)) april_outlier, - MAX(IF(month='5',outlierID,0)) may_outlier, - MAX(IF(month='6',outlierID,0)) june_outlier, - MAX(IF(month='7',outlierID,0)) july_outlier, - MAX(IF(month='8',outlierID,0)) august_outlier, - MAX(IF(month='9',outlierID,0)) september_outlier, - MAX(IF(month='10',outlierID,0)) october_outlier, - MAX(IF(month='11',outlierID,0)) november_outlier, - MAX(IF(month='12',outlierID,0)) december_outlier, - MAX(mergeInd) mergeInd, activityType - FROM Title t, MonthlyUsageSummary tsm, PublisherPlatform pp, Publisher, Platform - WHERE t.titleID = tsm.titleID - AND tsm.publisherPlatformID = pp.publisherPlatformID - AND pp.publisherID = Publisher.publisherID - AND pp.platformID = Platform.platformID - AND pp.platformID = '" . $this->platformID . "' - AND tsm.year='" . $year . "' - AND tsm.archiveInd = '" . $archiveInd . "' - AND t.resourceType = '" . $resourceType . "' - GROUP BY t.titleID, t.Title, activityType - ORDER BY t.Title;"; - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['publisherPlatformID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - - - } - - - - - //returns platform object from name - public function getByName($platformName){ - - $query = "select platformID from Platform where upper(name) = upper('" . str_replace("'","''", $platformName) . "') LIMIT 1;"; - - $result = $this->db->processQuery($query, 'assoc'); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['platformID'])){ - $obj = new Platform(new NamedArguments(array('primaryKey' => $result['platformID']))); - return $obj; - }else{ - return false; - } - - } - - - - //returns array of month counts available for a given year - public function getTotalMonths($resourceType, $archiveInd, $year){ - - //now formulate query - $query = "SELECT COUNT(month) count_months, MIN(month) min_month, MAX(month) max_month - FROM MonthlyUsageSummary mus INNER JOIN Title t USING (titleID), PublisherPlatform pp - WHERE mus.publisherPlatformID = pp.publisherPlatformID - AND year = '" . $year . "' - AND pp.PlatformID = '" . $this->platformID . "' - AND resourceType = '" . $resourceType . "' - AND archiveInd=$archiveInd;"; - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['count_months'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - } - - return $resultArray; - - - } - - - - - - - - - //search used for the autocomplete - public function searchOrganizations($q){ - $config = new Configuration; - - $q = str_replace("+", " ",$q); - $q = str_replace("%", "&",$q); - - $orgArray = array(); - - //if the org module is installed get the org names from org database - if ($config->settings->organizationsModule == 'Y'){ - - $dbName = $config->settings->organizationsDatabaseName; - - - $query = "SELECT CONCAT(A.name, ' (', O.name, ')') name, O.organizationID - FROM " . $dbName . ".Alias A, " . $dbName . ".Organization O - WHERE A.organizationID=O.organizationID - AND upper(A.name) like upper('%" . $q . "%') - UNION - SELECT name, organizationID - FROM " . $dbName . ".Organization - WHERE upper(name) like upper('%" . $q . "%') - ORDER BY 1;"; - - $result = mysqli_query($this->db->getDatabase(), $query); - - while ($row = mysqli_fetch_assoc($result)){ - $orgArray[] = $row['organizationID'] . "|" . $row['name']; - } - - } - - - return $orgArray; - } - - - - - //search used index page drop down - public function getOrganizationList(){ - $config = new Configuration; - - $orgArray = array(); - - //if the org module is installed get the org names from org database - if ($config->settings->organizationsModule == 'Y'){ - $dbName = $config->settings->organizationsDatabaseName; - $query = "SELECT name, organizationID FROM " . $dbName . ".Organization ORDER BY 1;"; - } - - - $result = $this->db->processQuery($query, 'assoc'); - - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['organizationID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($orgArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($orgArray, $resultArray); - } - } - - return $orgArray; - - } - - - - //go to organizations and get the org name for this platform - public function getOrganizationName(){ - $config = new Configuration; - - //if the org module is installed get the org name from org database - if ($config->settings->organizationsModule == 'Y'){ - $dbName = $config->settings->organizationsDatabaseName; - - $orgArray = array(); - $query = "SELECT name FROM " . $dbName . ".Organization WHERE organizationID = " . $this->organizationID; - - if ($result = mysqli_query($this->db->getDatabase(), $query)){ - - while ($row = mysqli_fetch_assoc($result)){ - return $row['name']; - } - } - } - } - - - //returns array of external login data - public function getOrganizationExternalLogins(){ - $config = new Configuration; - - //if the org module is installed get the org info from org database - if (($config->settings->organizationsModule == 'Y') && ($this->organizationID)){ - $dbName = $config->settings->organizationsDatabaseName; - - $query = "SELECT externalLoginID, ELT.shortName externalLoginType, updateDate, loginURL, emailAddress, username, password, noteText - FROM " . $dbName . ".ExternalLogin EL, " . $dbName . ".ExternalLoginType ELT - WHERE EL.externalLoginTypeID = ELT.externalLoginTypeID - AND organizationID = '" . $this->organizationID . "' - ORDER BY ELT.shortName"; - - $result = $this->db->processQuery($query, 'assoc'); - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['externalLoginID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - - } - - } - - - - - //used for A-Z on search (index) - public function getAlphabeticalList(){ - $allArray = array(); - $result = $this->db->processQuery("SELECT DISTINCT UPPER(SUBSTR(TRIM(LEADING 'The ' FROM name),1,1)) letter, COUNT(SUBSTR(TRIM(LEADING 'The ' FROM name),1,1)) letter_count - FROM Platform - GROUP BY SUBSTR(TRIM(LEADING 'The ' FROM name),1,1) - ORDER BY 1;", "assoc"); - - - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['letter'])){ - $allArray = $result; - }else{ - foreach ($result as $row) { - $allArray[$row['letter']] = $row['letter_count']; - } - } - - return $allArray; - } - - - //returns array based on search - public function search($whereAdd, $orderBy, $limit){ - - if (count($whereAdd) > 0){ - $whereStatement = " WHERE " . implode(" AND ", $whereAdd); - }else{ - $whereStatement = ""; - } - - if ($limit != ""){ - $limitStatement = " LIMIT " . $limit; - }else{ - $limitStatement = ""; - } - - - //now actually execute query - $query = "SELECT P.platformID, P.name, P.reportDisplayName, - GROUP_CONCAT(DISTINCT PP.publisherPlatformID ORDER BY PP.reportDisplayName DESC SEPARATOR ':') publishers, - date(importDateTime) last_import, - loginID, - details, - if(serviceDayOfMonth > day(now()), str_to_date(concat(EXTRACT(YEAR_MONTH FROM NOW()), lpad(serviceDayOfMonth,2,'0')), '%Y%m%d'), str_to_date(concat(EXTRACT(YEAR_MONTH FROM NOW()) + 1, lpad(serviceDayOfMonth,2,'0')), '%Y%m%d') ) next_import - FROM - Platform P - LEFT JOIN (PublisherPlatform PP - INNER JOIN Publisher USING (publisherID)) - ON P.PlatformID = PP.PlatformID - LEFT JOIN (SELECT platformID, mil.importLogID, max(importDateTime) importDateTime, loginID, details FROM ImportLog mil INNER JOIN ImportLogPlatformLink mipl USING (ImportLogID) GROUP BY platformID) mil ON P.platformID = mil.platformID - LEFT JOIN SushiService SS ON P.PlatformID = SS.PlatformID - " . $whereStatement . " - GROUP By P.platformID - ORDER BY " . $orderBy . $limitStatement; - - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - $searchArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['platformID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($searchArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($searchArray, $resultArray); - } - } - - return $searchArray; - } - - -} - - -?> +. +** +************************************************************************************************************************** +*/ + +class Platform extends DatabaseObject { + + protected function defineRelationships() {} + + protected function overridePrimaryKeyName() {} + + + protected function defineAttributes() { + $this->addAttribute('platformID'); + $this->addAttribute('organizationID'); + $this->addAttribute('name'); + $this->addAttribute('reportDisplayName'); + $this->addAttribute('reportDropDownInd'); + } + + + + //override of database object all() function + //returns array of all platform objects - needed for proper ordering + public function all(){ + + $query = "SELECT * + FROM Platform + ORDER BY name;"; + + $result = $this->db->processQuery($query, 'assoc'); + + $objects = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['platformID'])){ + $object = new Platform(new NamedArguments(array('primaryKey' => $result['platformID']))); + array_push($objects, $object); + }else{ + foreach ($result as $row) { + $object = new Platform(new NamedArguments(array('primaryKey' => $row['platformID']))); + array_push($objects, $object); + } + } + + return $objects; + } + + //returns array of publisher platform note objects + public function getPlatformNotes(){ + + $query = "SELECT * + FROM PlatformNote + WHERE platformID='" . $this->platformID . "';"; + + $result = $this->db->processQuery($query, 'assoc'); + + $objects = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['platformNoteID'])){ + $object = new PlatformNote(new NamedArguments(array('primaryKey' => $result['platformNoteID']))); + array_push($objects, $object); + }else{ + foreach ($result as $row) { + $object = new PlatformNote(new NamedArguments(array('primaryKey' => $row['platformNoteID']))); + array_push($objects, $object); + } + } + + return $objects; + } + + //returns array of importlog objects + public function getImportLogs(){ + + $query = "SELECT * + FROM ImportLog + WHERE importLogID IN (select importLogID from ImportLogPlatformLink WHERE platformID ='" . $this->platformID . "') + Order by importDateTime desc;"; + + $result = $this->db->processQuery($query, 'assoc'); + + $objects = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['importLogID'])){ + $object = new ImportLog(new NamedArguments(array('primaryKey' => $result['importLogID']))); + array_push($objects, $object); + }else{ + foreach ($result as $row) { + $object = new ImportLog(new NamedArguments(array('primaryKey' => $row['importLogID']))); + array_push($objects, $object); + } + } + + return $objects; + } + + + //returns most recent date of the last month of imports for any titles under this platform + public function getLastImportDate(){ + + $query = "SELECT max(concat(year,'-',month,'-01')) max_month + FROM MonthlyUsageSummary tsm INNER JOIN Title USING (titleID), PublisherPlatform pp + WHERE pp.publisherPlatformID = tsm.publisherPlatformID + AND pp.platformID = '" . $this->platformID . "';"; + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + if (isset($result['max_month'])){ + return $result['max_month']; + } + + } + + + + + //returns array of import log records from user "sushi" + public function removeFailedSushiImports(){ + + //now formulate query + $query = "DELETE FROM ImportLog + WHERE loginID = 'sushi' + AND importLogID IN (SELECT importLogID FROM ImportLogPlatformLink WHERE platformID = '" . $this->platformID . "') + AND ucase(details) like '%FAIL%'"; + + + return $this->db->processQuery($query); + + } + + + + + + + //returns array of platforms - used on publisherPlatformList.php + public function getPlatformArray(){ + + + //now formulate query + $query = "SELECT * FROM Platform ORDER BY name;"; + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['platformID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + + + } + + + //returns array of external login objects + public function getExternalLogins(){ + + $query = "SELECT * + FROM ExternalLogin + WHERE platformID='" . $this->platformID . "';"; + + $result = $this->db->processQuery($query, 'assoc'); + + $objects = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['externalLoginID'])){ + $object = new ExternalLogin(new NamedArguments(array('primaryKey' => $result['externalLoginID']))); + array_push($objects, $object); + }else{ + foreach ($result as $row) { + $object = new ExternalLogin(new NamedArguments(array('primaryKey' => $row['externalLoginID']))); + array_push($objects, $object); + } + } + + return $objects; + } + + + //returns array of titles and identifiers + public function getJournalTitles(){ + + $query = "SELECT DISTINCT t.titleID titleID, t.title title, + MAX(IF(ti.identifierType='DOI', identifier, null)) doi, + MAX(IF(ti.identifierType='Proprietary Identifier', identifier, null)) pi, + MAX(IF(ti.identifierType='ISSN', concat(substr(ti.identifier,1,4), '-', substr(ti.identifier,5,4)),null)) issn, + MAX(IF(ti.identifierType='eISSN', concat(substr(ti.identifier,1,4), '-', substr(ti.identifier,5,4)),null)) eissn + FROM MonthlyUsageSummary mus, PublisherPlatform pp, Title t LEFT JOIN TitleIdentifier ti ON t.titleID = ti.titleID + WHERE pp.publisherPlatformID = mus.publisherPlatformID + AND mus.titleID = t.titleID + AND pp.platformID = '" . $this->platformID . "' + AND t.resourceType='Journal' + GROUP BY t.titleID, t.title + ORDER BY title;"; + + $result = $this->db->processQuery($query, 'assoc'); + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['titleID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + } + + + + //returns array of titles and identifiers + public function getBookTitles(){ + + $query = "SELECT DISTINCT t.titleID titleID, t.title title, + MAX(IF(ti.identifierType='DOI', identifier, null)) doi, + MAX(IF(ti.identifierType='Proprietary Identifier', identifier, null)) pi, + MAX(IF(ti.identifierType='ISBN', identifier, null)) isbn, + MAX(IF(ti.identifierType='ISSN', concat(substr(ti.identifier,1,4), '-', substr(ti.identifier,5,4)),null)) issn + FROM MonthlyUsageSummary mus, PublisherPlatform pp, Title t LEFT JOIN TitleIdentifier ti ON t.titleID = ti.titleID + WHERE pp.publisherPlatformID = mus.publisherPlatformID + AND mus.titleID = t.titleID + AND pp.platformID = '" . $this->platformID . "' + AND t.resourceType='Book' + GROUP BY t.titleID, t.title + ORDER BY title;"; + + $result = $this->db->processQuery($query, 'assoc'); + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['titleID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + } + + //returns array of titles and identifiers + public function getDatabaseTitles(){ + + $query = "SELECT DISTINCT t.titleID titleID, t.title title + FROM MonthlyUsageSummary mus, PublisherPlatform pp, Title t + WHERE pp.publisherPlatformID = mus.publisherPlatformID + AND mus.titleID = t.titleID + AND t.resourceType='Database' + AND pp.platformID = '" . $this->platformID . "' + GROUP BY t.titleID, t.title + ORDER BY title;"; + + $result = $this->db->processQuery($query, 'assoc'); + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['titleID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + } + + + + //returns array of publisher platform objects + public function getPublisherPlatforms(){ + + $query = "SELECT publisherPlatformID + FROM PublisherPlatform pp, Publisher + WHERE pp.publisherID = Publisher.publisherID + AND platformID = '" . $this->platformID . "' + ORDER BY Publisher.name;"; + + + $result = $this->db->processQuery($query, 'assoc'); + + $objects = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['publisherPlatformID'])){ + $object = new PublisherPlatform(new NamedArguments(array('primaryKey' => $result['publisherPlatformID']))); + array_push($objects, $object); + }else{ + $db = new DBService; + foreach ($result as $row) { + $object = new PublisherPlatform(new NamedArguments(array('primaryKey' => $row['publisherPlatformID'],'db'=>$db))); + array_push($objects, $object); + } + } + + return $objects; + } + + + + //returns array of monthly outlier records + public function getMonthlyOutliers($resourceType, $archiveInd, $year, $month){ + + + //now formulate query + $query = "select monthlyUsageSummaryID, Title, archiveInd, usageCount, overrideUsageCount, color + from MonthlyUsageSummary tsm, Title t, Outlier o, PublisherPlatform pp + where tsm.titleID = t.titleID + and o.outlierID = tsm.outlierID + and pp.publisherPlatformID = tsm.publisherPlatformID + and platformID='" . $this->platformID . "' + and archiveInd='" . $archiveInd . "' + and resourceType='" . $resourceType . "' + and year='" . $year . "' + and month='" . $month . "' and ignoreOutlierInd = 0 + order by 1,2,3;"; + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['monthlyUsageSummaryID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + + + } + + + + //returns array of yearly override records + public function getYearlyOverrides($resourceType, $archiveInd, $year){ + + //now formulate query + $query = "SELECT DISTINCT yearlyUsageSummaryID, Title, totalCount, ytdHTMLCount, ytdPDFCount, overrideTotalCount, overrideHTMLCount, overridePDFCount + FROM YearlyUsageSummary tsy, MonthlyUsageSummary tsm, Title t, PublisherPlatform pp + WHERE tsy.titleID = t.titleID + AND tsm.publisherPlatformID = tsy.publisherPlatformID + AND tsm.titleID = tsy.titleID + AND tsm.year = tsy.year + AND tsm.archiveInd = tsy.archiveInd + AND tsm.outlierID > 0 + AND pp.publisherPlatformID = tsm.publisherPlatformID + AND pp.platformID='" . $this->platformID . "' + AND tsy.archiveInd='" . $archiveInd . "' + AND tsy.year='" . $year . "' + AND t.resourceType='" . $resourceType . "' + AND ignoreOutlierInd = 0;"; + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['yearlyUsageSummaryID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + + + } + + + + //returns array of full statistics info for display + public function getFullStatsDetails($resourceType = null){ + + if ($resourceType){ + $addWhere = "AND t.resourceType = '" . $resourceType . "'"; + } else { + $addWhere = ""; + } + + //now formulate query + $query = "SELECT DISTINCT resourceType, year, GROUP_CONCAT(DISTINCT concat(month, '|', if(ignoreOutlierInd=0,ifnull(outlierID,0),0)) ORDER BY month, 1 SEPARATOR ',') months, archiveInd, MAX(month) max_month, MIN(month) min_month, MAX(IF(ignoreOutlierInd=0,outlierID,null)) outlierID + FROM PublisherPlatform pp, MonthlyUsageSummary tsm INNER JOIN Title t USING (titleID) + WHERE pp.platformID = '" . $this->platformID . "' + AND pp.publisherPlatformID = tsm.publisherPlatformID " . $addWhere . " + GROUP BY resourceType, year, archiveInd + ORDER BY resourceType desc, year desc, archiveInd, month;"; + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['year'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + + + } + + + + + //returns array of months available for a given year + public function getAvailableMonths($resourceType, $archiveInd, $year){ + + //now formulate query + if ($year){ + $addWhere = " AND year = '" . $year . "'"; + } + if ($archiveInd){ + $addWhere .= " AND archiveInd = '" . $archiveInd . "'"; + } + if ($resourceType){ + $addWhere = " AND resourceType = '" . $resourceType . "'"; + } + + $query = "SELECT DISTINCT year, month, archiveInd + FROM MonthlyUsageSummary tsm INNER JOIN Title USING (titleID), PublisherPlatform pp + WHERE pp.publisherPlatformID = tsm.publisherPlatformID + AND pp.platformID = '" . $this->platformID . "'" . $addWhere . " + ORDER BY year, archiveInd, month;"; + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['month'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + + + } + + + //remove an entire month for this platform + public function deleteMonth($resourceType, $archiveInd, $year, $month){ + + //now formulate query + $query = "DELETE FROM MonthlyUsageSummary + WHERE publisherPlatformID IN + (SELECT publisherPlatformID + FROM PublisherPlatform + WHERE platformID = '" . $this->platformID . "') + AND year = '" . $year . "' + AND month = '" . $month . "' + AND titleID IN (select titleID from Title where resourceType = '" . $resourceType . "') + AND archiveInd = '" . $archiveInd . "';"; + + return $this->db->processQuery($query); + + } + + + + //returns array total stats devided by month + public function getStatMonthlyTotals($resourceType, $archiveInd, $year){ + + //now formulate query + $query = "SELECT pp.platformID, + SUM(IF(month='1',usageCount,null)) january, + SUM(IF(month='2',usageCount,null)) february, + SUM(IF(month='3',usageCount,null)) march, + SUM(IF(month='4',usageCount,null)) april, + SUM(IF(month='5',usageCount,null)) may, + SUM(IF(month='6',usageCount,null)) june, + SUM(IF(month='7',usageCount,null)) july, + SUM(IF(month='8',usageCount,null)) august, + SUM(IF(month='9',usageCount,null)) september, + SUM(IF(month='10',usageCount,null)) october, + SUM(IF(month='11',usageCount,null)) november, + SUM(IF(month='12',usageCount,null)) december + FROM Title t, MonthlyUsageSummary tsm, PublisherPlatform pp, Publisher p + WHERE t.titleID = tsm.titleID + AND tsm.publisherPlatformID = pp.publisherPlatformID + AND pp.publisherID = p.publisherID + AND pp.platformID = '" . $this->platformID . "' + AND tsm.year='" . $year . "' + AND tsm.archiveInd = '" . $archiveInd . "' + AND t.resourceType = '" . $resourceType . "' + GROUP BY pp.platformID;"; + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['platformID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + } + + return $resultArray; + + + } + + + + + + + //returns array total stats devided by month + public function getStatYearlyTotals($resourceType, $archiveInd, $year){ + + //now formulate query + $query = "SELECT pp.platformID, SUM(totalCount) totalCount, SUM(ytdHTMLCount) ytdHTMLCount, SUM(ytdPDFCount) ytdPDFCount + FROM YearlyUsageSummary yus, PublisherPlatform pp, MonthlyUsageSummary mus INNER JOIN Title t ON (mus.titleID = t.titleID) + WHERE pp.publisherPlatformID = yus.publisherPlatformID + AND pp.platformID = '" . $this->platformID . "' + AND yus.archiveInd ='" . $archiveInd . "' + AND yus.year='" . $year . "' + AND yus.titleID=mus.titleID + AND mus.publisherPlatformID = yus.publisherPlatformID + AND mus.year = '" . $year . "' + AND mus.archiveInd = '" . $archiveInd . "' + AND t.resourceType = '" . $resourceType . "' + AND mus.month = '1' + GROUP BY pp.platformID;"; + + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['platformID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + } + + return $resultArray; + + + } + + + + + //returns arrays of monthly statistics by title + public function getMonthlyStats($resourceType, $archiveInd, $year){ + + //now formulate query + $query = "SELECT pp.publisherPlatformID, t.titleID, t.Title, Publisher.name Publisher, Platform.name Platform, + MAX(IF(month='1',usageCount,null)) january, + MAX(IF(month='2',usageCount,null)) february, + MAX(IF(month='3',usageCount,null)) march, + MAX(IF(month='4',usageCount,null)) april, + MAX(IF(month='5',usageCount,null)) may, + MAX(IF(month='6',usageCount,null)) june, + MAX(IF(month='7',usageCount,null)) july, + MAX(IF(month='8',usageCount,null)) august, + MAX(IF(month='9',usageCount,null)) september, + MAX(IF(month='10',usageCount,null)) october, + MAX(IF(month='11',usageCount,null)) november, + MAX(IF(month='12',usageCount,null)) december, + MAX(IF(month='1',outlierID,0)) january_outlier, + MAX(IF(month='2',outlierID,0)) february_outlier, + MAX(IF(month='3',outlierID,0)) march_outlier, + MAX(IF(month='4',outlierID,0)) april_outlier, + MAX(IF(month='5',outlierID,0)) may_outlier, + MAX(IF(month='6',outlierID,0)) june_outlier, + MAX(IF(month='7',outlierID,0)) july_outlier, + MAX(IF(month='8',outlierID,0)) august_outlier, + MAX(IF(month='9',outlierID,0)) september_outlier, + MAX(IF(month='10',outlierID,0)) october_outlier, + MAX(IF(month='11',outlierID,0)) november_outlier, + MAX(IF(month='12',outlierID,0)) december_outlier, + MAX(mergeInd) mergeInd, activityType + FROM Title t, MonthlyUsageSummary tsm, PublisherPlatform pp, Publisher, Platform + WHERE t.titleID = tsm.titleID + AND tsm.publisherPlatformID = pp.publisherPlatformID + AND pp.publisherID = Publisher.publisherID + AND pp.platformID = Platform.platformID + AND pp.platformID = '" . $this->platformID . "' + AND tsm.year='" . $year . "' + AND tsm.archiveInd = '" . $archiveInd . "' + AND t.resourceType = '" . $resourceType . "' + GROUP BY t.titleID, t.Title, activityType + ORDER BY t.Title;"; + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['publisherPlatformID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + + + } + + + + + //returns platform object from name + public function getByName($platformName){ + + $query = "select platformID from Platform where upper(name) = upper('" . str_replace("'","''", $platformName) . "') LIMIT 1;"; + + $result = $this->db->processQuery($query, 'assoc'); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['platformID'])){ + $obj = new Platform(new NamedArguments(array('primaryKey' => $result['platformID']))); + return $obj; + }else{ + return false; + } + + } + + + + //returns array of month counts available for a given year + public function getTotalMonths($resourceType, $archiveInd, $year){ + + //now formulate query + $query = "SELECT COUNT(month) count_months, MIN(month) min_month, MAX(month) max_month + FROM MonthlyUsageSummary mus INNER JOIN Title t USING (titleID), PublisherPlatform pp + WHERE mus.publisherPlatformID = pp.publisherPlatformID + AND year = '" . $year . "' + AND pp.PlatformID = '" . $this->platformID . "' + AND resourceType = '" . $resourceType . "' + AND archiveInd=$archiveInd;"; + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['count_months'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + } + + return $resultArray; + + + } + + + + + + + + + //search used for the autocomplete + public function searchOrganizations($q){ + $config = new Configuration; + + $q = str_replace("+", " ",$q); + $q = str_replace("%", "&",$q); + + $orgArray = array(); + + //if the org module is installed get the org names from org database + if ($config->settings->organizationsModule == 'Y'){ + + $dbName = $config->settings->organizationsDatabaseName; + + + $query = "SELECT CONCAT(A.name, ' (', O.name, ')') name, O.organizationID + FROM " . $dbName . ".Alias A, " . $dbName . ".Organization O + WHERE A.organizationID=O.organizationID + AND upper(A.name) like upper('%" . $q . "%') + UNION + SELECT name, organizationID + FROM " . $dbName . ".Organization + WHERE upper(name) like upper('%" . $q . "%') + ORDER BY 1;"; + + $result = mysqli_query($this->db->getDatabase(), $query); + + while ($row = mysqli_fetch_assoc($result)){ + $orgArray[] = $row['organizationID'] . "|" . $row['name']; + } + + } + + + return $orgArray; + } + + + + + //search used index page drop down + public function getOrganizationList(){ + $config = new Configuration; + + $orgArray = array(); + + //if the org module is installed get the org names from org database + if ($config->settings->organizationsModule == 'Y'){ + $dbName = $config->settings->organizationsDatabaseName; + $query = "SELECT name, organizationID FROM " . $dbName . ".Organization ORDER BY 1;"; + } + + + $result = $this->db->processQuery($query, 'assoc'); + + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['organizationID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($orgArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($orgArray, $resultArray); + } + } + + return $orgArray; + + } + + + + //go to organizations and get the org name for this platform + public function getOrganizationName(){ + $config = new Configuration; + + //if the org module is installed get the org name from org database + if ($config->settings->organizationsModule == 'Y'){ + $dbName = $config->settings->organizationsDatabaseName; + + $orgArray = array(); + $query = "SELECT name FROM " . $dbName . ".Organization WHERE organizationID = " . $this->organizationID; + + if ($result = mysqli_query($this->db->getDatabase(), $query)){ + + while ($row = mysqli_fetch_assoc($result)){ + return $row['name']; + } + } + } + } + + + //returns array of external login data + public function getOrganizationExternalLogins(){ + $config = new Configuration; + + //if the org module is installed get the org info from org database + if (($config->settings->organizationsModule == 'Y') && ($this->organizationID)){ + $dbName = $config->settings->organizationsDatabaseName; + + $query = "SELECT externalLoginID, ELT.shortName externalLoginType, updateDate, loginURL, emailAddress, username, password, noteText + FROM " . $dbName . ".ExternalLogin EL, " . $dbName . ".ExternalLoginType ELT + WHERE EL.externalLoginTypeID = ELT.externalLoginTypeID + AND organizationID = '" . $this->organizationID . "' + ORDER BY ELT.shortName"; + + $result = $this->db->processQuery($query, 'assoc'); + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['externalLoginID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + + } + + } + + + + + //used for A-Z on search (index) + public function getAlphabeticalList(){ + $allArray = array(); + $result = $this->db->processQuery("SELECT DISTINCT UPPER(SUBSTR(TRIM(LEADING 'The ' FROM name),1,1)) letter, COUNT(SUBSTR(TRIM(LEADING 'The ' FROM name),1,1)) letter_count + FROM Platform + GROUP BY SUBSTR(TRIM(LEADING 'The ' FROM name),1,1) + ORDER BY 1;", "assoc"); + + + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['letter'])){ + $allArray = $result; + }else{ + foreach ($result as $row) { + $allArray[$row['letter']] = $row['letter_count']; + } + } + + return $allArray; + } + + + //returns array based on search + public function search($whereAdd, $orderBy, $limit){ + + if (count($whereAdd) > 0){ + $whereStatement = " WHERE " . implode(" AND ", $whereAdd); + }else{ + $whereStatement = ""; + } + + if ($limit != ""){ + $limitStatement = " LIMIT " . $limit; + }else{ + $limitStatement = ""; + } + + + //now actually execute query + $query = "SELECT P.platformID, P.name, P.reportDisplayName, + GROUP_CONCAT(DISTINCT PP.publisherPlatformID ORDER BY PP.reportDisplayName DESC SEPARATOR ':') publishers, + date(importDateTime) last_import, + loginID, + details, + if(serviceDayOfMonth > day(now()), str_to_date(concat(EXTRACT(YEAR_MONTH FROM NOW()), lpad(serviceDayOfMonth,2,'0')), '%Y%m%d'), str_to_date(concat(EXTRACT(YEAR_MONTH FROM NOW()) + 1, lpad(serviceDayOfMonth,2,'0')), '%Y%m%d') ) next_import + FROM + Platform P + LEFT JOIN (PublisherPlatform PP + INNER JOIN Publisher USING (publisherID)) + ON P.PlatformID = PP.PlatformID + LEFT JOIN (SELECT platformID, mil.importLogID, max(importDateTime) importDateTime, loginID, details FROM ImportLog mil INNER JOIN ImportLogPlatformLink mipl USING (ImportLogID) GROUP BY platformID) mil ON P.platformID = mil.platformID + LEFT JOIN SushiService SS ON P.PlatformID = SS.PlatformID + " . $whereStatement . " + GROUP By P.platformID + ORDER BY " . $orderBy . $limitStatement; + + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + $searchArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['platformID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($searchArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($searchArray, $resultArray); + } + } + + return $searchArray; + } + + +} + + +?> diff --git a/admin/classes/domain/SushiService.php b/admin/classes/domain/SushiService.php index 4bd0bca..9025f3e 100755 --- a/admin/classes/domain/SushiService.php +++ b/admin/classes/domain/SushiService.php @@ -1,829 +1,848 @@ -. -** -************************************************************************************************************************** -*/ - -class SushiService extends DatabaseObject { - - protected function defineRelationships() {} - - protected function overridePrimaryKeyName() {} - - public $startDate; - public $endDate; - private $statusLog = array(); - private $detailLog = array(); - - public function getByPlatformID($platformID){ - if (isset($platformID)) { - $query = "SELECT * FROM `$this->tableName` WHERE `platformID` = '$platformID'"; - $result = $this->db->processQuery($query, 'assoc'); - - foreach (array_keys($result) as $attributeName) { - $this->addAttribute($attributeName); - $this->attributes[$attributeName] = $result[$attributeName]; - } - } - } - - public function getByPublisherPlatformID($publisherPlatformID){ - if (isset($publisherPlatformID)) { - $query = "SELECT * FROM `$this->tableName` WHERE `publisherPlatformID` = '$publisherPlatformID'"; - $result = $this->db->processQuery($query, 'assoc'); - - foreach (array_keys($result) as $attributeName) { - $this->addAttribute($attributeName); - $this->attributes[$attributeName] = $result[$attributeName]; - } - } - } - - //returns array of sushi service objects that need to be run on a particular day - public function getByDayOfMonth($serviceDayOfMonth){ - //now formulate query - $query = "SELECT * FROM SushiService WHERE `serviceDayOfMonth` = '$serviceDayOfMonth';"; - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - $objects = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['sushiServiceID'])){ - $object = new SushiService(new NamedArguments(array('primaryKey' => $result['sushiServiceID']))); - array_push($objects, $object); - }else{ - foreach ($result as $row) { - $object = new SushiService(new NamedArguments(array('primaryKey' => $row['sushiServiceID']))); - array_push($objects, $object); - } - } - - return $objects; - } - - - - public function getPublisherOrPlatform(){ - if (($this->platformID != "") && ($this->platformID > 0)){ - return new Platform(new NamedArguments(array('primaryKey' => $this->platformID))); - }else{ - return new PublisherPlatform(new NamedArguments(array('primaryKey' => $this->publisherPlatformID))); - } - } - - - public function getServiceProvider(){ - return str_replace('"','',$this->getPublisherOrPlatform->reportDisplayName); - } - - - - - public function failedImports(){ - $query = "SELECT ipl.platformID, ss.sushiServiceID, date(il.importDateTime), details, il.importLogID - FROM ImportLog il - INNER JOIN ImportLogPlatformLink ipl USING (ImportLogID) - INNER JOIN SushiService ss ON (ss.platformID = ipl.platformID) - INNER JOIN (SELECT platformID, max(importLogID) importLogID, max(importDateTime) importDateTime FROM ImportLog mil INNER JOIN ImportLogPlatformLink mipl USING (ImportLogID) GROUP BY platformID) mil ON (mil.importLogID = il.importLogID) - WHERE ucase(details) like '%FAIL%' - ORDER BY il.importDateTime desc"; - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - $searchArray = array(); - $importArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['platformID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($importArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($importArray, $resultArray); - } - } - - return $importArray; - - } - - public function allServices(){ - $query = "SELECT ss.platformID, ss.publisherPlatformID, sushiServiceID, serviceURL, reportLayouts, releaseNumber, - if(serviceDayOfMonth > day(now()), str_to_date(concat(EXTRACT(YEAR_MONTH FROM NOW()), lpad(serviceDayOfMonth,2,'0')), '%Y%m%d'), str_to_date(concat(EXTRACT(YEAR_MONTH FROM NOW()) + 1, lpad(serviceDayOfMonth,2,'0')), '%Y%m%d') ) next_import - FROM SushiService ss - LEFT JOIN Platform p on (p.platformID = ss.platformID) - LEFT JOIN PublisherPlatform pp - INNER JOIN Publisher pub USING(publisherID) - ON (pp.publisherPlatformID = ss.publisherPlatformID) - ORDER BY p.name, pub.name"; - - $result = $this->db->processQuery(stripslashes($query), 'assoc'); - - $searchArray = array(); - $importArray = array(); - - //need to do this since it could be that there's only one result and this is how the dbservice returns result - if (isset($result['platformID'])){ - - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($importArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($importArray, $resultArray); - } - } - - return $importArray; - - } - - - //run through ajax function on publisherplatform - public function runTest(){ - $reportLayouts = $this->reportLayouts; - $rlArray = explode(";", $reportLayouts); - - //just default test import dates to just be january 1 - 31 of this year - $sDate = date_format(date_create_from_format("Ymd", date("Y")."0101"), "Y-m-d"); - $eDate = date_format(date_create_from_format("Ymd", date("Y")."0131"), "Y-m-d"); - $this->setImportDates($sDate, $eDate); - - - foreach($rlArray as $reportLayout){ - $xmlFile = $this->sushiTransfer($reportLayout); - } - - if ($reportLayouts == ""){ - echo "At least one report type must be set up!"; - }else{ - echo "Connection test successful!"; - } - - } - - //run through post or through sushi scheduler - public function runAll($overwritePlatform = TRUE){ - $reportLayouts = $this->reportLayouts; - $rlArray = explode(";", $reportLayouts); - - $detailsForOutput = array(); - - foreach($rlArray as $reportLayout){ - $this->statusLog = array(); - $this->detailLog = array(); - - $xmlFile = $this->sushiTransfer($reportLayout); - $this->parseXML($xmlFile, $reportLayout, $overwritePlatform); - - $detailsForOutput = $this->statusLog; - } - - if ($reportLayouts == ""){ - return "No report types are set up!"; - } - - return implode("\n", $detailsForOutput); - } - - - - - - public function setDefaultImportDates(){ - - // Determine the End Date - //start with first day of this month - $endDate = date_create_from_format("Ymd", date("Y") . date("m") . "01" ); - - //subtract one day - date_sub($endDate, date_interval_create_from_date_string('1 days')); - $this->endDate = date_format($endDate,"Y-m-d"); - - //Determine the Start Date - //first, get this publisher/platform's last day of import - $lastImportDate = $this->getPublisherOrPlatform->getLastImportDate(); - $lastImportDate = date_create_from_format("Y-m-d", $lastImportDate); - date_add($lastImportDate, date_interval_create_from_date_string('1 month')); - - //if that date is set and it's sooner than the first of this year, default it to that date - if (($lastImportDate) && (date_format($lastImportDate, "Y-m-d") > date_format($endDate, "Y") . "-01-01")){ - $this->startDate = date_format($lastImportDate, "Y-m-d"); - }else{ - $this->startDate = date_format($endDate, "Y") . "-01-01"; - } - - } - - - - public function setImportDates($sDate = null, $eDate = null){ - - if (!$sDate){ - $this->setDefaultImportDates(); - }else{ - //using the multiple functions in order to make sure leading zeros, and this is a date - $this->startDate = date_format(date_create_from_format("Y-m-d", $sDate), "Y-m-d"); - $this->endDate = date_format(date_create_from_format("Y-m-d", $eDate), "Y-m-d"); - } - - } - - - - - //status for storing in DB and displaying in rows - private function logStatus($logText){ - array_push($this->statusLog, $logText); - array_push($this->detailLog, $logText); - } - - //longer log for storing in log file and displaying output - private function log($logText){ - array_push($this->detailLog, $logText); - } - - //logs process to import log table and to log file - public function saveLogAndExit($reportLayout = NULL, $txtFile = NULL, $success = FALSE){ - - - //First, delete any preexisting Failured records, these shouldn't be needed/interesting after this. - $this->log("Cleaning up prior failed import logs...."); - - $this->getPublisherOrPlatform->removeFailedSushiImports; - - if (!$txtFile){ - $txtFile = strtotime("now") . '.txt'; - } - $logFileLocation = 'logs/' . $txtFile; - - $this->log("Log File Name: $logFileLocation"); - - if ($success){ - $this->logStatus("Finished processing " . $this->getServiceProvider . ": $reportLayout."); - } - - //save the actual log file - $fp = fopen(BASE_DIR . $logFileLocation, 'w'); - fwrite($fp, implode("\n", $this->detailLog)); - fclose($fp); - - - //save to import log!! - $importLog = new ImportLog(); - $importLog->loginID = "sushi"; - $importLog->layoutCode = $reportLayout; - $importLog->fileName = 'archive/' . $txtFile; - $importLog->archiveFileURL = 'archive/' . $txtFile; - $importLog->logFileURL = $logFileLocation; - $importLog->details = implode("
    ", $this->statusLog); - - try { - $importLog->save(); - $importLogID = $importLog->primaryKey; - } catch (Exception $e) { - echo $e->getMessage(); - } - - $importLogPlatformLink = new ImportLogPlatformLink(); - $importLogPlatformLink->importLogID = $importLogID; - $importLogPlatformLink->platformID = $this->platformID; - - - try { - $importLogPlatformLink->save(); - } catch (Exception $e) { - echo $e->getMessage(); - } - - if(!$success){ - throw new Exception(implode("\n", $this->detailLog)); - } - - - } - - - - private function soapConnection($wsdl, $parameters){ - - $parameters = array_merge($parameters, array( - "keep_alive" => true, - "connection_timeout"=>1000, - "trace" => 1, - "exceptions" => 1, - "cache_wsdl" => WSDL_CACHE_NONE, - "stream_context" => stream_context_create(array( - 'http' => array('protocol_version' => 1.0, - 'header' => 'Content-Type: application/soap+xml'))) - ) - ); - - try{ - try{ - $client = new SoapClient($wsdl, $parameters); - - //returns soapfault - }catch (Exception $e){ - $error = $e->__toString(); - - //if soap fault returned version mismatch or http headers error, try again with soap 1.2 - if ((preg_match('/Version/i', $error)) || (preg_match('/HTTP/i', $error))){ - - $this->log("Using Soap Version 1.2"); - $parameters = array_merge($parameters, array("soap_version" => SOAP_1_2)); - - //try connection again with 1.2 - $client = new SoapClient($wsdl, $parameters); - } - } - - //throws soap fault - }catch (Exception $e){ - $error = $e->getMessage(); - - $this->logStatus("Failed to establish soap connection: " . $error); - $this->saveLogAndExit(); - } - - $this->log(""); - $this->log("-- Soap Connection successfully completed --"); - $this->log(""); - - return $client; - } - - - - private function sushiTransfer($reportLayout){ - - - - $ppObj = $this->getPublisherOrPlatform(); - $serviceProvider = str_replace('"','',$ppObj->reportDisplayName); - - //if report layout is BR and Release is 3, change it to 1 - if((preg_match('/BR/i', $reportLayout)) && ($this->releaseNumber == "3")){ - $releaseNumber = '1'; - }else{ - $releaseNumber = $this->releaseNumber; - } - - if (($this->wsdlURL == '') || (strtoupper($this->wsdlURL) == 'COUNTER')){ - if ($this->releaseNumber == "4"){ - $wsdl = 'http://www.niso.org/schemas/sushi/counter_sushi4_0.wsdl'; - }else{ - $wsdl = 'http://www.niso.org/schemas/sushi/counter_sushi3_0.wsdl'; - } - }else{ - $wsdl=$this->wsdlURL; - } - - - - $createDate = date("Y-m-d\TH:i:s.0\Z"); - $id = uniqid("CORAL:", true); - - // look at $Security to ses if it uses an extension - if(preg_match('/Extension=/i', $this->security)){ - $extensions = array(); - $varlist = explode(";", $this->security); - foreach( $varlist as $params){ - list($extVar, $extVal) = explode("=", $params); - $extensions[$extVar] = $extVal; - if ($extVar == 'Extension'){ - $extension = $extVal; - } - } - } - - if (!empty($extension)){ - include BASE_DIR . 'sushiincludes/extension_'.$extension.'.inc.php'; - }else{ - if (preg_match("/http/i", $this->security)){ - $this->log("Using HTTP Basic authentication via login and password."); - - $parameters = array( - 'login' => $this->login, - 'password' => $this->password, - 'location' => $this->serviceURL, - ); - }else{ - if ((strtoupper($this->wsdlURL) != 'COUNTER') && ($this->wsdlURL != '')){ - $this->log("Using provided wsdl: $wsdl"); - $parameters = array(); - - }else{ - $this->log("Using COUNTER wsdl, connecting to $this->serviceURL"); - $parameters = array('location'=> $this->serviceURL); - } - } - - $client = $this->soapConnection($wsdl, $parameters); - } - - if (preg_match("/wsse/i", $this->security)){ - // Prepare SoapHeader parameters - $strWSSENS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; - $objSoapVarUser = new SoapVar($this->login, XSD_STRING, NULL, $strWSSENS, NULL, $strWSSENS); - $objSoapVarPass = new SoapVar($this->password, XSD_STRING, NULL, $strWSSENS, NULL, $strWSSENS); - $objWSSEAuth = new clsWSSEAuth($objSoapVarUser, $objSoapVarPass); - $objSoapVarWSSEAuth = new SoapVar($objWSSEAuth, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'UsernameToken', $strWSSENS); - $objWSSEToken = new clsWSSEToken($objSoapVarWSSEAuth); - $objSoapVarWSSEToken = new SoapVar($objWSSEToken, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'UsernameToken', $strWSSENS); - $objSoapVarHeaderVal=new SoapVar($objSoapVarWSSEToken, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'Security', $strWSSENS); - $objSoapVarWSSEHeader = new SoapHeader($strWSSENS, 'Security', $objSoapVarHeaderVal,false); - - // Prepare Soap Client - try{ - $client->__setSoapHeaders(array($objSoapVarWSSEHeader)); - }catch (Exception $e){ - $error = $e->getMessage(); - $this->logStatus("Failed to connect to $serviceProvider: " . $error); - $this->log("Tried: " . var_dump($client)); - $this->saveLogAndExit($reportLayout); - } - - } - - try{ - $reportRequest = array - ('Requestor' => array - ('ID' => $this->requestorID, - 'Name' => 'CORAL Processing', - 'Email' => $this->requestorID - ), - 'CustomerReference' => array - ('ID' => $this->customerID, - 'Name' => 'CORAL Processing' - ), - 'ReportDefinition' => array - ('Filters' => array - ('UsageDateRange' => array - ('Begin' => $this->startDate, - 'End' => $this->endDate - ) - ), - 'Name' => $reportLayout, - 'Release' => $releaseNumber - ), - 'Created' => $createDate, - 'ID' => $id, - 'connection_timeout' => 1000 - ); - - $result = $client->GetReport($reportRequest); - }catch(Exception $e){ - $error = $e->getMessage(); - - $this->logStatus("Exception performing GetReport with connection to $serviceProvider: $error"); - - //exceptions seem to happen that don't matter, continue processing and if no data or error is found then it will quit. - //$this->saveLogAndExit($reportLayout); - } - - $xml = $client->__getLastResponse(); - - $fname = $serviceProvider.'_'.$reportLayout.'_'.$this->startDate.'_'.$this->endDate.'.xml'; - $replace="_"; - $pattern="/([[:alnum:]_\.-]*)/"; - $fname = 'sushistore/' . str_replace(str_split(preg_replace($pattern,$replace,$fname)),$replace,$fname); - - $xmlFileName = BASE_DIR . $fname; - file_put_contents($xmlFileName, $xml); - - //open file to look for errors - $reader = new XMLReader(); - if (!$reader->open($xmlFileName)) { - $this->logStatus("Failed trying to open XML File: " . $xmlFileName . ". This could be due to not having write access to the /sushistore/ directory."); - $this->saveLogAndExit($reportLayout); - } - - while ($reader->read()) { - if ($reader->nodeType == XMLReader::ELEMENT){ - if ($reader->localName == 'Severity') { - $reader->read(); - $severity = trim($reader->value); - } - if ($reader->localName == 'Message') { - $reader->read(); - $message = trim($reader->value); - } - - } - } - - $reader->close(); - - if ($message !=""){ - if (($severity == "Error") || (stripos($message, "Error") !== FALSE)){ - $this->logStatus("Failed to request report from $serviceProvider: " . $message); - - $this->log("Please fix the settings for this provider and try again."); - $this->saveLogAndExit($reportLayout); - }else{ - $this->logStatus("$serviceProvider says: $severity: $message"); - } - } - - $this->log("$reportLayout successfully retrieved from $serviceProvider for start date: $this->startDate, end date: $this->endDate"); - - $this->log(""); - $this->log("-- Sushi Transfer completed --"); - - return $fname; - - - } - - - - private function parseXML($fName, $reportLayout, $overwritePlatform){ - - - ////////////////////////////////////// - //PARSE XML!! - ////////////////////////////////////// - - $serviceProvider = $this->getServiceProvider(); - $xmlFileName = BASE_DIR . $fName; - - //read layouts ini file to get the available layouts - $layoutsArray = parse_ini_file(BASE_DIR . "layouts.ini", true); - $layoutColumns = array(); - - $reader = new XMLReader(); - if (!$reader->open($xmlFileName, 'UTF-8')) { - $this->logStatus("Failed trying to open XML File: " . $xmlFileName . ". This could be due to not having write access to the /sushistore/ directory."); - $this->saveLogAndExit($reportLayout); - } - - - $layoutCode = ""; - $countArray = array(); - - while ($reader->read()) { - //First - get report information - if (($reader->nodeType == XMLReader::ELEMENT) && ($reader->localName == 'Report') && (count($layoutColumns) == '0')) { - $name = $reader->getAttribute("Name"); - $version = $reader->getAttribute("Version"); - - $layoutCode = $name; - - if (($version == "3") || ($version =="4")){ - $version = "R" . $version; - } - if ($version != ''){ - $layoutCode .= "_" . $version; - }else{ - $layoutCode .= "_R" . $this->releaseNumber; - } - - //At this point, determine the format of the report to port to csv from the layouts.ini file - $layoutKey = $layoutsArray[ReportTypes][$layoutCode]; - $layoutColumns = $layoutsArray[$layoutKey]['columns']; - - - //if this way of determining layout was unsuccessful, just use the layout sent in - if (count($layoutColumns) == "0"){ - $layoutCode = $reportLayout . "_R" . $this->releaseNumber; - - $layoutKey = $layoutsArray[ReportTypes][$layoutCode]; - $layoutColumns = $layoutsArray[$layoutKey]['columns']; - } - - $this->log("Layout validated successfully against layouts.ini : " . $layoutCode); - - - } - - if (($reader->nodeType == XMLReader::ELEMENT) && ($reader->localName == 'ReportItems')) { - if ((count($layoutColumns) == '0') || ($layoutCode == '')){ - $this->logStatus("Failed determining layout: Reached report items before establishing layout. Please make sure this layout is set up in layouts.ini"); - $this->saveLogAndExit($reportLayout); - } - - //reset variables - $identifierArray=array(); - $reportArray = array(); - - //loop through each element under "Item" - while ($reader->read()) { - - //get the element name - if ($reader->nodeType == XMLReader::ELEMENT){ - $elementName = trim($reader->localName); - - //move to next to get the text - if (($elementName != "Instance") && ($elementName != "ItemIdentifier") && ($elementName != "Period")){ - $reader->read(); - } - - - - if ($reader->nodeType == XMLReader::TEXT - || $reader->nodeType == XMLReader::CDATA - || $reader->nodeType == XMLReader::WHITESPACE - || $reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE) { - $elementValue = trim($reader->value); - - switch ($elementName) { - case 'ItemPlatform': - if ($overwritePlatform){ - $reportArray['platform'] = $serviceProvider; - }else{ - $reportArray['platform'] = $elementValue; - } - - break; - case 'ItemPublisher': - $reportArray['publisher'] = $elementValue; - break; - case 'ItemName': - $reportArray['title'] = $elementValue; - break; - case 'ActivityType': - $reportArray['activityType'] = strtoupper($reader->value); - break; - case 'Type': - $idType = strtoupper($reader->value); - break; - case 'Value': - $identifierArray[$idType] = $reader->value; - break; - case 'Begin': - $date = new DateTime($reader->value); - - if (strtolower($date->format('M')) != $m){ - $totalCountsArray[$m] = $countArray; - - $m = strtolower($date->format('M')); - $y = strtolower($date->format('Y')); - - $countArray = array(); - } - - break; - case 'MetricType': - $metricType = strtoupper($reader->value); - - //make sure metric types have conformity - if (!(strpos($metricType,'HTML') === false)){ - $metricType ='html'; - }else if (!(strpos($metricType,'PDF') === false)){ - $metricType ='pdf'; - }else{ - $metricType ='ytd'; - } - - break; - case 'Count': - $countArray[$metricType] = $reader->value; - break; - } - - - } - - //Finished parsing the Title!!! - }else if ($reader->nodeType == XMLReader::END_ELEMENT - && $reader->localName == "ReportItems") { - - foreach($identifierArray as $key => $value){ - if (!(strrpos($key,'PRINT') === false) && !(strrpos($key,'ISSN') === false)){ - $reportArray['issn'] = $value; - }else if (!(strrpos($key,'ONLINE') === false) && !(strrpos($key,'ISSN') === false)){ - $reportArray['eissn'] = $value; - }else if (!(strpos($key,'PRINT') === false) && !(strpos($key,'ISBN') === false)){ - $reportArray['isbn'] = $value; - }else if (!(strpos($key,'ONLINE') === false) && !(strpos($key,'ISBN') === false)){ - $reportArray['eisbn'] = $value; - }else if (!(strpos($key,'DOI') === false)){ - $reportArray['doi'] = $value; - }else if (!(strpos($key,'PROPRIETARY') === false)){ - $reportArray['pi']=$value; - } - - } - - //get the last array into the totals array - $totalCountsArray[$m] = $countArray; - - //now figure out the months and the ytd, etc totals - foreach ($totalCountsArray as $key => $countArray){ - - if ($key != ''){ - - if (intval($countArray['ytd']) == "0"){ - $reportArray[$key] = intval($countArray['pdf']) + intval($countArray['html']); - }else{ - $reportArray[$key] = intval($countArray['ytd']); - } - - $reportArray['ytd'] += intval($countArray['ytd']); - $reportArray['ytdPDF'] += intval($countArray['pdf']); - $reportArray['ytdHTML'] += intval($countArray['html']); - } - - } - - - //Now look at the report's layoutcode's columns to order them properly - $finalArray=array(); - foreach($layoutColumns as $colName){ - $finalArray[] = $reportArray[$colName]; - } - - $txtOut .= implode($finalArray,"\t") . "\n"; - - $totalCountsArray=array(); - break; - } - } - } - - } - - $reader->close(); - - if (($layoutKey == "") || (count($layoutColumns) == '0') || ($txtOut == "")){ - if (file_exists($xmlFileName)) { - $this->logStatus("Failed XML parsing or no data was found."); - - $xml = simplexml_load_file($xmlFileName); - $this->log("The following is the XML response:"); - - $this->log(htmlentities(file_get_contents($xmlFileName))); - - }else{ - $this->log("Failed loading XML file. Please verify you have write permissions on /sushistore/ directory."); - } - - $this->saveLogAndExit($layoutCode); - } - - #Save final text delimited "file" and log output on server - $txtFile = strtotime("now") . '.txt'; - $fp = fopen(BASE_DIR . 'archive/' . $txtFile, 'w'); - fwrite($fp, $txtOut); - fclose($fp); - - - $this->log(""); - $this->log("-- Sushi XML parsing completed --"); - - $this->log("Archive/Text File Name: " . $utility->getPageURL . 'archive/' . $txtFile); - - $this->saveLogAndExit($layoutCode, $txtFile, true); - } - -} - - -//for soap headers -class clsWSSEAuth{ - private $username; - private $password; - function __construct($username, $password){ - $this->username=$username; - $this->password=$password; - } -} -class clsWSSEToken{ - private $usernameToken; - function __construct ($innerVal){ - $this->usernameToken = $innerVal; - } -} - - - -?> +. +** +************************************************************************************************************************** +*/ + +class SushiService extends DatabaseObject { + + protected function defineRelationships() {} + + protected function overridePrimaryKeyName() {} + + public $startDate; + public $endDate; + private $statusLog = array(); + private $detailLog = array(); + + public function getByPlatformID($platformID){ + if (isset($platformID)) { + $query = "SELECT * FROM `$this->tableName` WHERE `platformID` = '$platformID'"; + $result = $this->db->processQuery($query, 'assoc'); + + foreach (array_keys($result) as $attributeName) { + $this->addAttribute($attributeName); + $this->attributes[$attributeName] = $result[$attributeName]; + } + } + } + + public function getByPublisherPlatformID($publisherPlatformID){ + if (isset($publisherPlatformID)) { + $query = "SELECT * FROM `$this->tableName` WHERE `publisherPlatformID` = '$publisherPlatformID'"; + $result = $this->db->processQuery($query, 'assoc'); + + foreach (array_keys($result) as $attributeName) { + $this->addAttribute($attributeName); + $this->attributes[$attributeName] = $result[$attributeName]; + } + } + } + + //returns array of sushi service objects that need to be run on a particular day + public function getByDayOfMonth($serviceDayOfMonth){ + //now formulate query + $query = "SELECT * FROM SushiService WHERE `serviceDayOfMonth` = '$serviceDayOfMonth';"; + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + $objects = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['sushiServiceID'])){ + $object = new SushiService(new NamedArguments(array('primaryKey' => $result['sushiServiceID']))); + array_push($objects, $object); + }else{ + foreach ($result as $row) { + $object = new SushiService(new NamedArguments(array('primaryKey' => $row['sushiServiceID']))); + array_push($objects, $object); + } + } + + return $objects; + } + + + + public function getPublisherOrPlatform(){ + if (($this->platformID != "") && ($this->platformID > 0)){ + return new Platform(new NamedArguments(array('primaryKey' => $this->platformID))); + }else{ + return new PublisherPlatform(new NamedArguments(array('primaryKey' => $this->publisherPlatformID))); + } + } + + + public function getServiceProvider(){ + return str_replace('"','',$this->getPublisherOrPlatform->reportDisplayName); + } + + + + + public function failedImports(){ + $query = "SELECT ipl.platformID, ss.sushiServiceID, date(il.importDateTime), details, il.importLogID + FROM ImportLog il + INNER JOIN ImportLogPlatformLink ipl USING (ImportLogID) + INNER JOIN SushiService ss ON (ss.platformID = ipl.platformID) + INNER JOIN (SELECT platformID, max(importLogID) importLogID, max(importDateTime) importDateTime FROM ImportLog mil INNER JOIN ImportLogPlatformLink mipl USING (ImportLogID) GROUP BY platformID) mil ON (mil.importLogID = il.importLogID) + WHERE ucase(details) like '%FAIL%' + ORDER BY il.importDateTime desc"; + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + $resultArray = array(); + $importArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['platformID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($importArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($importArray, $resultArray); + } + } + + return $importArray; + + } + + public function allServices(){ + $query = "SELECT ss.platformID, ss.publisherPlatformID, sushiServiceID, serviceURL, reportLayouts, releaseNumber, + if(serviceDayOfMonth > day(now()), str_to_date(concat(EXTRACT(YEAR_MONTH FROM NOW()), lpad(serviceDayOfMonth,2,'0')), '%Y%m%d'), str_to_date(concat(EXTRACT(YEAR_MONTH FROM NOW()) + 1, lpad(serviceDayOfMonth,2,'0')), '%Y%m%d') ) next_import + FROM SushiService ss + LEFT JOIN Platform p on (p.platformID = ss.platformID) + LEFT JOIN PublisherPlatform pp + INNER JOIN Publisher pub USING(publisherID) + ON (pp.publisherPlatformID = ss.publisherPlatformID) + ORDER BY p.name, pub.name"; + + $result = $this->db->processQuery(stripslashes($query), 'assoc'); + + $resultArray = array(); + $importArray = array(); + + //need to do this since it could be that there's only one result and this is how the dbservice returns result + if (isset($result['platformID'])){ + + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($importArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($importArray, $resultArray); + } + } + + return $importArray; + + } + + + //run through ajax function on publisherplatform + public function runTest(){ + $reportLayouts = $this->reportLayouts; + $rlArray = explode(";", $reportLayouts); + + //just default test import dates to just be january 1 - 31 of this year + $sDate = date_format(date_create_from_format("Ymd", date("Y")."0101"), "Y-m-d"); + $eDate = date_format(date_create_from_format("Ymd", date("Y")."0131"), "Y-m-d"); + $this->setImportDates($sDate, $eDate); + + + foreach($rlArray as $reportLayout){ + $xmlFile = $this->sushiTransfer($reportLayout); + } + + if ($reportLayouts == ""){ + echo "At least one report type must be set up!"; + }else{ + echo "Connection test successful!"; + } + + } + + //run through post or through sushi scheduler + public function runAll($overwritePlatform = TRUE){ + $reportLayouts = $this->reportLayouts; + $rlArray = explode(";", $reportLayouts); + + $detailsForOutput = array(); + + foreach($rlArray as $reportLayout){ + $this->statusLog = array(); + $this->detailLog = array(); + + $xmlFile = $this->sushiTransfer($reportLayout); + $this->parseXML($xmlFile, $reportLayout, $overwritePlatform); + + $detailsForOutput = $this->statusLog; + } + + if ($reportLayouts == ""){ + return "No report types are set up!"; + } + + return implode("\n", $detailsForOutput); + } + + + + + + public function setDefaultImportDates(){ + + // Determine the End Date + //start with first day of this month + $endDate = date_create_from_format("Ymd", date("Y") . date("m") . "01" ); + + //subtract one day + date_sub($endDate, date_interval_create_from_date_string('1 days')); + $this->endDate = date_format($endDate,"Y-m-d"); + + //Determine the Start Date + //first, get this publisher/platform's last day of import + $lastImportDate = $this->getPublisherOrPlatform->getLastImportDate(); + $lastImportDate = date_create_from_format("Y-m-d", $lastImportDate); + date_add($lastImportDate, date_interval_create_from_date_string('1 month')); + + //if that date is set and it's sooner than the first of this year, default it to that date + if (($lastImportDate) && (date_format($lastImportDate, "Y-m-d") > date_format($endDate, "Y") . "-01-01")){ + $this->startDate = date_format($lastImportDate, "Y-m-d"); + }else{ + $this->startDate = date_format($endDate, "Y") . "-01-01"; + } + + } + + + + public function setImportDates($sDate = null, $eDate = null){ + + if (!$sDate){ + $this->setDefaultImportDates(); + }else{ + //using the multiple functions in order to make sure leading zeros, and this is a date + $this->startDate = date_format(date_create_from_format("Y-m-d", $sDate), "Y-m-d"); + $this->endDate = date_format(date_create_from_format("Y-m-d", $eDate), "Y-m-d"); + } + + } + + + + + //status for storing in DB and displaying in rows + private function logStatus($logText){ + array_push($this->statusLog, $logText); + array_push($this->detailLog, $logText); + } + + //longer log for storing in log file and displaying output + private function log($logText){ + array_push($this->detailLog, $logText); + } + + //logs process to import log table and to log file + public function saveLogAndExit($reportLayout = NULL, $txtFile = NULL, $success = FALSE){ + + + //First, delete any preexisting Failured records, these shouldn't be needed/interesting after this. + $this->log("Cleaning up prior failed import logs...."); + + $this->getPublisherOrPlatform->removeFailedSushiImports; + + if (!$txtFile){ + $txtFile = strtotime("now") . '.txt'; + } + $logFileLocation = 'logs/' . $txtFile; + + $this->log("Log File Name: $logFileLocation"); + + if ($success){ + $this->logStatus("Finished processing " . $this->getServiceProvider . ": $reportLayout."); + } + + //save the actual log file + $fp = fopen(BASE_DIR . $logFileLocation, 'w'); + fwrite($fp, implode("\n", $this->detailLog)); + fclose($fp); + + + //save to import log!! + $importLog = new ImportLog(); + $importLog->loginID = "sushi"; + $importLog->layoutCode = $reportLayout; + $importLog->fileName = 'archive/' . $txtFile; + $importLog->archiveFileURL = 'archive/' . $txtFile; + $importLog->logFileURL = $logFileLocation; + $importLog->details = implode("
    ", $this->statusLog); + + try { + $importLog->save(); + $importLogID = $importLog->primaryKey; + } catch (Exception $e) { + echo $e->getMessage(); + } + + $importLogPlatformLink = new ImportLogPlatformLink(); + $importLogPlatformLink->importLogID = $importLogID; + $importLogPlatformLink->platformID = $this->platformID; + + + try { + $importLogPlatformLink->save(); + } catch (Exception $e) { + echo $e->getMessage(); + } + + if(!$success){ + throw new Exception(implode("\n", $this->detailLog)); + } + + + } + + + + private function soapConnection($wsdl, $parameters){ + + $parameters = array_merge($parameters, array( + "keep_alive" => true, + "connection_timeout"=>1000, + "trace" => 1, + "exceptions" => 1, + "cache_wsdl" => WSDL_CACHE_NONE, + "stream_context" => stream_context_create(array( + 'http' => array('protocol_version' => 1.0, + 'header' => 'Content-Type: application/soap+xml'))) + ) + ); + + try{ + try{ + $client = new SoapClient($wsdl, $parameters); + + //returns soapfault + }catch (Exception $e){ + $error = $e->__toString(); + + //if soap fault returned version mismatch or http headers error, try again with soap 1.2 + if ((preg_match('/Version/i', $error)) || (preg_match('/HTTP/i', $error))){ + + $this->log("Using Soap Version 1.2"); + $parameters = array_merge($parameters, array("soap_version" => SOAP_1_2)); + + //try connection again with 1.2 + $client = new SoapClient($wsdl, $parameters); + } + } + + //throws soap fault + }catch (Exception $e){ + $error = $e->getMessage(); + + $this->logStatus("Failed to establish soap connection: " . $error); + $this->saveLogAndExit(); + } + + $this->log(""); + $this->log("-- Soap Connection successfully completed --"); + $this->log(""); + + return $client; + } + + + + private function sushiTransfer($reportLayout){ + + + + $ppObj = $this->getPublisherOrPlatform(); + $serviceProvider = str_replace('"','',$ppObj->reportDisplayName); + + //if report layout is BR and Release is 3, change it to 1 + if((preg_match('/BR/i', $reportLayout)) && ($this->releaseNumber == "3")){ + $releaseNumber = '1'; + }else{ + $releaseNumber = $this->releaseNumber; + } + + if (($this->wsdlURL == '') || (strtoupper($this->wsdlURL) == 'COUNTER')){ + if ($this->releaseNumber == "4"){ + $wsdl = 'http://www.niso.org/schemas/sushi/counter_sushi4_0.wsdl'; + }else{ + $wsdl = 'http://www.niso.org/schemas/sushi/counter_sushi3_0.wsdl'; + } + }else{ + $wsdl=$this->wsdlURL; + } + + + + $createDate = date("Y-m-d\TH:i:s.0\Z"); + $id = uniqid("CORAL:", true); + + // look at $Security to ses if it uses an extension + if(preg_match('/Extension=/i', $this->security)){ + $extensions = array(); + $varlist = explode(";", $this->security); + foreach( $varlist as $params){ + list($extVar, $extVal) = explode("=", $params); + $extensions[$extVar] = $extVal; + if ($extVar == 'Extension'){ + $extension = $extVal; + } + } + } + + if (!empty($extension)){ + include BASE_DIR . 'sushiincludes/extension_'.$extension.'.inc.php'; + }else{ + if (preg_match("/http/i", $this->security)){ + $this->log("Using HTTP Basic authentication via login and password."); + + $parameters = array( + 'login' => $this->login, + 'password' => $this->password, + 'location' => $this->serviceURL, + ); + }else{ + if ((strtoupper($this->wsdlURL) != 'COUNTER') && ($this->wsdlURL != '')){ + $this->log("Using provided wsdl: $wsdl"); + $parameters = array(); + + }else{ + $this->log("Using COUNTER wsdl, connecting to $this->serviceURL"); + $parameters = array('location'=> $this->serviceURL); + } + } + + $client = $this->soapConnection($wsdl, $parameters); + } + + if (preg_match("/wsse/i", $this->security)){ + // Prepare SoapHeader parameters + $strWSSENS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; + $objSoapVarUser = new SoapVar($this->login, XSD_STRING, NULL, $strWSSENS, NULL, $strWSSENS); + $objSoapVarPass = new SoapVar($this->password, XSD_STRING, NULL, $strWSSENS, NULL, $strWSSENS); + $objWSSEAuth = new clsWSSEAuth($objSoapVarUser, $objSoapVarPass); + $objSoapVarWSSEAuth = new SoapVar($objWSSEAuth, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'UsernameToken', $strWSSENS); + $objWSSEToken = new clsWSSEToken($objSoapVarWSSEAuth); + $objSoapVarWSSEToken = new SoapVar($objWSSEToken, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'UsernameToken', $strWSSENS); + $objSoapVarHeaderVal=new SoapVar($objSoapVarWSSEToken, SOAP_ENC_OBJECT, NULL, $strWSSENS, 'Security', $strWSSENS); + $objSoapVarWSSEHeader = new SoapHeader($strWSSENS, 'Security', $objSoapVarHeaderVal,false); + + // Prepare Soap Client + try{ + $client->__setSoapHeaders(array($objSoapVarWSSEHeader)); + }catch (Exception $e){ + $error = $e->getMessage(); + $this->logStatus("Failed to connect to $serviceProvider: " . $error); + $this->log("Tried: " . var_dump($client)); + $this->saveLogAndExit($reportLayout); + } + + } + + try{ + $reportRequest = array + ('Requestor' => array + ('ID' => $this->requestorID, + 'Name' => 'CORAL Processing', + 'Email' => $this->requestorID + ), + 'CustomerReference' => array + ('ID' => $this->customerID, + 'Name' => 'CORAL Processing' + ), + 'ReportDefinition' => array + ('Filters' => array + ('UsageDateRange' => array + ('Begin' => $this->startDate, + 'End' => $this->endDate + ) + ), + 'Name' => $reportLayout, + 'Release' => $releaseNumber + ), + 'Created' => $createDate, + 'ID' => $id, + 'connection_timeout' => 1000 + ); + + $result = $client->GetReport($reportRequest); + }catch(Exception $e){ + $error = $e->getMessage(); + + $this->logStatus("Exception performing GetReport with connection to $serviceProvider: $error"); + + //exceptions seem to happen that don't matter, continue processing and if no data or error is found then it will quit. + //$this->saveLogAndExit($reportLayout); + } + + $xml = $client->__getLastResponse(); + + $fname = $serviceProvider.'_'.$reportLayout.'_'.$this->startDate.'_'.$this->endDate.'.xml'; + $replace="_"; + $pattern="/([[:alnum:]_\.-]*)/"; + $fname = 'sushistore/' . str_replace(str_split(preg_replace($pattern,$replace,$fname)),$replace,$fname); + + $xmlFileName = BASE_DIR . $fname; + file_put_contents($xmlFileName, $xml); + + //open file to look for errors + $reader = new XMLReader(); + if (!$reader->open($xmlFileName)) { + $this->logStatus("Failed trying to open XML File: " . $xmlFileName . ". This could be due to not having write access to the /sushistore/ directory."); + $this->saveLogAndExit($reportLayout); + } + + $message = ""; + while ($reader->read()) { + if ($reader->nodeType == XMLReader::ELEMENT){ + if ($reader->localName == 'Severity') { + $reader->read(); + $severity = trim($reader->value); + } + if ($reader->localName == 'Message') { + $reader->read(); + $message = trim($reader->value); + } + + } + } + + $reader->close(); + + if ($message !=""){ + if (($severity == "Error") || (stripos($message, "Error") !== FALSE)){ + $this->logStatus("Failed to request report from $serviceProvider: " . $message); + + $this->log("Please fix the settings for this provider and try again."); + $this->saveLogAndExit($reportLayout); + }else{ + $this->logStatus("$serviceProvider says: $severity: $message"); + } + } + + $this->log("$reportLayout successfully retrieved from $serviceProvider for start date: $this->startDate, end date: $this->endDate"); + + $this->log(""); + $this->log("-- Sushi Transfer completed --"); + + return $fname; + + + } + + + + private function parseXML($fName, $reportLayout, $overwritePlatform){ + + + ////////////////////////////////////// + //PARSE XML!! + ////////////////////////////////////// + + $serviceProvider = $this->getServiceProvider(); + $xmlFileName = BASE_DIR . $fName; + + //read layouts ini file to get the available layouts + $layoutsArray = parse_ini_file(BASE_DIR . "layouts.ini", true); + $layoutColumns = array(); + + $reader = new XMLReader(); + if (!$reader->open($xmlFileName, 'UTF-8')) { + $this->logStatus("Failed trying to open XML File: " . $xmlFileName . ". This could be due to not having write access to the /sushistore/ directory."); + $this->saveLogAndExit($reportLayout); + } + + + $layoutCode = ""; + $countArray = array('ytd'=>null,'pdf'=>null,'html'=>null); + $txtOut = ""; + $m = null; //month + + while ($reader->read()) { + //First - get report information + if (($reader->nodeType == XMLReader::ELEMENT) && ($reader->localName == 'Report') && (count($layoutColumns) == '0')) { + $name = $reader->getAttribute("Name"); + $version = $reader->getAttribute("Version"); + + $layoutCode = $name; + + if (($version == "3") || ($version =="4")){ + $version = "R" . $version; + } + if ($version != ''){ + $layoutCode .= "_" . $version; + }else{ + $layoutCode .= "_R" . $this->releaseNumber; + } + + //At this point, determine the format of the report to port to csv from the layouts.ini file + $layoutKey = $layoutsArray['ReportTypes'][$layoutCode]; + $layoutColumns = $layoutsArray[$layoutKey]['columns']; + + + //if this way of determining layout was unsuccessful, just use the layout sent in + if (count($layoutColumns) == "0"){ + $layoutCode = $reportLayout . "_R" . $this->releaseNumber; + + $layoutKey = $layoutsArray['ReportTypes'][$layoutCode]; + $layoutColumns = $layoutsArray[$layoutKey]['columns']; + } + + $this->log("Layout validated successfully against layouts.ini : " . $layoutCode); + + + } + + if (($reader->nodeType == XMLReader::ELEMENT) && ($reader->localName == 'ReportItems')) { + if ((count($layoutColumns) == '0') || ($layoutCode == '')){ + $this->logStatus("Failed determining layout: Reached report items before establishing layout. Please make sure this layout is set up in layouts.ini"); + $this->saveLogAndExit($reportLayout); + } + + //reset variables + $identifierArray=array(); + $reportArray = array('ytd'=>null,'ytdHTML'=>null,'ytdPDF'=>null); + + //loop through each element under "Item" + while ($reader->read()) { + + //get the element name + if ($reader->nodeType == XMLReader::ELEMENT){ + $elementName = trim($reader->localName); + + //move to next to get the text + if (($elementName != "Instance") && ($elementName != "ItemIdentifier") && ($elementName != "Period")){ + $reader->read(); + } + + + + if ($reader->nodeType == XMLReader::TEXT + || $reader->nodeType == XMLReader::CDATA + || $reader->nodeType == XMLReader::WHITESPACE + || $reader->nodeType == XMLReader::SIGNIFICANT_WHITESPACE) { + $elementValue = trim($reader->value); + + switch ($elementName) { + case 'ItemPlatform': + if ($overwritePlatform){ + $reportArray['platform'] = $serviceProvider; + }else{ + $reportArray['platform'] = $elementValue; + } + + break; + case 'ItemPublisher': + $reportArray['publisher'] = $elementValue; + break; + case 'ItemName': + $reportArray['title'] = $elementValue; + break; + case 'ActivityType': + $reportArray['activityType'] = strtoupper($reader->value); + break; + case 'Type': + $idType = strtoupper($reader->value); + break; + case 'Value': + $identifierArray[$idType] = $reader->value; + break; + case 'Begin': + $date = new DateTime($reader->value); + if ($m === null) { + $m = strtolower($date->format('M')); + $countArray = array('ytd'=>null,'pdf'=>null,'html'=>null); + } else if (strtolower($date->format('M')) !== $m){ + $totalCountsArray[$m] = $countArray; + + $m = strtolower($date->format('M')); + //$y = strtolower($date->format('Y')); + + $countArray = array('ytd'=>null,'pdf'=>null,'html'=>null); + } + + break; + case 'MetricType': + $metricType = strtoupper($reader->value); + + //make sure metric types have conformity + if (!(strpos($metricType,'HTML') === false)){ + $metricType ='html'; + }else if (!(strpos($metricType,'PDF') === false)){ + $metricType ='pdf'; + }else{ + $metricType ='ytd'; + } + + break; + case 'Count': + $countArray[$metricType] = $reader->value; + break; + } + + + } + + //Finished parsing the Title!!! + }else if ($reader->nodeType == XMLReader::END_ELEMENT + && $reader->localName == "ReportItems") { + + foreach($identifierArray as $key => $value){ + if (!(strrpos($key,'PRINT') === false) && !(strrpos($key,'ISSN') === false)){ + $reportArray['issn'] = $value; + }else if (!(strrpos($key,'ONLINE') === false) && !(strrpos($key,'ISSN') === false)){ + $reportArray['eissn'] = $value; + }else if (!(strpos($key,'PRINT') === false) && !(strpos($key,'ISBN') === false)){ + $reportArray['isbn'] = $value; + }else if (!(strpos($key,'ONLINE') === false) && !(strpos($key,'ISBN') === false)){ + $reportArray['eisbn'] = $value; + }else if (!(strpos($key,'DOI') === false)){ + $reportArray['doi'] = $value; + }else if (!(strpos($key,'PROPRIETARY') === false)){ + $reportArray['pi']=$value; + } + + } + + //get the last array into the totals array + $totalCountsArray[$m] = $countArray; + + //now figure out the months and the ytd, etc totals + foreach ($totalCountsArray as $key => $countArray){ + + if ($key != ''){ + + if (intval($countArray['ytd']) == "0"){ + $reportArray[$key] = intval($countArray['pdf']) + intval($countArray['html']); + }else{ + $reportArray[$key] = intval($countArray['ytd']); + } + + if ($reportArray['ytd']===null) + $reportArray['ytd'] = intval($countArray['ytd']); + else + $reportArray['ytd'] += intval($countArray['ytd']); + + if ($reportArray['ytdPDF']===null) + $reportArray['ytdPDF'] = intval($countArray['pdf']); + else + $reportArray['ytdPDF'] += intval($countArray['pdf']); + + if ($reportArray['ytdHTML']===null) + $reportArray['ytdHTML'] = intval($countArray['html']); + else + $reportArray['ytdHTML'] += intval($countArray['html']); + } + + } + + + //Now look at the report's layoutcode's columns to order them properly + $finalArray=array(); + foreach($layoutColumns as $colName){ + if (isset($reportArray[$colName])) + $finalArray[] = $reportArray[$colName]; + else + $finalArray[] = null; + } + + $txtOut .= implode($finalArray,"\t") . "\n"; + + $totalCountsArray=array(); + break; + } + } + } + + } + + $reader->close(); + + if (($layoutKey == "") || (count($layoutColumns) == '0') || ($txtOut == "")){ + if (file_exists($xmlFileName)) { + $this->logStatus("Failed XML parsing or no data was found."); + + $xml = simplexml_load_file($xmlFileName); + $this->log("The following is the XML response:"); + + $this->log(htmlentities(file_get_contents($xmlFileName))); + + }else{ + $this->log("Failed loading XML file. Please verify you have write permissions on /sushistore/ directory."); + } + + $this->saveLogAndExit($layoutCode); + } + + #Save final text delimited "file" and log output on server + $txtFile = strtotime("now") . '.txt'; + $fp = fopen(BASE_DIR . 'archive/' . $txtFile, 'w'); + fwrite($fp, $txtOut); + fclose($fp); + + + $this->log(""); + $this->log("-- Sushi XML parsing completed --"); + + $this->log("Archive/Text File Name: " . Utility::getPageURL() . 'archive/' . $txtFile); + + $this->saveLogAndExit($layoutCode, $txtFile, true); + } + +} + + +//for soap headers +class clsWSSEAuth{ + private $username; + private $password; + function __construct($username, $password){ + $this->username=$username; + $this->password=$password; + } +} +class clsWSSEToken{ + private $usernameToken; + function __construct ($innerVal){ + $this->usernameToken = $innerVal; + } +} + + + +?> diff --git a/admin/classes/domain/Title.php b/admin/classes/domain/Title.php index e5fa519..fb612bc 100755 --- a/admin/classes/domain/Title.php +++ b/admin/classes/domain/Title.php @@ -1,358 +1,360 @@ -. -** -************************************************************************************************************************** -*/ - -class Title extends DatabaseObject { - - protected function defineRelationships() {} - - protected function overridePrimaryKeyName() {} - - protected function defineAttributes() { - $this->addAttribute('titleID'); - $this->addAttribute('title'); - $this->addAttribute('resourceType'); - } - - //returns identifier (issn, isbn, etc) only of the first print identifier found for this title - public function getIdentifier($idType){ - $query = "SELECT * FROM TitleIdentifier ti - WHERE ti.titleID = '" . $this->titleID . "' - AND identifierType='" . $idType . "' - ORDER BY 1 - LIMIT 1;"; - - $result = $this->db->processQuery($query, 'assoc'); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['titleIdentifierID'])){ - $identifier = $result['identifier']; - return substr($identifier, 0, 4) . "-" . substr($identifier, 4, 4); - }else{ - return; - } - - - } - - - - //find out if there is an existing identifier for a title - public function getExistingIdentifier($identifier){ - - $query = "SELECT distinct identifier - FROM TitleIdentifier ti - WHERE ti.titleID = '" . $this->titleID . "' - AND identifier = '" . $identifier . "' - ORDER BY identifierType DESC - LIMIT 1;"; - - $result = $this->db->processQuery($query, 'assoc'); - - //only one identifier will be returned - if (isset($result['identifier'])){ - return true; - }else{ - return false; - } - - - } - - - //returns array of identifier objects - public function getIdentifiers($idType = null){ - - if($idType){ - $addWhere = " AND identifierType='" . $idType . "'"; - } - - $query = "SELECT * - FROM TitleIdentifier ti - WHERE ti.titleID = '" . $this->titleID . "' " . $addWhere . " - ORDER BY identifierType DESC;"; - - $result = $this->db->processQuery($query, 'assoc'); - - $objects = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['titleIdentifierID'])){ - $object = new TitleIdentifier(new NamedArguments(array('primaryKey' => $result['titleIdentifierID']))); - array_push($objects, $object); - }else{ - foreach ($result as $row) { - $object = new TitleIdentifier(new NamedArguments(array('primaryKey' => $row['titleIdentifierID']))); - array_push($objects, $object); - } - } - - return $objects; - } - - - //returns array of title objects - public function getRelatedTitles(){ - - $query = "SELECT DISTINCT t.titleID - FROM TitleIdentifier ti, Title t, TitleIdentifier ti2 - WHERE ti.titleID = t.titleID - AND ti.identifier = ti2.identifier - AND ti.identifierType = ti2.identifierType - AND ti2.titleID = '" . $this->titleID . "';"; - - $result = $this->db->processQuery($query, 'assoc'); - - $objects = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['titleID'])){ - $object = new Title(new NamedArguments(array('primaryKey' => $result['titleID']))); - array_push($objects, $object); - }else{ - foreach ($result as $row) { - $object = new Title(new NamedArguments(array('primaryKey' => $row['titleID']))); - array_push($objects, $object); - } - } - - return $objects; - } - - - - - //returns array of yearly stats for this title - public function getYearlyStats($archiveInd, $year, $publisherPlatformID, $activityType){ - - $addWhere = ''; - if ($activityType){ - $addWhere=" AND activityType='" . $activityType . "'"; - } - $query = "SELECT titleID, totalCount, ytdHTMLCount, ytdPDFCount - FROM YearlyUsageSummary - WHERE titleID = '" . $this->titleID . "' - AND archiveInd ='" . $archiveInd . "' - AND year='" . $year . "'" . $addWhere . " - AND publisherPlatformID = '" . $publisherPlatformID . "';"; - - $result = $this->db->processQuery($query, 'assoc'); - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['titleID'])){ - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - foreach ($result as $row) { - $resultArray = array(); - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - array_push($allArray, $resultArray); - } - } - - return $allArray; - } - - - //returns array of the first listed identifier objects - public function getByTitle($resourceType, $resourceTitle, $pISSN, $eISSN, $pISBN, $eISBN, $publisherPlatformID){ - - //default search to print ISBN only - we're confident that's the same title - if ($pISBN) { - $query = "SELECT DISTINCT ti.titleID as titleID FROM TitleIdentifier ti INNER JOIN Title t USING (titleID) WHERE identifierType = 'ISBN' AND identifier = '" . $pISBN . "' AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; - - //Otherwise try ISSN if it's a journal or there's no p-isbn - } else if (($pISSN) && (($resourceType == "Journal") || (!$pISBN))) { - $query = "SELECT DISTINCT ti.titleID as titleID FROM TitleIdentifier ti INNER JOIN Title t USING (titleID) WHERE identifierType = 'ISSN' AND identifier = '" . $pISSN . "' AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; - - //not so confident about online identifier so we also search on common platform / publisher - }else if ((!$pISBN) && ($eISBN)){ - $query = "SELECT DISTINCT t.titleID as titleID FROM TitleIdentifier ti INNER JOIN Title t ON (ti.titleID = t.titleID) INNER JOIN MonthlyUsageSummary mus ON (mus.titleID = t.titleID) WHERE identifierType = 'eISBN' AND identifier = '" . $eISBN . "' AND publisherPlatformID = '" . $publisherPlatformID . "' AND ucase(title) = ucase('" . $resourceTitle . "') AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; - - - //not so confident about online identifier so we also search on common platform / publisher - }else if ((!$pISSN) && ($eISSN) && ($resourceType == "Journal")){ - $query = "SELECT DISTINCT t.titleID as titleID FROM TitleIdentifier ti INNER JOIN Title t ON (ti.titleID = t.titleID) INNER JOIN MonthlyUsageSummary mus ON (mus.titleID = t.titleID) WHERE identifierType = 'eISSN' AND identifier = '" . $eISSN . "' AND publisherPlatformID = '" . $publisherPlatformID . "' AND ucase(title) = ucase('" . $resourceTitle . "') AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; - - //this is a title search so we're also searching on common platform / publisher (used for Databases probably primarily) - }else if ((!$pISSN) && (!$eISSN) && (!$pISBN) && (!$eISBN)){ - $query = "SELECT DISTINCT t.titleID as titleID FROM Title t INNER JOIN MonthlyUsageSummary mus ON (mus.titleID = t.titleID) WHERE publisherPlatformID = '" . $publisherPlatformID . "' AND ucase(title) = ucase('" . $resourceTitle . "') AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; - } - - $result = $this->db->processQuery($query, 'assoc'); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['titleID'])){ - return $result['titleID']; - }else{ - return false; - } - - } - - - - - //remove an entire month for this title/publisher - public function deleteMonth($archiveInd, $year, $month, $publisherPlatformID){ - - //now formulate query - $query = "DELETE FROM MonthlyUsageSummary - WHERE archiveInd = '" . $archiveInd . "' - AND titleID = '" . $this->titleID . "' - AND publisherPlatformID = '" . $publisherPlatformID . "' - AND year = '" . $year . "' - AND month = '" . $month . "';"; - - return $this->db->processQuery($query); - - } - - - //remove an entire month for this title/publisher - public function deleteYearlyStats($archiveInd, $year, $publisherPlatformID, $activityType){ - - if ($activityType){ - $addWhere = " AND activityType='" . $activityType . "'"; - } - - //now formulate query - $query = "DELETE FROM YearlyUsageSummary - WHERE archiveInd = '" . $archiveInd . "' - AND titleID = '" . $this->titleID . "' - AND publisherPlatformID = '" . $publisherPlatformID . "' " . $addWhere . " - AND year = '" . $year . "';"; - - return $this->db->processQuery($query); - - } - - - //returns usage count only - public function getUsageCountByMonth($archiveInd, $year, $month, $publisherPlatformID){ - - $query = "SELECT usageCount FROM MonthlyUsageSummary - WHERE archiveInd = '" . $archiveInd . "' - AND titleID = '" . $this->titleID . "' - AND publisherPlatformID = '" . $publisherPlatformID . "' - AND year = '" . $year . "' - AND month = '" . $month . "';"; - - - - $result = $this->db->processQuery($query, 'assoc'); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['usageCount'])){ - return $result['usageCount']; - }else{ - return false; - } - - } - - - - - - //returns array of the first listed identifier objects - public function getTotalCountByYear($archiveInd, $year, $publisherPlatformID){ - - $query = "SELECT totalCount usageCount, ytdHTMLCount, ytdPDFCount FROM YearlyUsageSummary - WHERE archiveInd = '" . $archiveInd . "' - AND titleID = '" . $this->titleID . "' - AND publisherPlatformID = '" . $publisherPlatformID . "' - AND year = '" . $year . "';"; - - - - $result = $this->db->processQuery($query, 'assoc'); - - $resultArray = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['usageCount'])){ - $resultArray['usageCount'] = $result['usageCount']; - $resultArray['ytdHTMLCount'] = $result['ytdHTMLCount']; - $resultArray['ytdPDFCount'] = $result['ytdPDFCount']; - - return $resultArray; - }else{ - return false; - } - - } - - - - //returns array of yearly stats for this title - public function get12MonthUsageCount($archiveInd, $publisherPlatformID, $yearAddWhere){ - - $query = "SELECT usageCount FROM MonthlyUsageSummary - WHERE archiveInd = '" . $archiveInd . "' - AND titleID = '" . $this->titleID . "' - AND publisherPlatformID = '" . $publisherPlatformID . "' - AND " . $yearAddWhere . ";"; - - $result = $this->db->processQuery($query, 'assoc'); - - $allArray = array(); - $resultArray = array(); - - //need to do this since it could be that there's only one request and this is how the dbservice returns result - if (isset($result['usageCount'])){ - foreach (array_keys($result) as $attributeName) { - $resultArray[$attributeName] = $result[$attributeName]; - } - - array_push($allArray, $resultArray); - }else{ - if ($result){ - foreach ($result as $row) { - $resultArray = array(); - if ($resultArray){ - foreach (array_keys($row) as $attributeName) { - $resultArray[$attributeName] = $row[$attributeName]; - } - } - array_push($allArray, $resultArray); - } - } - } - - return $allArray; - } - - - - - - - - -} - -?> +. +** +************************************************************************************************************************** +*/ + +class Title extends DatabaseObject { + + protected function defineRelationships() {} + + protected function overridePrimaryKeyName() {} + + protected function defineAttributes() { + $this->addAttribute('titleID'); + $this->addAttribute('title'); + $this->addAttribute('resourceType'); + } + + //returns identifier (issn, isbn, etc) only of the first print identifier found for this title + public function getIdentifier($idType){ + $query = "SELECT * FROM TitleIdentifier ti + WHERE ti.titleID = '" . $this->titleID . "' + AND identifierType='" . $idType . "' + ORDER BY 1 + LIMIT 1;"; + + $result = $this->db->processQuery($query, 'assoc'); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['titleIdentifierID'])){ + $identifier = $result['identifier']; + return substr($identifier, 0, 4) . "-" . substr($identifier, 4, 4); + }else{ + return; + } + + + } + + + + //find out if there is an existing identifier for a title + public function getExistingIdentifier($identifier){ + + $query = "SELECT distinct identifier + FROM TitleIdentifier ti + WHERE ti.titleID = '" . $this->titleID . "' + AND identifier = '" . $identifier . "' + ORDER BY identifierType DESC + LIMIT 1;"; + + $result = $this->db->processQuery($query, 'assoc'); + + //only one identifier will be returned + if (isset($result['identifier'])){ + return true; + }else{ + return false; + } + + + } + + + //returns array of identifier objects + public function getIdentifiers($idType = null){ + + if($idType){ + $addWhere = " AND identifierType='" . $idType . "'"; + } + + $query = "SELECT * + FROM TitleIdentifier ti + WHERE ti.titleID = '" . $this->titleID . "' " . $addWhere . " + ORDER BY identifierType DESC;"; + + $result = $this->db->processQuery($query, 'assoc'); + + $objects = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['titleIdentifierID'])){ + $object = new TitleIdentifier(new NamedArguments(array('primaryKey' => $result['titleIdentifierID']))); + array_push($objects, $object); + }else{ + foreach ($result as $row) { + $object = new TitleIdentifier(new NamedArguments(array('primaryKey' => $row['titleIdentifierID']))); + array_push($objects, $object); + } + } + + return $objects; + } + + + //returns array of title objects + public function getRelatedTitles(){ + + $query = "SELECT DISTINCT t.titleID + FROM TitleIdentifier ti, Title t, TitleIdentifier ti2 + WHERE ti.titleID = t.titleID + AND ti.identifier = ti2.identifier + AND ti.identifierType = ti2.identifierType + AND ti2.titleID = '" . $this->titleID . "';"; + + $result = $this->db->processQuery($query, 'assoc'); + + $objects = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['titleID'])){ + $object = new Title(new NamedArguments(array('primaryKey' => $result['titleID']))); + array_push($objects, $object); + }else{ + foreach ($result as $row) { + $object = new Title(new NamedArguments(array('primaryKey' => $row['titleID']))); + array_push($objects, $object); + } + } + + return $objects; + } + + + + + //returns array of yearly stats for this title + public function getYearlyStats($archiveInd, $year, $publisherPlatformID, $activityType){ + + $addWhere = ''; + if ($activityType){ + $addWhere=" AND activityType='" . $activityType . "'"; + } + $query = "SELECT titleID, totalCount, ytdHTMLCount, ytdPDFCount + FROM YearlyUsageSummary + WHERE titleID = '" . $this->titleID . "' + AND archiveInd ='" . $archiveInd . "' + AND year='" . $year . "'" . $addWhere . " + AND publisherPlatformID = '" . $publisherPlatformID . "';"; + + $result = $this->db->processQuery($query, 'assoc'); + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['titleID'])){ + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + foreach ($result as $row) { + $resultArray = array(); + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + array_push($allArray, $resultArray); + } + } + + return $allArray; + } + + + //returns array of the first listed identifier objects + public function getByTitle($resourceType, $resourceTitle, $pISSN, $eISSN, $pISBN, $eISBN, $publisherPlatformID){ + + //default search to print ISBN only - we're confident that's the same title + if ($pISBN) { + $query = "SELECT DISTINCT ti.titleID as titleID FROM TitleIdentifier ti INNER JOIN Title t USING (titleID) WHERE identifierType = 'ISBN' AND identifier = '" . $pISBN . "' AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; + + //Otherwise try ISSN if it's a journal or there's no p-isbn + } else if (($pISSN) && (($resourceType == "Journal") || (!$pISBN))) { + $query = "SELECT DISTINCT ti.titleID as titleID FROM TitleIdentifier ti INNER JOIN Title t USING (titleID) WHERE identifierType = 'ISSN' AND identifier = '" . $pISSN . "' AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; + + //not so confident about online identifier so we also search on common platform / publisher + }else if ((!$pISBN) && ($eISBN)){ + $query = "SELECT DISTINCT t.titleID as titleID FROM TitleIdentifier ti INNER JOIN Title t ON (ti.titleID = t.titleID) INNER JOIN MonthlyUsageSummary mus ON (mus.titleID = t.titleID) WHERE identifierType = 'eISBN' AND identifier = '" . $eISBN . "' AND publisherPlatformID = '" . $publisherPlatformID . "' AND ucase(title) = ucase('" . $resourceTitle . "') AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; + + + //not so confident about online identifier so we also search on common platform / publisher + }else if ((!$pISSN) && ($eISSN) && ($resourceType == "Journal")){ + $query = "SELECT DISTINCT t.titleID as titleID FROM TitleIdentifier ti INNER JOIN Title t ON (ti.titleID = t.titleID) INNER JOIN MonthlyUsageSummary mus ON (mus.titleID = t.titleID) WHERE identifierType = 'eISSN' AND identifier = '" . $eISSN . "' AND publisherPlatformID = '" . $publisherPlatformID . "' AND ucase(title) = ucase('" . $resourceTitle . "') AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; + + //this is a title search so we're also searching on common platform / publisher (used for Databases probably primarily) + }else if ((!$pISSN) && (!$eISSN) && (!$pISBN) && (!$eISBN)){ + $query = "SELECT DISTINCT t.titleID as titleID FROM Title t INNER JOIN MonthlyUsageSummary mus ON (mus.titleID = t.titleID) WHERE publisherPlatformID = '" . $publisherPlatformID . "' AND ucase(title) = ucase('" . $resourceTitle . "') AND t.resourceType = '" . $resourceType . "' LIMIT 1;"; + } + + $result = $this->db->processQuery($query, 'assoc'); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['titleID'])){ + return $result['titleID']; + }else{ + return false; + } + + } + + + + + //remove an entire month for this title/publisher + public function deleteMonth($archiveInd, $year, $month, $publisherPlatformID){ + + //now formulate query + $query = "DELETE FROM MonthlyUsageSummary + WHERE archiveInd = '" . $archiveInd . "' + AND titleID = '" . $this->titleID . "' + AND publisherPlatformID = '" . $publisherPlatformID . "' + AND year = '" . $year . "' + AND month = '" . $month . "';"; + + return $this->db->processQuery($query); + + } + + + //remove an entire month for this title/publisher + public function deleteYearlyStats($archiveInd, $year, $publisherPlatformID, $activityType){ + + if ($activityType){ + $addWhere = " AND activityType='" . $activityType . "'"; + } else { + $addWhere = null; + } + + //now formulate query + $query = "DELETE FROM YearlyUsageSummary + WHERE archiveInd = '" . $archiveInd . "' + AND titleID = '" . $this->titleID . "' + AND publisherPlatformID = '" . $publisherPlatformID . "' " . $addWhere . " + AND year = '" . $year . "';"; + + return $this->db->processQuery($query); + + } + + + //returns usage count only + public function getUsageCountByMonth($archiveInd, $year, $month, $publisherPlatformID){ + + $query = "SELECT usageCount FROM MonthlyUsageSummary + WHERE archiveInd = '" . $archiveInd . "' + AND titleID = '" . $this->titleID . "' + AND publisherPlatformID = '" . $publisherPlatformID . "' + AND year = '" . $year . "' + AND month = '" . $month . "';"; + + + + $result = $this->db->processQuery($query, 'assoc'); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['usageCount'])){ + return $result['usageCount']; + }else{ + return false; + } + + } + + + + + + //returns array of the first listed identifier objects + public function getTotalCountByYear($archiveInd, $year, $publisherPlatformID){ + + $query = "SELECT totalCount usageCount, ytdHTMLCount, ytdPDFCount FROM YearlyUsageSummary + WHERE archiveInd = '" . $archiveInd . "' + AND titleID = '" . $this->titleID . "' + AND publisherPlatformID = '" . $publisherPlatformID . "' + AND year = '" . $year . "';"; + + + + $result = $this->db->processQuery($query, 'assoc'); + + $resultArray = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['usageCount'])){ + $resultArray['usageCount'] = $result['usageCount']; + $resultArray['ytdHTMLCount'] = $result['ytdHTMLCount']; + $resultArray['ytdPDFCount'] = $result['ytdPDFCount']; + + return $resultArray; + }else{ + return false; + } + + } + + + + //returns array of yearly stats for this title + public function get12MonthUsageCount($archiveInd, $publisherPlatformID, $yearAddWhere){ + + $query = "SELECT usageCount FROM MonthlyUsageSummary + WHERE archiveInd = '" . $archiveInd . "' + AND titleID = '" . $this->titleID . "' + AND publisherPlatformID = '" . $publisherPlatformID . "' + AND " . $yearAddWhere . ";"; + + $result = $this->db->processQuery($query, 'assoc'); + + $allArray = array(); + $resultArray = array(); + + //need to do this since it could be that there's only one request and this is how the dbservice returns result + if (isset($result['usageCount'])){ + foreach (array_keys($result) as $attributeName) { + $resultArray[$attributeName] = $result[$attributeName]; + } + + array_push($allArray, $resultArray); + }else{ + if ($result){ + foreach ($result as $row) { + $resultArray = array(); + if ($resultArray){ + foreach (array_keys($row) as $attributeName) { + $resultArray[$attributeName] = $row[$attributeName]; + } + } + array_push($allArray, $resultArray); + } + } + } + + return $allArray; + } + + + + + + + + +} + +?> diff --git a/ajax_forms.php b/ajax_forms.php index ae0de66..7c9f45f 100755 --- a/ajax_forms.php +++ b/ajax_forms.php @@ -790,7 +790,6 @@ ?> -

    diff --git a/ajax_htmldata.php b/ajax_htmldata.php index f36eb1d..7c53b82 100755 --- a/ajax_htmldata.php +++ b/ajax_htmldata.php @@ -27,6 +27,7 @@ include "common.php"; $action = $_REQUEST['action']; +$classAdd = ""; switch ($action) { @@ -309,7 +310,7 @@ } - echo "
    "; + echo "


    "; //Notes if (isset($_GET['publisherPlatformID']) && ($_GET['publisherPlatformID'] != '')){ @@ -555,7 +556,7 @@ echo "

    " . _("Statistics Management") . "

    "; - + $holdYear = ""; foreach($statsArray as $statArray){ $year=$statArray['year']; if ($year != $holdYear){ @@ -1353,7 +1354,7 @@ $obj = new PublisherPlatform(new NamedArguments(array('primaryKey' => $sushi['publisherPlatformID']))); } - if ($obj->getImportLogs[0]){ + if (isset($obj->getImportLogs[0])){ $lastImportObj = $obj->getImportLogs[0]; $lastImportDate = format_date($lastImportObj->importDateTime); $lastImportDetails = nl2br($lastImportObj->details); diff --git a/directory.php b/directory.php index cb4c4eb..c69f610 100755 --- a/directory.php +++ b/directory.php @@ -23,8 +23,8 @@ // Useful directory constants, ending with |/|. -define('ADMIN_DIR', dirname(__FILE__) . '/admin/'); define('BASE_DIR', dirname(__FILE__) . '/'); +define('ADMIN_DIR', BASE_DIR . 'admin/'); define('CLASSES_DIR', ADMIN_DIR . 'classes/'); // Automatically load undefined classes from subdirectories of |CLASSES_DIR|. diff --git a/index.php b/index.php index 168c4ea..f9c7411 100755 --- a/index.php +++ b/index.php @@ -31,7 +31,7 @@ //except we don't want it to retain if they press the 'index' button //check what referring script is -if ($_SESSION['ref_script'] != "publisherPlatform.php"){ +if ((isset($_SESSION['ref_script'])) and ($_SESSION['ref_script'] != "publisherPlatform.php")){ $reset = "Y"; } @@ -124,3 +124,4 @@ //print footer include 'templates/footer.php'; +?> \ No newline at end of file diff --git a/install/CORALInstaller.php b/install/CORALInstaller.php index 0791cde..d79c9f8 100755 --- a/install/CORALInstaller.php +++ b/install/CORALInstaller.php @@ -15,6 +15,18 @@ class CORALInstaller { protected $statusNotes; protected $config; protected $updates = array( + "1.2" => array( + "privileges" => array("ALTER","CREATE"), + "installedTablesCheck" => array("Version"), + "description" => "

    The 1.2 update includes the following

    +
      +
    • Misc. bug fixes
    • +
    • Migrated from deprecated mysql to mysqli functions
    • +
    • Added form validation
    • +
    • SUSHI improvements
    • +
    +

    The database change will increae the number of the allowed characters in the TitleIdentifer table.

    " + ), "1.1" => array( "privileges" => array("ALTER","CREATE","DROP"), "installedTablesCheck" => array("Layout"), @@ -51,17 +63,10 @@ public function connect($username = null, $password = null) { if ($password === null) { $password = $this->config->database->password; } - $this->db = @mysql_connect($host, $username, $password); + $this->db = @mysqli_connect($host, $username, $password, $this->config->database->name); if (!$this->db) { - $this->error = mysql_error(); - if (!$this->error) { - $this->error = "Access denied for user '$username'"; - } - } else { - $databaseName = $this->config->database->name; - mysql_select_db($databaseName, $this->db); - $this->error = mysql_error($this->db); + $this->error = mysqli_error($this->db); } if ($this->error) { @@ -73,30 +78,36 @@ public function connect($username = null, $password = null) { } public function query($sql) { - $result = mysql_query($sql, $this->db); + $result = mysqli_query($this->db, $sql); $this->checkForError(); $data = array(); - if (is_resource($result)) { - while ($row = mysql_fetch_array($result)) { - array_push($data, $row); - } - } else if ($result) { - $data = mysql_insert_id($this->db); - } + if ($result instanceof mysqli_result) { - return $data; - } + while ($row = mysqli_fetch_array($result)) { + if (mysqli_affected_rows($this->db) > 1) { + array_push($data, $row); + } else { + $data = $row; + } + } + mysqli_free_result($result); + } else if ($result) { + $data = mysqli_insert_id($this->db); + } - protected function checkForError() { - if ($this->error = mysql_error($this->db)) { - throw new Exception("There was a problem with the database: " . $this->error); - } - } + return $data; + } + + protected function checkForError() { + if ($this->error = mysqli_error($this->db)) { + throw new Exception("There was a problem with the database: " . $this->error); + } + } - public function getDatabaseName() { - return $this->config->database->name; + public function getDatabase() { + return $this->db; } public function addErrorMessage($error) { @@ -241,6 +252,24 @@ public function isUpdateInstalled($version) { $this->statusNotes["version_".$version] = "Version $version already installed. Found tables: ".implode(", ", $installedTablesCheck); return true; } + else + { + $query = "SELECT version FROM ".$this->config->database->name.".Version WHERE version = '".$version."'"; + try{ + $databaseVersion = $this->query($query); + } + catch (Exception $e){ + //$this->statusNotes["version_".$version."_db_error"] = $e; + }; + + if($version == $databaseVersion[0]){ + $this->statusNotes["version_".$version] = "Version $version already installed."; + return true; + }else{ + $this->statusNotes["version_".$version] = "Version $version not installed. Could not find the version in the Version table"; + return false; + } + } } return false; } diff --git a/install/SECURITY-Enforce-redirect-to-login-page.patch b/install/SECURITY-Enforce-redirect-to-login-page.patch new file mode 100644 index 0000000..98f04a4 --- /dev/null +++ b/install/SECURITY-Enforce-redirect-to-login-page.patch @@ -0,0 +1,21 @@ +diff --git a/user.php b/user.php +index ef68901..1fe9e83 100755 +--- a/user.php ++++ b/user.php +@@ -57,6 +57,8 @@ if ($config->settings->authModule == 'Y'){ + $authURL = $util->getCORALURL() . "auth/" . $addURL . htmlentities($_SERVER['REQUEST_URI']); + header('Location: ' . $authURL, true); + ++ exit; //PREVENT SECURITY HOLE ++ + } + + +@@ -110,6 +112,7 @@ if ($loginID){ + //if the user doesn't exist in database we need to redirect them to a page to give instructions on how to be added + if ($user->privilegeID == ""){ + header('Location: not_avail.php'); ++ exit; //PREVENT SECURITY HOLE + } + } + diff --git a/install/install.php b/install/install.php index 005f74a..b84ee49 100755 --- a/install/install.php +++ b/install/install.php @@ -33,13 +33,13 @@ }else{ //first check connecting to host - $link = @mysqli_connect("$database_host", "$database_username", "$database_password"); + $link = mysqli_connect($database_host, $database_username, $database_password); if (!$link) { $errorMessage[] = "Could not connect to the server '" . $database_host . "'
    MySQL Error: " . mysqli_error($link); }else{ //next check that the database exists - $dbcheck = @mysqli_select_db($link, "$database_name"); + $dbcheck = mysqli_select_db($link, $database_name); if (!$dbcheck) { $errorMessage[] = "Unable to access the database '" . $database_name . "'. Please verify it has been created.
    MySQL Error: " . mysqli_error($link); }else{ @@ -142,7 +142,7 @@ }else{ //next check that the database exists - $dbcheck = @mysqli_select_db($link,$database_name); + $dbcheck = @mysqli_select_db($link, $database_name); if (!$dbcheck) { $errorMessage[] = "Unable to access the database '" . $database_name . "'. Please verify it has been created.
    MySQL Error: " . mysqli_error($link); }else{ @@ -323,7 +323,7 @@ } if (count($errorMessage) > 0){ - $step="5"; + $step="4"; } diff --git a/install/protected/update_1.2.sql b/install/protected/update_1.2.sql new file mode 100644 index 0000000..126cbc9 --- /dev/null +++ b/install/protected/update_1.2.sql @@ -0,0 +1,8 @@ +ALTER TABLE `TitleIdentifier` +CHANGE COLUMN `identifierType` `identifierType` VARCHAR(30) NULL DEFAULT NULL; + +CREATE TABLE `Version` ( + `version` varchar(10) NOT NULL +) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=latin1; + +INSERT INTO Version (version) values('1.2'); diff --git a/js/common.js b/js/common.js index 0339d5e..9c9a5b3 100755 --- a/js/common.js +++ b/js/common.js @@ -100,8 +100,14 @@ function toggleDivs(platformID) toggleDivState(divID, displayInds[divID]); - if (displayInds[divID] == 0) displayInds[divID] = 1; - else displayInds[divID] = 0 + if (displayInds[divID] == 0) + { + displayInds[divID] = 1; + } + else + { + displayInds[divID] = 0; + } } diff --git a/sushi.php b/sushi.php index c123e64..861382d 100755 --- a/sushi.php +++ b/sushi.php @@ -29,7 +29,7 @@ //this a SUSHI Service ID has been passed in, it needs to be run -if ($_POST['sushiServiceID'] > 0){ +if ((isset($_POST['sushiServiceID'])) and ($_POST['sushiServiceID'] > 0)) { $sushiServiceID = $_POST['sushiServiceID']; $sushiService = new SushiService(new NamedArguments(array('primaryKey' => $sushiServiceID))); @@ -60,13 +60,18 @@ -


    -


    +


       
    -
    +


       
    diff --git a/uploadComplete.php b/uploadComplete.php index be4f747..693c9c5 100755 --- a/uploadComplete.php +++ b/uploadComplete.php @@ -42,7 +42,7 @@ $layout = new Layout(new NamedArguments(array('primaryKey' => $_POST['layoutID']))); -$layoutKey = $layoutsArray[ReportTypes][$layout->layoutCode]; +$layoutKey = $layoutsArray['ReportTypes'][$layout->layoutCode]; $reportTypeDisplay = $layout->name; $resourceType = $layout->resourceType; @@ -126,14 +126,13 @@ $line = stream_get_line($file_handle, 10000000, "\n"); //set delimiter - if ($del == ""){ + if (($del) == NULL or (empty($del))) { if(count(explode("\t",$line)) > 5){ $del = "\t"; }else if (count(explode(",",$line)) > 5){ $del = ","; } - } //check column formats to get the year and months @@ -195,16 +194,40 @@ $platformName = $columnValues['platform']; $publisherName = $columnValues['publisher']; - $pISSN = $columnValues['issn']; - $eISSN = $columnValues['eissn']; - $pISBN = $columnValues['isbn']; - $eISBN = $columnValues['eisbn']; + if (isset($columnValues['issn'])) { + $pISSN = $columnValues['issn']; + } else { + $pISSN = null; + } + if (isset($columnValues['eissn'])) { + $eISSN = $columnValues['eissn']; + } else { + $eISSN = null; + } + if (isset($columnValues['isbn'])) { + $pISBN = $columnValues['isbn']; + } else { + $pISBN = null; + } + if (isset($columnValues['eisbn'])) { + $eISBN = $columnValues['eisbn']; + } else { + $eISBN = null; + } $doi = $columnValues['doi']; $pi = $columnValues['pi']; - $activityType = $columnValues['activityType']; - $sectionType = $columnValues['sectionType']; + if (isset($columnValues['activityType'])) { + $activityType = $columnValues['activityType']; + } else { + $activityType = null; + } + if (isset($columnValues['sectionType'])) { + $sectionType = $columnValues['sectionType']; + } else { + $sectionType = null; + } $ytd = $columnValues['ytd']; $ytdHTML = $columnValues['ytdHTML']; @@ -232,7 +255,7 @@ $platformName = $holdPlatform; } - if (!($platformID) || ($platformName != $holdPlatform)){ + if (($platformID) == NULL || ($platformName != $holdPlatform)){ //get the platformID if available $platformTestObj = new Platform(); $platformObj = new Platform(); @@ -269,7 +292,7 @@ } } - if (!isset($startMonth) || ($startMonth == '')){ + if (($startMonth) == NULL || ($startMonth == '')){ $startMonth = 1; } @@ -334,7 +357,7 @@ $publisherName = $holdPublisher; } - if (!($publisherID) || ($publisherName != $holdPublisher)){ + if (($publisherID) == NULL || ($publisherName != $holdPublisher)){ //get the publisher object $publisherTestObj = new Publisher(); $publisherObj = new Publisher(); @@ -366,7 +389,7 @@ // Query to see if the Publisher / Platform already exists, if so, get the ID ################################################################# //check it against the previous row - no need to do another lookup if we've already figured out the publisherplatformID - if (!($publisherPlatformID) || ($publisherName != $holdPublisher) || ($platformName != $holdPlatform)){ + if (!isset($publisherPlatformID) || ($publisherName != $holdPublisher) || ($platformName != $holdPlatform)){ //get the publisher platform object $publisherPlatformTestObj = new PublisherPlatform(); $publisherPlatformObj = $publisherPlatformTestObj->getPublisherPlatform($publisherID, $platformID); @@ -406,35 +429,51 @@ // Query to see if the Title already exists, if so, get the ID ################################################################# //first, remove the '-' from the ISSNs - $pISSN = strtoupper(trim(str_replace ('-','',$pISSN))); - //remove blank - $pISSN = strtoupper(trim(str_replace (' ','',$pISSN))); - if (strpos(strtoupper($pISSN),'N/A') !== false) $pISSN = ''; - if ($pISSN == '00000000') $pISSN = ''; - if (strtoupper($pISSN) == 'XXXXXXXX') $pISSN = ''; - if (strtoupper($pISSN) == '.') $pISSN = ''; - - $eISSN = strtoupper(trim(str_replace ('-','',$eISSN))); - //remove blank - $eISSN = strtoupper(trim(str_replace (' ','',$eISSN))); - if (strpos(strtoupper($eISSN),'N/A') !== false) $eISSN = ''; - if ($eISSN == '00000000') $eISSN = ''; - if (strtoupper($eISSN) == 'XXXXXXXX') $eISSN = ''; - if (strtoupper($eISSN) == '.') $eISSN = ''; - - $pISBN = strtoupper(trim(str_replace ('-','',$pISBN))); - //remove blank - $pISBN = strtoupper(trim(str_replace (' ','',$pISBN))); - if (strpos(strtoupper($pISBN),'N/A') !== false) $pISBN = ''; - if ($pISBN == '00000000') $pISBN = ''; - if (strtoupper($pISBN) == 'XXXXXXXX') $pISBN = ''; - - $eISBN = strtoupper(trim(str_replace ('-','',$eISBN))); - //remove blank - $eISBN = strtoupper(trim(str_replace (' ','',$eISBN))); - if (strpos(strtoupper($eISBN),'N/A') !== false) $eISBN = ''; - if ($eISBN == '00000000') $eISBN = ''; - if (strtoupper($eISBN) == 'XXXXXXXX') $eISBN = ''; + if (isset($pISSN)) { + $pISSN = strtoupper(trim(str_replace ('-','',$pISSN))); + //remove blank + $pISSN = strtoupper(trim(str_replace (' ','',$pISSN))); + if (strpos(strtoupper($pISSN),'N/A') !== false) $pISSN = ''; + if ($pISSN == '00000000') $pISSN = ''; + if (strtoupper($pISSN) == 'XXXXXXXX') $pISSN = ''; + if (strtoupper($pISSN) == '.') $pISSN = ''; + } else { + $pISSN = null; + } + + if (isset($eISSN)) { + $eISSN = strtoupper(trim(str_replace ('-','',$eISSN))); + //remove blank + $eISSN = strtoupper(trim(str_replace (' ','',$eISSN))); + if (strpos(strtoupper($eISSN),'N/A') !== false) $eISSN = ''; + if ($eISSN == '00000000') $eISSN = ''; + if (strtoupper($eISSN) == 'XXXXXXXX') $eISSN = ''; + if (strtoupper($eISSN) == '.') $eISSN = ''; + } else { + $eISSN = null; + } + + if (isset($pISBN)) { + $pISBN = strtoupper(trim(str_replace ('-','',$pISBN))); + //remove blank + $pISBN = strtoupper(trim(str_replace (' ','',$pISBN))); + if (strpos(strtoupper($pISBN),'N/A') !== false) $pISBN = ''; + if ($pISBN == '00000000') $pISBN = ''; + if (strtoupper($pISBN) == 'XXXXXXXX') $pISBN = ''; + } else { + $pISBN = null; + } + + if (isset($eISBN)) { + $eISBN = strtoupper(trim(str_replace ('-','',$eISBN))); + //remove blank + $eISBN = strtoupper(trim(str_replace (' ','',$eISBN))); + if (strpos(strtoupper($eISBN),'N/A') !== false) $eISBN = ''; + if ($eISBN == '00000000') $eISBN = ''; + if (strtoupper($eISBN) == 'XXXXXXXX') $eISBN = ''; + } else { + $eISBN = null; + } if ($doi == "0") $doi = ""; if ($pi == "0") $pi = ""; @@ -963,7 +1002,7 @@

    Log file available at: .

    Process completed.


    - " . nl2br($logSummary); ?>
    + " . nl2br($logSummary); ?>


     

    diff --git a/uploadConfirmation.php b/uploadConfirmation.php index 588d29c..6385074 100755 --- a/uploadConfirmation.php +++ b/uploadConfirmation.php @@ -122,16 +122,17 @@ function updateSubmit(){ if ($layoutID != ""){ $reportTypeSet = 'Y'; $layout = new Layout(new NamedArguments(array('primaryKey' => $layoutID))); - $layoutKey = $layoutsArray[ReportTypes][$layout->layoutCode]; + $layoutKey = $layoutsArray['ReportTypes'][$layout->layoutCode]; $columnsToCheck = $layoutsArray[$layoutKey]['columnToCheck']; $reportTypeDisplay = $layout->name; $layoutColumns = $layoutsArray[$layoutKey]['columns']; $numberOfColumns = count($layoutColumns); } - - echo $uploadConfirm; - echo ""; + if ((isset($uploadConfirm)) and (!empty($uploadConfirm))) { + echo $uploadConfirm; + } + echo "
    "; @@ -158,7 +159,7 @@ function updateSubmit(){ //if report type hasn't been figured out, check for it in the first row / column if ($reportTypeSet == ""){ - foreach ($layoutsArray[ReportTypes] as $reportTypeKey => $layoutKey){ + foreach ($layoutsArray['ReportTypes'] as $reportTypeKey => $layoutKey){ list($report,$release) = explode("_",$reportTypeKey); if ((strpos($line, $report) !== false) && (strpos($line, $release) !== false)){ $reportTypeSet = 'Y'; diff --git a/user.php b/user.php index 236babc..ba69d53 100755 --- a/user.php +++ b/user.php @@ -79,8 +79,11 @@ $remoteAuth=eval("return \$$theVarStem;"); //use the split in case the remote login is supplied as an email address - list ($loginID,$restofAddr) = explode("@", $remoteAuth); - + if (strpos($remoteAuth,'@') !== false) { + list ($loginID,$restofAddr) = explode("@", $remoteAuth); + } else { + $loginID = $remoteAuth; + } session_start(); From 326c854aa91bf99bd83214c73ef8395335534539 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Tue, 10 May 2016 15:32:35 -0600 Subject: [PATCH 40/52] New Translatable Menu and Change Module Drop-Down --- css/style.css | 84 ++++++ locale/fr_FR/LC_MESSAGES/messages.mo | Bin 25473 -> 26050 bytes locale/fr_FR/LC_MESSAGES/messages.po | 396 +++++++++++++++------------ templates/header.php | 154 +++++++---- 4 files changed, 411 insertions(+), 223 deletions(-) diff --git a/css/style.css b/css/style.css index 9ee8361..af5be7f 100755 --- a/css/style.css +++ b/css/style.css @@ -2492,4 +2492,88 @@ span#divider { #usage-reports img { float: none; +} + +/*--- Newly Designed Main Menu ---*/ + +.main-menu-link { + float: left; + padding: 13px 10px 12px; + border-left: solid 1px #5295BA; +} + +#main-menu-titles a:first-child .main-menu-link { + border: none; +} + +.main-menu-link:hover { + background: #4d4d4d; +} + +.main-menu-link.active { + background: #3999c2; +} + +.main-menu-link span { + color: #fff; + text-decoration: none; + font-size: 13px; + font-weight: 600; +} + +.main-menu-link img { + margin-right: 6px; +} + +/*--- Change Module Menu ---*/ + +#change-mod-menu { + padding: 13px 0 12px; + color: #fff; + height: initial; + text-align: center; +} + +#change-mod-menu img { + position: absolute; + left: 10px; + top: 10px; +} + +#change-mod-menu .fa-chevron-down { + font-size: 10px; + position: relative; + top: -2px; + margin-left: 8px; +} + +li.change-mod-item { + background: #4d4d4d; + height: initial !important; + text-align: left; +} + +li.change-mod-item a { + display: block; + color: #fff; + font-size: 14px; + padding: 10px !important; + margin: 0; + line-height: 18px !important; + position: relative !important; + padding-left: 35px !important; +} + +.change-mod-item a span { + position: relative; + top: 1px; +} + +#change-mod-menu span { + font-size: 13px; + font-weight: 600; +} + +li.change-mod-item:hover { + background-color: none !important; } \ No newline at end of file diff --git a/locale/fr_FR/LC_MESSAGES/messages.mo b/locale/fr_FR/LC_MESSAGES/messages.mo index b12399b490aa36ac3633056aa3241ea71eddf021..9b2d17fca0c4cfac4ca0ad581f783b42286f04b4 100644 GIT binary patch delta 7738 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 He<0$2I#r4U delta 7157 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 diff --git a/locale/fr_FR/LC_MESSAGES/messages.po b/locale/fr_FR/LC_MESSAGES/messages.po index 3ebed95..ef9038f 100644 --- a/locale/fr_FR/LC_MESSAGES/messages.po +++ b/locale/fr_FR/LC_MESSAGES/messages.po @@ -1,8 +1,8 @@ msgid "" msgstr "" "Project-Id-Version: messages\n" -"POT-Creation-Date: 2016-04-18 09:37-0600\n" -"PO-Revision-Date: 2016-04-19 16:08+0100\n" +"POT-Creation-Date: 2016-05-10 15:25-0600\n" +"PO-Revision-Date: 2016-05-10 15:32-0600\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr_FR\n" @@ -80,7 +80,7 @@ msgstr "La plateforme doit être indiquée." msgid "Please select a file." msgstr "Veuillez sélectionner un fichier." -#: js/index.js:147 ajax_htmldata.php:1541 publisherPlatformList.php:32 +#: js/index.js:147 ajax_htmldata.php:1542 publisherPlatformList.php:32 msgid "show publisher list" msgstr "Afficher la liste des éditeurs" @@ -137,7 +137,7 @@ msgid "Outlier Parameters" msgstr "Paramètres des valeurs hors normes" #: ajax_forms.php:39 ajax_forms.php:168 ajax_forms.php:257 ajax_forms.php:354 -#: ajax_forms.php:421 ajax_forms.php:486 ajax_forms.php:977 +#: ajax_forms.php:421 ajax_forms.php:486 ajax_forms.php:976 msgid "Update" msgstr "Mettre à jour" @@ -184,8 +184,8 @@ msgid "submit for processing" msgstr "Envoyer pour traitement" #: ajax_forms.php:129 ajax_forms.php:169 ajax_forms.php:326 ajax_forms.php:395 -#: ajax_forms.php:462 ajax_forms.php:625 ajax_forms.php:830 ajax_forms.php:884 -#: ajax_forms.php:1022 +#: ajax_forms.php:462 ajax_forms.php:625 ajax_forms.php:829 ajax_forms.php:883 +#: ajax_forms.php:1021 msgid "cancel" msgstr "Annuler" @@ -210,8 +210,8 @@ msgid "Update Report Display Name" msgstr "Mettre à jour le nom d'affichage du rapport" #: ajax_forms.php:223 ajax_forms.php:769 ajax_forms.php:776 ajax_forms.php:783 -#: ajax_htmldata.php:1013 ajax_htmldata.php:1020 ajax_htmldata.php:1027 -#: ajax_htmldata.php:1418 +#: ajax_htmldata.php:1014 ajax_htmldata.php:1021 ajax_htmldata.php:1028 +#: ajax_htmldata.php:1419 msgid "update" msgstr "Mettre à jour" @@ -244,11 +244,11 @@ msgid "Interface Notes:" msgstr "Notes de l'interface :" #: ajax_forms.php:325 ajax_forms.php:394 ajax_forms.php:461 ajax_forms.php:624 -#: ajax_forms.php:829 ajax_forms.php:883 +#: ajax_forms.php:828 ajax_forms.php:882 msgid "submit" msgstr "Envoyer" -#: ajax_forms.php:374 ajax_htmldata.php:320 +#: ajax_forms.php:374 ajax_htmldata.php:321 msgid "Publisher Notes" msgstr "Notes de l'éditeur" @@ -367,11 +367,11 @@ msgstr "Rattacher à l'organisation associée" msgid "Organization:" msgstr "Organisation :" -#: ajax_forms.php:691 ajax_htmldata.php:969 +#: ajax_forms.php:691 ajax_htmldata.php:970 msgid "ignore outlier" msgstr "Ignorer la valeur hors norme" -#: ajax_forms.php:700 ajax_forms.php:795 ajax_forms.php:952 +#: ajax_forms.php:700 ajax_forms.php:794 ajax_forms.php:951 msgid "Close" msgstr "Fermer" @@ -385,326 +385,326 @@ msgstr "" msgid "Total" msgstr "Total" -#: ajax_forms.php:820 +#: ajax_forms.php:819 msgid "Add New Platform for SUSHI Connection" msgstr "Ajouter une nouvelle plateforme pour une connexion SUSHI" -#: ajax_forms.php:821 ajax_htmldata.php:1514 +#: ajax_forms.php:820 ajax_htmldata.php:1515 msgid "Platform Name" msgstr "Nom de la plateforme" -#: ajax_forms.php:862 +#: ajax_forms.php:861 msgid "Add Identifier" msgstr "Ajouter un identifiant" -#: ajax_forms.php:863 +#: ajax_forms.php:862 msgid "Identifier Type" msgstr "Type d'identifiant" -#: ajax_forms.php:866 ajax_htmldata.php:719 ajax_htmldata.php:796 +#: ajax_forms.php:865 ajax_htmldata.php:720 ajax_htmldata.php:797 #: spreadsheet.php:86 titles_spreadsheet.php:55 msgid "ISSN" msgstr "ISSN" -#: ajax_forms.php:867 ajax_htmldata.php:720 +#: ajax_forms.php:866 ajax_htmldata.php:721 msgid "eISSN" msgstr "eISSN" -#: ajax_forms.php:868 ajax_htmldata.php:795 spreadsheet.php:85 +#: ajax_forms.php:867 ajax_htmldata.php:796 spreadsheet.php:85 #: titles_spreadsheet.php:54 msgid "ISBN" msgstr "ISBN" -#: ajax_forms.php:869 +#: ajax_forms.php:868 msgid "eISBN" msgstr "eISBN" -#: ajax_forms.php:870 ajax_htmldata.php:718 ajax_htmldata.php:794 +#: ajax_forms.php:869 ajax_htmldata.php:719 ajax_htmldata.php:795 #: spreadsheet.php:63 spreadsheet.php:83 titles_spreadsheet.php:49 #: titles_spreadsheet.php:53 msgid "DOI" msgstr "DOI" -#: ajax_forms.php:871 spreadsheet.php:64 spreadsheet.php:84 +#: ajax_forms.php:870 spreadsheet.php:64 spreadsheet.php:84 msgid "Proprietary ID" msgstr "ID propriétaire" -#: ajax_forms.php:875 +#: ajax_forms.php:874 msgid "Identifier" msgstr "Identifiant" -#: ajax_forms.php:917 +#: ajax_forms.php:916 msgid "Associated Titles and Identifiers" msgstr "Titres et identifiants associés" -#: ajax_forms.php:980 +#: ajax_forms.php:979 msgid "Add New" msgstr "Ajouter un nouveau" -#: ajax_forms.php:987 +#: ajax_forms.php:986 msgid " User" msgstr " Utilisateur" -#: ajax_forms.php:988 ajax_htmldata.php:1402 +#: ajax_forms.php:987 ajax_htmldata.php:1403 msgid "Login ID" msgstr "Identifiant de connexion" -#: ajax_forms.php:989 ajax_htmldata.php:1403 +#: ajax_forms.php:988 ajax_htmldata.php:1404 msgid "First Name" msgstr "Prénom" -#: ajax_forms.php:990 ajax_htmldata.php:1404 +#: ajax_forms.php:989 ajax_htmldata.php:1405 msgid "Last Name" msgstr "Nom" -#: ajax_forms.php:991 ajax_htmldata.php:1405 +#: ajax_forms.php:990 ajax_htmldata.php:1406 msgid "Privilege" msgstr "Privilège" -#: ajax_forms.php:995 +#: ajax_forms.php:994 msgid "Add/Edit users have access to everything" msgstr "Les utilisateurs \"Add/Edit\" ont accès à tout" -#: ajax_forms.php:995 +#: ajax_forms.php:994 msgid "except the Admin tab and admin users" msgstr "sauf à l'onglet Administration et aux utilisateurs Admin" -#: ajax_forms.php:995 +#: ajax_forms.php:994 msgid "have access to everything" msgstr "qui ont accès à tout" -#: ajax_forms.php:1041 ajax_htmldata.php:1639 ajax_processing.php:598 +#: ajax_forms.php:1040 ajax_htmldata.php:1640 ajax_processing.php:598 msgid "Function " msgstr "Fonction " -#: ajax_forms.php:1041 ajax_htmldata.php:1639 ajax_processing.php:598 +#: ajax_forms.php:1040 ajax_htmldata.php:1640 ajax_processing.php:598 msgid " not set up!" msgstr " non définie !" -#: ajax_htmldata.php:46 +#: ajax_htmldata.php:47 msgid "Import History for " msgstr "Importer l'historique pour " -#: ajax_htmldata.php:61 ajax_htmldata.php:1147 +#: ajax_htmldata.php:62 ajax_htmldata.php:1148 msgid "Import Date" msgstr "Date d'importation" -#: ajax_htmldata.php:62 ajax_htmldata.php:1148 +#: ajax_htmldata.php:63 ajax_htmldata.php:1149 msgid "Imported By" msgstr "Importé par" -#: ajax_htmldata.php:63 ajax_htmldata.php:1149 +#: ajax_htmldata.php:64 ajax_htmldata.php:1150 msgid "Import Summary" msgstr "Résumé de l'importation" -#: ajax_htmldata.php:75 +#: ajax_htmldata.php:76 msgid "view log" msgstr "Voir le fichier journal" -#: ajax_htmldata.php:76 +#: ajax_htmldata.php:77 msgid "view archive" msgstr "Voir l'archive" -#: ajax_htmldata.php:81 +#: ajax_htmldata.php:82 msgid "(no imports found)" msgstr "(aucune importation trouvée)" -#: ajax_htmldata.php:112 +#: ajax_htmldata.php:113 msgid "Interface Login" msgstr "Connexion à l'interface" -#: ajax_htmldata.php:113 ajax_htmldata.php:241 +#: ajax_htmldata.php:114 ajax_htmldata.php:242 msgid "Password" msgstr "Mot de passe" -#: ajax_htmldata.php:114 ajax_htmldata.php:242 +#: ajax_htmldata.php:115 ajax_htmldata.php:243 msgid "URL" msgstr "URL" -#: ajax_htmldata.php:115 +#: ajax_htmldata.php:116 msgid "Login Notes" msgstr "Notes de connexion" -#: ajax_htmldata.php:137 ajax_htmldata.php:198 ajax_htmldata.php:358 -#: ajax_htmldata.php:427 ajax_htmldata.php:637 ajax_htmldata.php:698 -#: ajax_htmldata.php:1428 ajax_htmldata.php:1536 +#: ajax_htmldata.php:138 ajax_htmldata.php:199 ajax_htmldata.php:359 +#: ajax_htmldata.php:428 ajax_htmldata.php:638 ajax_htmldata.php:699 +#: ajax_htmldata.php:1429 ajax_htmldata.php:1537 msgid "(none found)" msgstr "(non-trouvé)" -#: ajax_htmldata.php:145 ajax_htmldata.php:206 +#: ajax_htmldata.php:146 ajax_htmldata.php:207 msgid "add new login" msgstr "Ajouter une nouvelle connexion" -#: ajax_htmldata.php:156 +#: ajax_htmldata.php:157 msgid "Interface Logins" msgstr "Connexions à l'interface" -#: ajax_htmldata.php:188 ajax_htmldata.php:350 ajax_htmldata.php:419 -#: ajax_htmldata.php:1419 +#: ajax_htmldata.php:189 ajax_htmldata.php:351 ajax_htmldata.php:420 +#: ajax_htmldata.php:1420 msgid "remove" msgstr "Supprimer" -#: ajax_htmldata.php:236 +#: ajax_htmldata.php:237 msgid "For " msgstr "Pour " -#: ajax_htmldata.php:236 ajax_htmldata.php:260 +#: ajax_htmldata.php:237 ajax_htmldata.php:261 msgid "view organization" msgstr "Voir l'organisation" -#: ajax_htmldata.php:239 +#: ajax_htmldata.php:240 msgid "Login Type" msgstr "Type de connexion" -#: ajax_htmldata.php:240 +#: ajax_htmldata.php:241 msgid "Username" msgstr "Nom d'utilisateur" -#: ajax_htmldata.php:243 ajax_htmldata.php:337 +#: ajax_htmldata.php:244 ajax_htmldata.php:338 msgid "Notes" msgstr "Remarques" -#: ajax_htmldata.php:260 +#: ajax_htmldata.php:261 msgid "No login information stored for " msgstr "Aucune information de connexion stockée pour " -#: ajax_htmldata.php:265 +#: ajax_htmldata.php:266 msgid "change associated organization" msgstr "Changer l'organisation associée" -#: ajax_htmldata.php:274 +#: ajax_htmldata.php:275 msgid "link to associated organization" msgstr "Rattacher à l'organisation associée" -#: ajax_htmldata.php:299 +#: ajax_htmldata.php:300 msgid "Login Credentials are also available for the following publishers:" msgstr "" "Les identifiants de connexion sont aussi disponibles pour les éditeurs " "suivants :" -#: ajax_htmldata.php:335 ajax_htmldata.php:394 +#: ajax_htmldata.php:336 ajax_htmldata.php:395 msgid "Start Year" msgstr "Année de début" -#: ajax_htmldata.php:336 ajax_htmldata.php:395 +#: ajax_htmldata.php:337 ajax_htmldata.php:396 msgid "End Year" msgstr "Année de fin" -#: ajax_htmldata.php:344 +#: ajax_htmldata.php:345 msgid "Present" msgstr "Actuel" -#: ajax_htmldata.php:350 ajax_htmldata.php:901 ajax_htmldata.php:925 -#: uploadComplete.php:317 +#: ajax_htmldata.php:351 ajax_htmldata.php:902 ajax_htmldata.php:926 +#: uploadComplete.php:340 msgid "edit" msgstr "Modifier" -#: ajax_htmldata.php:363 +#: ajax_htmldata.php:364 msgid "add new publisher notes" msgstr "Ajouter de nouvelles notes d'éditeur" -#: ajax_htmldata.php:376 ajax_htmldata.php:397 +#: ajax_htmldata.php:377 ajax_htmldata.php:398 msgid "Interface Notes" msgstr "Notes de l'interface" -#: ajax_htmldata.php:396 +#: ajax_htmldata.php:397 msgid "Counter" msgstr "Décompte" -#: ajax_htmldata.php:396 +#: ajax_htmldata.php:397 msgid "Compliant?" msgstr "Conforme ?" -#: ajax_htmldata.php:432 +#: ajax_htmldata.php:433 msgid "add new interface note" msgstr "Ajouter une nouvelle note d'interface" -#: ajax_htmldata.php:474 +#: ajax_htmldata.php:475 msgid "Edit SUSHI Connection Info" msgstr "Modifier les infos de connexion SUSHI" -#: ajax_htmldata.php:475 +#: ajax_htmldata.php:476 msgid "Test SUSHI Connection" msgstr "Tester la connexion SUSHI" -#: ajax_htmldata.php:477 +#: ajax_htmldata.php:478 msgid "Add SUSHI Connection" msgstr "Ajouter une connexion SUSHI" -#: ajax_htmldata.php:483 +#: ajax_htmldata.php:484 msgid "Visit the " msgstr "Allez sur le" -#: ajax_htmldata.php:483 +#: ajax_htmldata.php:484 msgid "SUSHI Server Registry" msgstr "Registre du serveur SUSHI (en anglais)" -#: ajax_htmldata.php:483 +#: ajax_htmldata.php:484 msgid " for information about adding your provider." msgstr " pour plus d'informations sur l'ajout de votre fournisseur." -#: ajax_htmldata.php:510 +#: ajax_htmldata.php:511 msgid "delete entire month" msgstr "Supprimer le mois entier" -#: ajax_htmldata.php:521 +#: ajax_htmldata.php:522 msgid "view outliers for this month" msgstr "Voir les valeurs hors normes de ce mois" -#: ajax_htmldata.php:556 ajax_htmldata.php:637 +#: ajax_htmldata.php:557 ajax_htmldata.php:638 msgid "Statistics Management" msgstr "Gestion des statistiques" -#: ajax_htmldata.php:698 +#: ajax_htmldata.php:699 msgid "Titles" msgstr "Titres" -#: ajax_htmldata.php:713 +#: ajax_htmldata.php:714 msgid "Journals - Associated Titles and ISSNs" msgstr "Périodiques - Titres et numéros ISSN associés" -#: ajax_htmldata.php:717 ajax_htmldata.php:793 +#: ajax_htmldata.php:718 ajax_htmldata.php:794 msgid "Title" msgstr "Titre" -#: ajax_htmldata.php:760 +#: ajax_htmldata.php:761 msgid "view related titles" msgstr "Voir les titres connexes" -#: ajax_htmldata.php:760 +#: ajax_htmldata.php:761 msgid "view in link resolver" msgstr "Afficher dans le résolveur de liens" -#: ajax_htmldata.php:789 +#: ajax_htmldata.php:790 msgid "Books - Associated Titles and ISBNs" msgstr "Livres - Titres et numéros ISBN associés" -#: ajax_htmldata.php:896 +#: ajax_htmldata.php:897 msgid "Current Email Addresses" msgstr "Adresses email actuelles" -#: ajax_htmldata.php:902 +#: ajax_htmldata.php:903 msgid "delete" msgstr "Supprimer" -#: ajax_htmldata.php:921 +#: ajax_htmldata.php:922 msgid "Current Outlier Parameters" msgstr "Paramètres actuels des valeurs hors normes" -#: ajax_htmldata.php:924 uploadComplete.php:89 +#: ajax_htmldata.php:925 uploadComplete.php:89 msgid "Level " msgstr "Niveau " -#: ajax_htmldata.php:924 uploadComplete.php:89 +#: ajax_htmldata.php:925 uploadComplete.php:89 msgid " over plus " msgstr " dépassant de " -#: ajax_htmldata.php:924 +#: ajax_htmldata.php:925 #, php-format msgid "% over - displayed " msgstr "“% dépassé – affiché " -#: ajax_htmldata.php:929 +#: ajax_htmldata.php:930 msgid "" "Outliers are currently disabled in the configuration file. Contact your " "technical support to enable them." @@ -712,108 +712,108 @@ msgstr "" "Les valeurs hors normes sont actuellement désactivées dans le fichier de " "configuration. Contactez votre service informatique pour les activer." -#: ajax_htmldata.php:961 +#: ajax_htmldata.php:962 msgid "None currently" msgstr "Aucun actuellement" -#: ajax_htmldata.php:968 +#: ajax_htmldata.php:969 msgid "update override" msgstr "Mettre à jour l'outrepassement" -#: ajax_htmldata.php:1017 +#: ajax_htmldata.php:1018 msgid "PDF" msgstr "PDF" -#: ajax_htmldata.php:1055 ajax_htmldata.php:1080 +#: ajax_htmldata.php:1056 ajax_htmldata.php:1081 msgid "edit report display name" msgstr "Modifier le nom d'affichage du rapport" -#: ajax_htmldata.php:1106 +#: ajax_htmldata.php:1107 msgid "No imports found." msgstr "Aucune importation trouvée." -#: ajax_htmldata.php:1112 ajax_htmldata.php:1472 +#: ajax_htmldata.php:1113 ajax_htmldata.php:1473 msgid "Displaying " msgstr "Affichage de " -#: ajax_htmldata.php:1112 ajax_htmldata.php:1472 +#: ajax_htmldata.php:1113 ajax_htmldata.php:1473 msgid " to " msgstr " à " -#: ajax_htmldata.php:1112 ajax_htmldata.php:1472 +#: ajax_htmldata.php:1113 ajax_htmldata.php:1473 msgid " of " msgstr " de " -#: ajax_htmldata.php:1112 +#: ajax_htmldata.php:1113 msgid " Records" msgstr " Résultats" -#: ajax_htmldata.php:1228 ajax_htmldata.php:1280 ajax_htmldata.php:1337 +#: ajax_htmldata.php:1229 ajax_htmldata.php:1281 ajax_htmldata.php:1338 msgid "Platform/Publisher" msgstr "Plateforme/éditeur" -#: ajax_htmldata.php:1229 +#: ajax_htmldata.php:1230 msgid "Import Run Date" msgstr "Date d'exécution de l'importation" -#: ajax_htmldata.php:1230 +#: ajax_htmldata.php:1231 msgid "Details" msgstr "Détails" -#: ajax_htmldata.php:1260 +#: ajax_htmldata.php:1261 msgid "(no outstanding imports found)" msgstr "(aucune importation en attente)" -#: ajax_htmldata.php:1281 ajax_htmldata.php:1340 ajax_htmldata.php:1517 +#: ajax_htmldata.php:1282 ajax_htmldata.php:1341 ajax_htmldata.php:1518 msgid "Latest Run" msgstr "Dernière date d'exécution le" -#: ajax_htmldata.php:1282 ajax_htmldata.php:1341 ajax_htmldata.php:1518 +#: ajax_htmldata.php:1283 ajax_htmldata.php:1342 ajax_htmldata.php:1519 msgid "Latest Status" msgstr "Dernier statut" -#: ajax_htmldata.php:1308 +#: ajax_htmldata.php:1309 msgid "view full log" msgstr "Voir le fichier journal complet" -#: ajax_htmldata.php:1309 ajax_htmldata.php:1372 +#: ajax_htmldata.php:1310 ajax_htmldata.php:1373 msgid "run now" msgstr "Exécuter maintenant" -#: ajax_htmldata.php:1310 ajax_htmldata.php:1373 +#: ajax_htmldata.php:1311 ajax_htmldata.php:1374 msgid "change/test connection" msgstr "Changer/tester la connexion" -#: ajax_htmldata.php:1317 +#: ajax_htmldata.php:1318 msgid "(no failed imports found)" msgstr "(aucune importation échouée)" -#: ajax_htmldata.php:1338 +#: ajax_htmldata.php:1339 msgid "Report(s)" msgstr "Rapport(s)" -#: ajax_htmldata.php:1339 ajax_htmldata.php:1516 +#: ajax_htmldata.php:1340 ajax_htmldata.php:1517 msgid "Next Run" msgstr "Prochaine date d'exécution" -#: ajax_htmldata.php:1380 +#: ajax_htmldata.php:1381 msgid "(no sushi services set up)" msgstr "(Aucun service Sushi configuré)" -#: ajax_htmldata.php:1468 +#: ajax_htmldata.php:1469 msgid "Sorry, no platforms or publishers fit your query" msgstr "" "Désolé, aucune plateforme ou aucun éditeur ne correspond à votre demande" -#: ajax_htmldata.php:1472 +#: ajax_htmldata.php:1473 msgid " Platform Records" msgstr " Notices de plateformes" -#: ajax_htmldata.php:1515 +#: ajax_htmldata.php:1516 msgid "Publishers" msgstr "Editeurs" -#: ajax_htmldata.php:1620 +#: ajax_htmldata.php:1621 msgid "records per page" msgstr "Résultats par page" @@ -935,7 +935,7 @@ msgstr "voir/modifier" msgid "No publishers / platforms found." msgstr "Aucun éditeur/plateforme trouvé" -#: reporting.php:2 +#: reporting.php:2 templates/header.php:184 templates/header.php:226 msgid "Report Options" msgstr "Options de rapport" @@ -1084,15 +1084,15 @@ msgstr "Administration SUSHI" msgid "Add new platform for SUSHI" msgstr "Ajouter une nouvelle plateforme à SUSHI" -#: sushi.php:66 +#: sushi.php:71 msgid "Outstanding Import Queue" msgstr "File d'attente des importations" -#: sushi.php:71 +#: sushi.php:76 msgid "Last Failed SUSHI Imports" msgstr "Dernières importations SUSHI ayant échouées" -#: sushi.php:75 +#: sushi.php:80 msgid "All SUSHI Services" msgstr "Tous les services SUSHI" @@ -1124,11 +1124,11 @@ msgstr " fonctionne" msgid "Run complete. Log has been emailed to " msgstr "Processus terminé. Le fichier journal a été envoyé par email à " -#: sushiSchedule.php:72 uploadComplete.php:903 +#: sushiSchedule.php:72 uploadComplete.php:942 msgid "Email to " msgstr "Envoyer par email à " -#: sushiSchedule.php:72 uploadComplete.php:903 +#: sushiSchedule.php:72 uploadComplete.php:942 msgid " Failed!" msgstr " Echec !" @@ -1136,10 +1136,54 @@ msgstr " Echec !" msgid "Nothing to see here! (no sushi scheduled today)" msgstr "Rien à afficher (aucun processus Sushi prévu pour aujourd'hui)" -#: templates/header.php:167 +#: templates/header.php:117 msgid "Invalid translation route!" msgstr "Chemin d'accès aux traductions invalide !" +#: templates/header.php:156 templates/header.php:205 +msgid "Home" +msgstr "Accueil" + +#: templates/header.php:163 templates/header.php:212 +msgid "File Import" +msgstr "Importer" + +#: templates/header.php:170 templates/header.php:219 +msgid "SUSHI" +msgstr "SUSHI" + +#: templates/header.php:177 +msgid "Admin" +msgstr "Admin" + +#: templates/header.php:193 templates/header.php:235 +msgid "Usage Reports" +msgstr "Rapports d'utilisation" + +#: templates/header.php:254 +msgid "Change Module" +msgstr "Changer de module" + +#: templates/header.php:257 +msgid "Main Menu" +msgstr "Menu Principal" + +#: templates/header.php:262 +msgid "Resources" +msgstr "Ressources" + +#: templates/header.php:267 +msgid "Organizations" +msgstr "Organisations" + +#: templates/header.php:272 +msgid "Licensing" +msgstr "Licensing" + +#: templates/header.php:277 +msgid "Management" +msgstr "Gestion" + #: titles_spreadsheet.php:35 msgid " Titles " msgstr " Titres" @@ -1156,7 +1200,7 @@ msgstr "Processus démarré le " msgid "File: " msgstr "Fichier : " -#: uploadComplete.php:69 uploadConfirmation.php:292 +#: uploadComplete.php:69 uploadConfirmation.php:293 msgid "Report Format: " msgstr "Format du rapport : " @@ -1169,11 +1213,11 @@ msgstr "Paramètres des valeurs hors normes :" msgid "% over " msgstr "% de dépassement " -#: uploadComplete.php:246 +#: uploadComplete.php:269 msgid "Override indicator set - all months will be imported." msgstr "Indicateur d'outrepassement défini - tous les mois seront importés." -#: uploadComplete.php:255 +#: uploadComplete.php:278 msgid "" "Entire year already exists for this Platform / year. No counts will be " "imported." @@ -1181,93 +1225,93 @@ msgstr "" "L'année entière existe déjà pour cette Plateforme/année. Aucun décompte ne " "sera importé." -#: uploadComplete.php:259 +#: uploadComplete.php:282 msgid "Month Started at: " msgstr "Mois commencé à : " -#: uploadComplete.php:261 +#: uploadComplete.php:284 msgid "" "No records exist for this Platform / year. Import will start with month 1." msgstr "" "Aucun résultat n'existe pour cette plateforme/année. L'importation " "commencera avec le mois 1." -#: uploadComplete.php:283 +#: uploadComplete.php:306 msgid "Year: " msgstr "Année : " -#: uploadComplete.php:317 +#: uploadComplete.php:340 msgid "New Platform set up: " msgstr "Nouvelle plateforme configurée : " -#: uploadComplete.php:399 +#: uploadComplete.php:422 msgid "New Publisher / Platform set up: " msgstr "Nouvel éditeur/plateforme configuré : " -#: uploadComplete.php:616 +#: uploadComplete.php:655 msgid "Publisher / Platform: " msgstr "Editeur/plateforme : " -#: uploadComplete.php:625 +#: uploadComplete.php:664 msgid "Title: " msgstr "Titre : " -#: uploadComplete.php:662 +#: uploadComplete.php:701 msgid "Duplicate record for this Print ISSN in same spreadsheet: Month: " msgstr "" "Notice dupliquée pour ce numéro ISSN imprimé dans la même feuille de " "calcul : Mois : " -#: uploadComplete.php:662 +#: uploadComplete.php:701 msgid " New Count: " msgstr " Nouveau décompte : " -#: uploadComplete.php:746 +#: uploadComplete.php:785 msgid "New Usage Count Record Added: Month: " msgstr "Nouvelle notice de décompte ajoutée : Mois : " -#: uploadComplete.php:746 uploadComplete.php:748 +#: uploadComplete.php:785 uploadComplete.php:787 msgid " Count: " msgstr " Décompte : " -#: uploadComplete.php:748 +#: uploadComplete.php:787 msgid "Usage Count Record is not numeric for month: " msgstr "" "La notice du décompte d'utilisation n'est pas numérique pour le mois : " -#: uploadComplete.php:755 +#: uploadComplete.php:794 msgid "Outlier found for this record: Level " msgstr "Valeur hors normes trouvée pour cette notice : Niveau " -#: uploadComplete.php:764 +#: uploadComplete.php:803 msgid "Current or future month will not be imported: " msgstr "Le mois actuel ou le mois prochain ne seront pas importés : " -#: uploadComplete.php:803 +#: uploadComplete.php:842 msgid "YTD Already Exists for this Print ISSN, counts are added together." msgstr "" "Le cumul annuel existe déjà pour ce numéro ISSN imprimé, les décomptes sont " "ajoutés ensemble." -#: uploadComplete.php:827 +#: uploadComplete.php:866 msgid "YTD Total Count: " msgstr "Décompte total du cumul annuel: " -#: uploadComplete.php:827 +#: uploadComplete.php:866 msgid "YTD HTML Count: " msgstr "Décompte total du cumul annuel en HTML : " -#: uploadComplete.php:827 +#: uploadComplete.php:866 msgid "YTD PDF Count: " msgstr "Décompte total du cumul annuel en PDF : " -#: uploadComplete.php:834 +#: uploadComplete.php:873 msgid "No YTD import performed since monthly stats were not imported" msgstr "" "Aucune importation de cumul annuel effectuée car les statistiques mensuelles " "n'ont pas été importées" -#: uploadComplete.php:844 +#: uploadComplete.php:883 msgid "" "Title match did not complete correctly, please check ISBN / ISSN to verify " "for Title: " @@ -1275,27 +1319,27 @@ msgstr "" "La correspondance de titres n'a pas pu terminer correctement, merci de " "vérifier l'ISBN/l'ISSN du titre : " -#: uploadComplete.php:896 +#: uploadComplete.php:935 msgid "Log Output for " msgstr "Fichier journal des résultats pour " -#: uploadComplete.php:897 +#: uploadComplete.php:936 msgid "Usage Statistics File Import Run!" msgstr "Importation avec succès du fichier statistiques des utilisations !" -#: uploadComplete.php:897 +#: uploadComplete.php:936 msgid "Please find log file: " msgstr "Voici le fichier journal : " -#: uploadComplete.php:901 +#: uploadComplete.php:940 msgid "Log has been emailed to " msgstr "Le fichier journal a été envoyé par email à " -#: uploadComplete.php:916 uploadComplete.php:923 uploadComplete.php:966 +#: uploadComplete.php:955 uploadComplete.php:962 uploadComplete.php:1005 msgid " titles processed." msgstr " titres traités." -#: uploadComplete.php:966 +#: uploadComplete.php:1005 msgid "Summary:" msgstr "Résumé :" @@ -1319,46 +1363,46 @@ msgstr "Veuillez confirmer les données suivantes :" msgid "Upload Process Confirmation" msgstr "Confirmation du processus de téléchargement" -#: uploadConfirmation.php:142 +#: uploadConfirmation.php:143 msgid " for " msgstr " par " -#: uploadConfirmation.php:190 +#: uploadConfirmation.php:191 msgid "Looking for " msgstr "Rechercher " -#: uploadConfirmation.php:190 +#: uploadConfirmation.php:191 msgid " in column " msgstr " dans la colonne " -#: uploadConfirmation.php:190 +#: uploadConfirmation.php:191 msgid "but found " msgstr "mais a trouvé " -#: uploadConfirmation.php:265 +#: uploadConfirmation.php:266 msgid "Error with Format" msgstr "Erreur du format" -#: uploadConfirmation.php:265 +#: uploadConfirmation.php:266 msgid "Report format is set to " msgstr "Le format du rapport est défini à " -#: uploadConfirmation.php:265 +#: uploadConfirmation.php:266 msgid "" " but does not match the column names listed in layouts.ini for this format - " msgstr "" " mais ne correspond pas aux noms de colonnes indiqués dans le fichier " "layouts.ini pour ce format - " -#: uploadConfirmation.php:265 +#: uploadConfirmation.php:266 msgid "Expecting columns: " msgstr "Colonnes prévues : " -#: uploadConfirmation.php:265 +#: uploadConfirmation.php:266 msgid "Found columns: " msgstr "Colonnes trouvées : " -#: uploadConfirmation.php:265 +#: uploadConfirmation.php:266 msgid "" "If problems persist you can copy an existing header that works into this " "file." @@ -1366,30 +1410,30 @@ msgstr "" "Si les problèmes persistent, vous pouvez copier un en-tête existant qui " "fonctionne dans ce fichier." -#: uploadConfirmation.php:270 +#: uploadConfirmation.php:271 msgid "Error with Setup: This report format is not set up in layouts.ini." msgstr "" "Erreur de Configuration : Ce format de rapport n'est pas configuré dans le " "fichier layouts.ini." -#: uploadConfirmation.php:275 +#: uploadConfirmation.php:276 msgid "" "Error with Format: The line preceding the first should start with 'Total'." msgstr "" "Erreur de format : La ligne précédent la première devrait commencer par " "\"Total\"." -#: uploadConfirmation.php:280 +#: uploadConfirmation.php:281 msgid "Error with Year: Year listed in header " msgstr "Erreur avec l'Année : l'Année est présente dans l'en-tête " -#: uploadConfirmation.php:280 +#: uploadConfirmation.php:281 msgid " may not be ahead of current year. Please correct and submit again." msgstr "" " pourrait ne pas être en avance de l'année actuelle. Corrigez ce problème et " "envoyez à nouveau." -#: uploadConfirmation.php:285 +#: uploadConfirmation.php:286 msgid "" "File is flagged to override verifications of previous month data. If this " "is incorrect use 'Cancel' to fix." @@ -1398,10 +1442,18 @@ msgstr "" "données du mois précédent. Si ceci est incorect, utilisez \"Annuler\" pour " "corriger ce problème." -#: uploadConfirmation.php:292 +#: uploadConfirmation.php:293 msgid "" "If this is incorrect, please use 'Cancel' to go back and fix the headers of " "the file." msgstr "" "Si ceci est incorrect, veuillez utiliser \"Annuler\" pour revenir en arrière " "et corriger les en-têtes du fichier." + +#: uploadConfirmation.php:309 +msgid "Confirm" +msgstr "Confirmer" + +#: uploadConfirmation.php:312 +msgid "Cancel" +msgstr "Annuler" diff --git a/templates/header.php b/templates/header.php index 955de51..385da5b 100755 --- a/templates/header.php +++ b/templates/header.php @@ -151,34 +151,92 @@ { ?> - .gif" hover="images/menu//menu-home-over.gif" class="rollover" /> + + - .gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" /> - + + + - .gif" hover="images/menu//menu-sushi-over.gif" class="rollover" /> - + + + - .gif' hover="images/menu//menu-admin-over.gif" class="rollover" /> - + + + - .gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" /> - + + settings->reportingModule == "Y") { ?>        - - - + + + - .gif" hover="images/menu//menu-home-over.gif" class="rollover" />.gif" hover="images/menu//menu-fileimport-over.gif" class="rollover" />.gif" hover="images/menu//menu-sushi-over.gif" class="rollover" />.gif' hover="images/menu//menu-admin-over.gif" class="rollover" />.gif" hover="images/menu//menu-reportingoptions-over.gif" class="rollover" />settings->reportingModule == "Y") echo "      "; ?> - + + + + + + + + + + + + + + + settings->reportingModule == "Y") { + ?> +        + + + + @@ -191,43 +249,37 @@ ?> -
    -
      -
    •   -
        - getCORALPath() . "index.php")) {?> -
      • - settings->resourcesModule == 'Y') { - ?> -
      • - settings->organizationsModule == 'Y') { - ?> -
      • - settings->licensingModule == 'Y') { - ?> -
      • - settings->cancellationModule == 'Y') { - ?> -
      • - settings->managementModule == 'Y') { - ?> -
      • - -
      -
    • -
    - -
    +
    +
      +
    • +
        + getCORALPath() . "index.php")) {?> +
      • + settings->resourcesModule == 'Y') { + ?> +
      • + settings->organizationsModule == 'Y') { + ?> +
      • + settings->licensingModule == 'Y') { + ?> +
      • + settings->managementModule == 'Y') { + ?> +
      • + +
      +
    • +
    +
    Date: Tue, 10 May 2016 15:39:57 -0600 Subject: [PATCH 41/52] Images for new translatable menu and drop-down --- images/change/en_US/coral-change.gif | Bin 1119 -> 0 bytes images/change/fr_FR/coral-change.gif | Bin 1185 -> 0 bytes images/change/icon-mod-cancellation.png | Bin 0 -> 1385 bytes images/change/icon-mod-licensing.png | Bin 0 -> 1432 bytes images/change/icon-mod-main.png | Bin 0 -> 1405 bytes images/change/icon-mod-management.png | Bin 0 -> 1477 bytes images/change/icon-mod-organizations.png | Bin 0 -> 1475 bytes images/change/icon-mod-resources.png | Bin 0 -> 1495 bytes images/change/icon-mod-usage.png | Bin 0 -> 1399 bytes images/menu/en_US/menu-admin-on.gif | Bin 1913 -> 0 bytes images/menu/en_US/menu-admin-over.gif | Bin 855 -> 0 bytes images/menu/en_US/menu-admin.gif | Bin 855 -> 0 bytes images/menu/en_US/menu-fileimport-on.gif | Bin 1977 -> 0 bytes images/menu/en_US/menu-fileimport-over.gif | Bin 914 -> 0 bytes images/menu/en_US/menu-fileimport.gif | Bin 919 -> 0 bytes images/menu/en_US/menu-home-on.gif | Bin 1809 -> 0 bytes images/menu/en_US/menu-home-over.gif | Bin 751 -> 0 bytes images/menu/en_US/menu-home.gif | Bin 751 -> 0 bytes images/menu/en_US/menu-reportingoptions-on.gif | Bin 2164 -> 0 bytes images/menu/en_US/menu-reportingoptions-over.gif | Bin 1101 -> 0 bytes images/menu/en_US/menu-reportingoptions.gif | Bin 1106 -> 0 bytes images/menu/en_US/menu-sushi-on.gif | Bin 1919 -> 0 bytes images/menu/en_US/menu-sushi-over.gif | Bin 861 -> 0 bytes images/menu/en_US/menu-sushi.gif | Bin 861 -> 0 bytes images/menu/en_US/menu-usage-reports-over.gif | Bin 1817 -> 0 bytes images/menu/en_US/menu-usage-reports.gif | Bin 924 -> 0 bytes images/menu/fr_FR/menu-admin-on.gif | Bin 1079 -> 0 bytes images/menu/fr_FR/menu-admin-over.gif | Bin 1078 -> 0 bytes images/menu/fr_FR/menu-admin.gif | Bin 1083 -> 0 bytes images/menu/fr_FR/menu-fileimport-on.gif | Bin 893 -> 0 bytes images/menu/fr_FR/menu-fileimport-over.gif | Bin 878 -> 0 bytes images/menu/fr_FR/menu-fileimport.gif | Bin 885 -> 0 bytes images/menu/fr_FR/menu-home-on.gif | Bin 806 -> 0 bytes images/menu/fr_FR/menu-home-over.gif | Bin 806 -> 0 bytes images/menu/fr_FR/menu-home.gif | Bin 806 -> 0 bytes images/menu/fr_FR/menu-reportingoptions-on.gif | Bin 1193 -> 0 bytes images/menu/fr_FR/menu-reportingoptions-over.gif | Bin 1190 -> 0 bytes images/menu/fr_FR/menu-reportingoptions.gif | Bin 1193 -> 0 bytes images/menu/fr_FR/menu-sushi-on.gif | Bin 1919 -> 0 bytes images/menu/fr_FR/menu-sushi-over.gif | Bin 861 -> 0 bytes images/menu/fr_FR/menu-sushi.gif | Bin 861 -> 0 bytes images/menu/fr_FR/menu-usage-reports-over.gif | Bin 884 -> 0 bytes images/menu/fr_FR/menu-usage-reports.gif | Bin 1100 -> 0 bytes images/menu/icon-admin.png | Bin 0 -> 342 bytes images/menu/icon-home.png | Bin 0 -> 321 bytes images/menu/icon-import.png | Bin 0 -> 464 bytes images/menu/icon-report-options.png | Bin 0 -> 377 bytes images/menu/icon-sushi.png | Bin 0 -> 543 bytes images/menu/icon-usage.png | Bin 0 -> 323 bytes 49 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/change/en_US/coral-change.gif delete mode 100644 images/change/fr_FR/coral-change.gif create mode 100644 images/change/icon-mod-cancellation.png create mode 100644 images/change/icon-mod-licensing.png create mode 100644 images/change/icon-mod-main.png create mode 100644 images/change/icon-mod-management.png create mode 100644 images/change/icon-mod-organizations.png create mode 100644 images/change/icon-mod-resources.png create mode 100644 images/change/icon-mod-usage.png delete mode 100644 images/menu/en_US/menu-admin-on.gif delete mode 100644 images/menu/en_US/menu-admin-over.gif delete mode 100644 images/menu/en_US/menu-admin.gif delete mode 100644 images/menu/en_US/menu-fileimport-on.gif delete mode 100644 images/menu/en_US/menu-fileimport-over.gif delete mode 100644 images/menu/en_US/menu-fileimport.gif delete mode 100644 images/menu/en_US/menu-home-on.gif delete mode 100644 images/menu/en_US/menu-home-over.gif delete mode 100644 images/menu/en_US/menu-home.gif delete mode 100644 images/menu/en_US/menu-reportingoptions-on.gif delete mode 100644 images/menu/en_US/menu-reportingoptions-over.gif delete mode 100644 images/menu/en_US/menu-reportingoptions.gif delete mode 100644 images/menu/en_US/menu-sushi-on.gif delete mode 100644 images/menu/en_US/menu-sushi-over.gif delete mode 100644 images/menu/en_US/menu-sushi.gif delete mode 100644 images/menu/en_US/menu-usage-reports-over.gif delete mode 100755 images/menu/en_US/menu-usage-reports.gif delete mode 100644 images/menu/fr_FR/menu-admin-on.gif delete mode 100644 images/menu/fr_FR/menu-admin-over.gif delete mode 100644 images/menu/fr_FR/menu-admin.gif delete mode 100644 images/menu/fr_FR/menu-fileimport-on.gif delete mode 100644 images/menu/fr_FR/menu-fileimport-over.gif delete mode 100644 images/menu/fr_FR/menu-fileimport.gif delete mode 100644 images/menu/fr_FR/menu-home-on.gif delete mode 100644 images/menu/fr_FR/menu-home-over.gif delete mode 100644 images/menu/fr_FR/menu-home.gif delete mode 100644 images/menu/fr_FR/menu-reportingoptions-on.gif delete mode 100644 images/menu/fr_FR/menu-reportingoptions-over.gif delete mode 100644 images/menu/fr_FR/menu-reportingoptions.gif delete mode 100644 images/menu/fr_FR/menu-sushi-on.gif delete mode 100644 images/menu/fr_FR/menu-sushi-over.gif delete mode 100644 images/menu/fr_FR/menu-sushi.gif delete mode 100644 images/menu/fr_FR/menu-usage-reports-over.gif delete mode 100644 images/menu/fr_FR/menu-usage-reports.gif create mode 100644 images/menu/icon-admin.png create mode 100644 images/menu/icon-home.png create mode 100644 images/menu/icon-import.png create mode 100644 images/menu/icon-report-options.png create mode 100644 images/menu/icon-sushi.png create mode 100644 images/menu/icon-usage.png diff --git a/images/change/en_US/coral-change.gif b/images/change/en_US/coral-change.gif deleted file mode 100644 index 67ba1b9d963b4ad0813da8a46f638534077ef24c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1119 zcmcJM{WIGK0EfTiMdBq*x-e&@;V3q`bTcvSwnSBjy|pX5vr@J0o43*| z-hw8?OJX#MsQ0LsAQ2^wYrRCzTbfXHL>Mhfm2BPru+I z01D)f#tlYMw^qOOcRWv#BI^AzyVbb9we{+C0KH*g@_FZDeciwmQ>HnRDs@h+aY?Hg zTUg8QdNT5CH6XL);J}Q#Av=0Qwz2(sZguklzsKuV9RZa7RMEp#Xy?~91MkR>rqx_3 zRpoSQ%loE%!1}O4MY42|+x5gdT{3Jiea5U6sHZ%Czkhc5dzN;pvUp z9a{O=GtE=ud46{&w=+pPcu}BqPZOVF%Wu|dst0wm#uoQ{*#lPlbe^%EhsFy%i|Z92ujP!D}}#FS3y~lqnlJK!I255KLQ&1qVifWl@0Ekg4_P zIEPFm1fqu_tf@MEl}?Fv^b^jur>snmIt4*p96i6NRYb;+0Xme?fmyezI|3m=mA3c? zh_a5;rk}%;HBhGTL*L^}oF7;rx@OUo4^76+fHbQ$8Ywx77QqD2iSI;81R#VC<@oV% zVhxSTVTTQzuywrWjl@C|nv390QFw3z6GBH@W6elcO8Phjg10-2+aXiF=R*+ir#1=s zU{{K3ape`Frb3B_K%w||4WPx%NSmX_N48{N14tDA<77iZrIRy4)%IeL#q*$&!F-V= z3)P+?_*QGg5pHn zNvo0HD5+-9ibzEHa_M$19CRP1B35|@PCPXiiE%>5|6AzOucul2P?Y39?3TX$bs3K* zy6IvG+Oy-)sd3@BYQ`f4K}&-vONNR$5e`_+SD9&GLfkcQSB4F+gaQ_J78T*{3VKf67kddc?qpC%!(%d2)3E=Fsd*&igVh#o%#~I7)sQD^%*G zXXC0YarfBtyl-m5(udWPxl+mBW6rGVs6yG}7q2*Fot2LVjH5*+(WPI-lx8+P@0pxi zTU%dPUM0nrnZ}k)%q<4ywK#L@$-h_jO}&-$Pq`+EO=C(kr2RXXLVH%taY5_1oO0Fs z4;O@;HgUpqX}=v*b>?=9xOam0pwIehMVds>F)}l~uxuV(5?<7CyJN^DQM|aKxhU$Q z<-^DFnuk^I3fhN?yG9D+gK?FA-I5QE&%W;*RXrJ>HIFO*^m#2()a8>cYwV2^B(jJp5ws0@^CefxJDs?7E1J)# zj}&2dTJzfmK59ON+9>p%Oc=^!)yihU)%1BzdQlZ>kxy*<|JI>@)DDh zQ&Q8?Gcx&E+1GP&^KRVC7u+hieW&p5y`tj#B|=eYS$RceRdr2mUA?%W@xjAK5@}O& z3*0JeYuv=}uw~;m%b#X%BJZ+rGI#tTNe4q8!myBZtx7s@7X*0#qMR}`=U{5U)j^>q zHfZZI#wIEzU%lq`Rk*w?HX-bE&LJ^^F;F~;-E8v0I_(7c(zHUvr&mA5y7|#)YATPq z-(w6FfpjLpjv!iwx`Xb3KsViB)5C4JYuqYHE>~{gptX-Vhl>+7> zK!I-0juihYmA(-Br!W4R-A*#pt7qk&h{dk!7**5AVFYbD!NR_WOx&Vl2G*tc#y5@9@3ucoHoj z9&7j!N^oq4W@1TYP%DwXDMyc9+x6>llygp9iH@10F(-pO)Sc*I(nc zargl0(czdnGMkZN34@B_V9TRk3!eRl&TNYgWPA5-3C#^VJ^0L*b}}p^VBguco3tSm z{hkeO@#}*d4;0lBu6D~cn6mZ&>-nZMh=`YdTz)g(0-){GFv>7O-HNd;SIe+Yv+B0Z NUUm!e5)=r0^DmR05Geov diff --git a/images/change/icon-mod-cancellation.png b/images/change/icon-mod-cancellation.png new file mode 100644 index 0000000000000000000000000000000000000000..bcab23a89043d51d0bfcf73944cb36c74b43abfb GIT binary patch literal 1385 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 HSH1cV>W%rM literal 0 HcmV?d00001 diff --git a/images/change/icon-mod-management.png b/images/change/icon-mod-management.png new file mode 100644 index 0000000000000000000000000000000000000000..73b95c1e95a4826f4140c267bc60a549e3de6051 GIT binary patch literal 1477 zcmbVMeNYr-7{8*(k+25*$iP}xagK6tcW?K0*@ct1JA^~-#N&{w{Ms+Lg}d8hZ}ASN z6fH?dkr01+L_(=eV_OD zd%mCDo@dXBo&M}}jYbn|&9*qyH7@*4i&noYzpXA*m$^!&OUajtlprGunhaiI1;FZM ziUo(j@D*j}gfxvNDkM5xip!QubCOrbgfY61*RQfQnzZzgpW#Xc1z?3@(Psp2w0D4j z$Q!{zgAK9y&4OFZ-XIJ48|+SQLn%k`VEPguEkvsdyn@02A+N_5phHG*LNBfE!(tc& zCLl_w5xnn|%a#Y2C0PIrIs)Plf&@rPhZ;x{Cl>>H1U0}224e`M$7md(aXm2kfT}f_ zFQOfmrIWVQlM!?)il2tzU@)i)Vme7KhEa;5U_=k=^^l5y0u?@m2|>QVf`|r-5a49d zuZWTl2y0|msa!FFs;Bou@cM1G2a0`x$wa9sgF}oTMs*16^@ih`KnE0u@UI(Fq65wf zzW_UgfK)DXYCVb;M96CH9&RWMRK1~>%c5Eo#$%DVaPWyrT7#E zVh}w8;V8~QEXI+L0V7b1BS_XjauGdK@iE+lo6M8}$so)qnn_S8l$kOkBx%AdX46tr zglqK$6voF15!<3_dy~iy|aA$>;xX z24U4HINUD(X`hHl?aA==!7!+Y2je98)ESc1VX0buqe`QBq~B`EaE5w6y0Bb3z$A8+ zVTMRfG+VuV+)jQU;nmup4OV*eP;7d zr@h^JZVt2Y%Fn}Q?3bYr3p<8~$2Y!r1N&}tG(c6yk9tBY-XNUdvRj+lcEDqs*X8a` ziX-n{GClL_v~`(}HpP_gT8q|=buHB4;?>88@~UW0=UWz~|JcRm7r$ovFTZfUx~(!M z7mPjW?#xp5&*{HpX}_q`5{|mU52Aavl{8>pf~=;{6= zt)9Eb?$sVRxnkA)%B0(_88zK^cSPl$Ik-25Nl0&Kd;0m>npdCfpLV42?3UNYwo(On zW$Nmi(KG6{fdv=$6)&oub?uh>%hu$q&(=Rx(i2R|dC65UUVeV=^}feO{%C1zTDgZ< z)jQJB+TQTnCx<#f{o*8=+T3}%e$y@mPhW}FumgSb9OccmaTN^%WYO_G$8(-&I+&n;6Lk((44z86 zQ+Igi^^)upK6l;;_NeKLoR0ikFUMSNk^b^m%`OGUDms8sc{!KNhM=SruZw0%fdo51v6D9_=g;;j zVJB-)=IQL1-DLtLPMc2z*}jY%##hRatTH7TPV!Q+0uD$t?B&XMH{~@bm-JHdJ|ISw z@DfBSH7J*z%C~32CP4(SPNhc}Oi#cBsZ#3*LQA{=YcRDA#c&kI5DiXgF-og}S01Ho zO=OFxEVFgRmV7cOOC-rfp{U2>QF(BcAQq!)k|a?~gK9L0j6mF#yhM8u-n~7j!3^At z=yXX=frkScX@^iD8I-c8%OP+syZw=3-o272Ic2DqcA;t&hH_jWt|hcv$^!qou`1e~ zQ|SU|7H|s{A|uzMXnT+>=kD=_0zlat>J`x`7lke}3rqzEcq!d%P|7zd*2z+2B5;sw zB8||PhDNk%ErU34hCp<AYK_c?JY+I|H_tx#q`mDU%3jNf2`cp)A-1nI(cGxJv{VY%(oX9gefpjFS%t z;{%0Sj@t}G=U%{CMS+8tGEF&G@j^@DIxWWP5SqcYh?ZgX2uV0FgiTCTGY*zpX`i4-?#aOR(J;t|N8bF0>`|R|F zW8Jm0DX-<)j9*WM%*HWKjP!i6uVRR8bT`aL-N!!c51*hTUQHS>otfGs`r{LZ#X?*C zkDDjjehQ6%Pd`Ml+MV92^+P%D7u3I8iMrM+Y@GWnzW4O?z3UQMZY+hViWheJ#Y|QZztwb0hPl(Yr}`g})+WgS literal 0 HcmV?d00001 diff --git a/images/change/icon-mod-resources.png b/images/change/icon-mod-resources.png new file mode 100644 index 0000000000000000000000000000000000000000..a01eb84714966ebe7c81b15667c3c6bedc4dd051 GIT binary patch literal 1495 zcmaJ>c}x^n7@vw51<`gxw6>)k$67TqJIC(KFjH2AU68db=L(cS;@g?GGKHO4X9roZ zO+1Q$f}q&iVAT{nV#*~=8?i-AY$UZFjjgFE(s&SSiw8y9MjNc11=jk9agv$$-uJ%W z_x-+WYO^wy$3(ppg&;_bGtH4>tftUAb&B!LJJ*nJEOYdf0zFst>J>nPNRp&_AnNpi z)i4JFsdCLJn1~<|n`L)_Uf@a>MAc^oAsutj=Qq#@lDIVJ2VyDIQ4d@#D>iKS>*E+I zOExT@agi>+9hS&xRT|8#%5aNSr6Mn3OP8RDLBTNKgE~NizA_~s1Z~)uUBTFg!~}+p zspzFPY@AeqD+{%&8bld0i;E=7p&W0f7>=`Y@hDAF3_)553yISf!Ac5N8l8AB!A-D z1KdhkMciW%Ih?VultpAY55tLJJ5R$iDLi9Op_9lYj-{v+mQUdAyq)B@WQ)U|oSGcQ zI+cJ96cL7f%ZBd>EdNZbVAmkfRn4ucW#KN!Dp7ScP@?)#yM3(c=t36|WhEqB6e`qs z+zzP8YoU~?sXlZp(}MgI7CfMVl;HK?fTMWa%CZ)m_wpW`<|&$Hcu0AzUTgv{J(0oj zPBkP(B>pfVL6W?bL@^}J&{htoD2~Sg5FswnBxmITOIiVo5e7vf)I3i#Q&?nlXlVO* zG>pUJ;ev`WQJOJ2`71NeBFJ+$oQ@=Su)qC6QkpwEwr`{vSo_nrpbWa*_x`}bNJ~@A zmDZJurvA{nwPw=Ug|ol<_Nb}3&3iTV^_YFJ^V_$yt!Qa#IZ(Z#-n_5y;Htefo@ojdNkaAF`(?GacK0UD-veIQl+c*!UcBw-$J0iaMYr}e#&-7qJG6W6$Sawv zPL*!$d*cAL$#-V%fpw-2y0g{V)I$wR+^w;f_kXvtzA%39Wvr+D#k#l=`FdC3?~{e@ zx~NO+t1S_cD|#FAc3n{7+1t6!j$T+;nSTAto8}wC!GlK{`WnN?%z{c$w!&Xnk)-0Joy`Q7B1W^BV-LqmsqIvfE1scrkASyvX+1`eKxtoKao z%Gx|n28{v7W28FCIO#Xt!ow c+JHnL<;nSzH%^&!CiJUyreruelUHs04_Q_zcK`qY literal 0 HcmV?d00001 diff --git a/images/change/icon-mod-usage.png b/images/change/icon-mod-usage.png new file mode 100644 index 0000000000000000000000000000000000000000..dbb3eae06af1695cd9e6cea07b9375601c03e694 GIT binary patch literal 1399 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%oUj-5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT-VtFWlg~VrW1CgG|37u|VHY&pf(~1RD?6IsxA(xEJ)Q4 zN-fSWElLK)N18HBGcfG%TLe-Fbd8mNQ6?}_5_4SglS^|`^GZBjY?XjAdMTMHR+bj2 zNtP)ViMojfMv1y6h9=3nNyf?Mx~9fvhQ`Te=1HdJ$uM)U={GVrH!yKEax!o-h4uU;$XqSVBa{GyQj{2W*+ z2*}7U$uG{xFHmrH2FJRBhHqkWW*$gT6BJPpf4ig>WtOF;xE1B+Du6@UDiez|9?Q_OTN&65mtQ!FeDlao@ClMD^am7w}l$PGb#priCb$ptC-z=VKl z62ydO1|SEXol^6Fd8i1OSpt`7<})xbPW5zg45_%a=E{C=rbL+Xc zjGnY?k<{t7jyj&O-Tz&ZFW6tm@ZQ1_814K*qLGbns`CtimZ_2<0@uFQt>Z70eL0DL z&yLRzf7ZOOta)d7yHMuzbtj4AN^Tcd|FfQx#2;z%-)p9mkOPxt%_C0MH{Oo5^Q9&S z96Nh^*2Lb(H!uD%@OLD8oZsWXn0RKUr9!Lo_c&4CuU2^*R%UO0CL0`nEjG#{xb~Qp zl;7)bT_!=NX5^d@@yc>wGmL-1tiNxc(xE6%x7w2mucO^~zjsu8TiB>PCxKV_)%ir8 z%cri~kqXgP?AKXV<2~d0UmJS6p6}meaxGKhxwO*!iF$V0mTuKAD>^D?cWa4ko3(wDQS7p|xBGnV-u7Be~*dg zr3t#SvuAFTofy{sEpYcU+bz#u`v>htI4a*ILIKP%jL-eLCP$%k$oxb@=Ammd$_eks^+{^y^+nQPBpfAQhZzkmP#|F@iZ zh+)tJ#sAz9z5xm@i6x0Z+Qz=3ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypui3%0DIeEoa6}C!=DfvmMRzNmLSYJs2 ztfVB{R>=`0p#ZYeIlm}X!Bo#oH`&0^~=l4^~#O)@{7{-4J|D#^$m>ljf`}G zDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaozEwNPsx)kDt+yc0eUB2MjsTtNYM=w0;VAl6P|d19C-3i%>$zB`;K7M%r z?(Lh`uU@`*{_N?K$B!O9xPR~No!hr=-nf44>XplvE?zi)?(CVz2)%Hf~tIZta@Yt5&X9zHI4|#fug$m_KjsoY}Kx&X_)J>XgZo zCQj(@>+R|8>g;H5Yi((6YHX;ltF5W7s;nq4D=jH5DlEv)%gxEo%FIYlOHD~mN=%54 zi;annii`*k3k?Yl3Jmb~^Y!ue^7L?bb9Hfca&)k_v$e6dva~QaGc_?bGBnWF)78<| z($r8_Q&mw`QdE$ala-N{l9Uh^6BQ8_5)|O)(o5QRik!Wev#IXHUEGEe5FGn+-7WMrNsE#|aG zf$6Y|BAXezWy*!ngA3L+G4rR*4qIuqtt-(rtHp!^@q$)`t>PelFlXEmLB! yY}Q_f@9!V(@6wtdS{wf5{qC#vTK4q;{{@8=G@0dsAE^J6jqqsV;uGRvum%7gn%G|e diff --git a/images/menu/en_US/menu-admin-over.gif b/images/menu/en_US/menu-admin-over.gif deleted file mode 100644 index 216d22939dc20c69cd9ef154d8ac6af6dc50303e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 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 diff --git a/images/menu/en_US/menu-fileimport.gif b/images/menu/en_US/menu-fileimport.gif deleted file mode 100644 index cbf35a95c6b4df4b25e3421e637dfcac66691cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcmZ?wbhEHb%wo`Bc*el6`~3Y^AHD`n-Bq&i(B%iOzJC9;aNiaG-fj0^yic0GXWj9e zleeC;Xxi}c+pmBB{>zrH`t<#mTFu&5pT58R^!@L@e=Vy|eE9bB&Z|#XpS^$m`NxtI zcQ;>rRJQi?pTGaq>()Je|8>T}8#3i9t2dn8e&tEPw7r`3>k{T4{`&Lx^n*9lYu7$` z|Mkt6A11AvTDM-5uUK{F!JD~9ZryzG;o{@Bm!7OrOW0mU%9Gx$?A2h*RJ2RbmQi2bGB~ZHFf9i zeSLfPAL=}K_*l!)vFwiyUj19b@6g4wO`J__CQK_Hs2o&aX8kf}p0H)d zJK@@}$9!4|42?VXa_!j3y87M3ZVvvSoEHZkp5#5!s<%v+E5Y$XUJ+;ZvE2p-PA+V= z@xG?BEwGngdxn5wqDmVJr;^h7**;TrnOzmXt3Fxtoil!a3m3~gU#T05dG5t6nDM}6 zIsZ)w_LZpt3YyF;p4?B@?e5<^d7=7NtB11^Ozs@&tFVZ;&wHpt)xFDM`QD9-g;_3g zs^76KUox5DrOn4n^+tlz9n7~&KJO3`FnN%`Eas!Y!eaer(*&)*9*6I0OJ-FhYRP6< w^meH52_y?iSGXWEKCg60JHL$uK)l5 diff --git a/images/menu/en_US/menu-home-on.gif b/images/menu/en_US/menu-home-on.gif deleted file mode 100644 index a514481210c20913ef6ede9d045c000246dfeebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1809 zcmZ?wbhEHb^kdLqc*el6@$}v4d#;wQIkV@|!ymu?Jbd->#*?=%-+x(h_@>Rw!ymu? zICkS{`<4qi>&~6O_wwWSU$4LX`1bQp?Be6;YtGzx{ptRj&tHE0ww-nO!P_s3Pu-t) z{7&um%R8?>n{@Ezg(vTBz5JNJ;r#DE|H?LBJp1VFq(isfef_!q;^Uru*B`z6QnU5a zgabEYmY;n1_Djg(6IL@1U48ccz^xY>FFpDEls47YguJQ{>uF6ifOi{A8Q?RM9s>m(KO)W`OsL0L9E4HezRZ2|B zPfE1{vO&W7N(x{lCE2!0jvxsIke$x?MX3s=dS<%G24?08=9YSfrsn1*<~j;S28O2k z2FCiv2D(PZRwf2kCPoTSpait7C?(A*$i)q67m#PGlu=SrV5P5LUS6(OZmgGIl&)`R zX=$l%V5DzkqzhD`TU?n}l31aeSF8*(!6mggxhS)sBr`ux0c2ugQhsTPtrF0s5HI8w zz>Uo-)&qM-FF8L~zap_f-%!s0gi&u1T;r4Gc(1?+|bP2&D7P!!pz0k(9qS?!pzv%(ZtEg*}~bv(a6{d zrq?AuximL5uLPzy1)nJ0o7b;izIguZ>66Eg9zM8#@9v%3w{G6Je(ma&%a<-*IDhW!nbW6Eo;ZH&=#j&R z4j$OQZ||PnyLRr_zHRH4&6_rESif%Vn$@dTu2{Zo>5|2Z7A}}SZ|F(<6Xm4w6X>Mw4sIRN7sjjN5C@(85DK083$j{5o$mNlr>k zh>weniH?el2oDPl2@VPj@b~le@%HlcaCdWcadvWau(z|dv9_|bFgG(bF*Y(Z(AU$| z(bm$`P*+n`QC3n^ke8E{k(QE_5El~_5f%~@;OFDz;pXDxU}s}xVP;}vU{L(Y0xrCC zKqRQtW?=u{;M3IH(%RPE(b?7A)7#fSVdA98Q>IRvK4a#r*>mR3o4;V;qQy&=E?d50 z<*LnrwX8De(p@^8!M0W-JP@Rl6jnA(8UHVSlYT zt1jb)1_oc|xk5G(hm@SzWE7{B6uiuiX<%YuwG6nx&#-^46{AIjWNC1df_D{1mOx@B z*Rl%n^!)t%qeqWsWo6yEb?fEJmp5+Q`1I-1>({Sm%$V`z%a`Qjl>095`I@Pz9>&{Y*v!BH**L`iQm9BFCZkRVo`vt@+B?bSGJw!Xf;A$ck|Kk1e8&74+SFJmKvt{*( zS0BFaK7T)H`X09lJ1v?v$W^S0n0=sT!&%4P?H|AWI{Wa=qjz5}J$cu(<-&!>Z|5Do z?Kx@pyRSbF+#Lu-*|ra^{1b|{{~Fk8#Z&lQ{N7Q=8eDq{IzJ`a_au;Nqes) zEjTjmz>T+Ge*FLcU%G51!{7soKUu(z(gBg6IALJ_-{9BO+|t_C-qG3B-P7CGKVjme z$y26In?7Uatl4ws&YQnr;iAP$mM&YqV&$sUYu2utXJ~J*einz6jJTL|JA*G%Govr# zmUeSlF+KrLAFsB(`WQ`j$NYVM+A3dW9PFDb$my=q)`O?3e~7 z7FNTE3;YcG=UOouL`aqjH%a+=aTGZ$Jjt=_LIT%h&&z7pRz>;)C7m5}*cgy+i+Vb-9 Vis038XLoIVeSJgnW-b;6YXGz~IfwuN diff --git a/images/menu/en_US/menu-reportingoptions-on.gif b/images/menu/en_US/menu-reportingoptions-on.gif deleted file mode 100644 index 15d877458302a0442c336f1c3af7f0859ba4012a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2164 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 WBa2c*SJPsV6AKji>^wXa7_0$eJcBU+ diff --git a/images/menu/en_US/menu-usage-reports-over.gif b/images/menu/en_US/menu-usage-reports-over.gif deleted file mode 100644 index 6211c99ab6b5ba0920dc246b1cf79b1689331559..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1817 zcmaJ>X;>3i6rF5VDhL7! zf~EqpX#rUT7ocuvUC>&styU51Qd_iEyV#8;RL~!#@5h_>?woV(z3-jxMMMdM*{~jP z0j>i;TU%RRUY=5^Y-(yU7z`qjNUzs-cXuZwBve;dmzS4|#p2r9+M1f0o}Qk=hYy#P zm7yrA)9G?^bG2G+baZrle0)(+kyI)zEG&$SjBIFVsI06s8jV?5SOR$pJAlarH~ znORy|+Su3_5fQO}|NfGalHT54fj|JfHOQkj%SEvuAI4zQH*|p(g(WEn28xljawUiI z>{uTKluJ33WkDjk2<0I%d8AH_EYU5Fm*`R?Y$;{Idtj&*(kf5|g2A9xu}-Ohv>Xa7 zRf!SEv^Ixn6mSfJrEnYSPuKvk*N(im(un@0Di`TP5s z5Pq7CN(|QeDK(zs3VcK(QOi+Gu2O<#MOds##W)mGrT?~|Kqq9C8tPa(REbJK)50i? zL8Y5p8V8C*{|{9tCeRuz4tZ1We+p~jH=+nF4$-Jm)e^)6_cW(MA)Xq6F_k)ArCK+B zim@^krqak%D9GcDof_yZf+cdLIXG{OB@#hVN(}}pB}f#XLow-4<#H($&gA-Y`Rs5y zn-$1l2$<|(HjmAtvsl~!K94Kpj&u1cNvZ--V&h!t8!mTJuGtU@)RdWzsO1|FsZgy_ zfMbnA^2uuno>cEOS2}qu>`A#aQ!zC2^}co8;~|rW%*zS$nl=;mN0cVdt4-#{jsE@D zpMU)R>bGBi`T6CGpPv8t?CHo4-#_{8@uP3! z8N7Vy;)T!7pBp%P=JctPpZ53lo;ZH&XixW%uFj73!)>iCpBy^a+|<}mf1s|mX8*^= zeS52`_Ec8v-c?>!y0fHsM^WMSZCeZS^Kx^tvog0B^qW80l##C6s7>3DifPpAQI%4$ zE+ttmTe}94O2lx|hl#6KeXw%H@?}dC;+Mp|9~-k+6uoF+RAhuuV7kiium$gNLPH>S zFpC)!7~s#K)2M#FKJ({!&wY1}mnVe`&h~JhvR`qCr5{OrrF!sPPMU~Vr6MT zA`htTMeODT=g@;zQ+&sA9!icVKs8t(H z-81;OV`arHr-C52s{qKvCvH*pt(7@i$XK8sS>W!iN##w|uGaBv>L<^)-hfaxxfLo;N9hw#p`+Yj212-EmGxOh9FH#$`2LDVIN zH`D-OM{!dsk!g5+e<7|#eB$|VQl?hsFlu8)fVJ^>Hw?t<{rE%&Y4@Hae6odL5Z@@cV!T^u z)qa3;ZC;k)6dXd>=EjW~nA35ob?I$`(Is>H>ge6zu$XA;5OEo|H?S7SO!A?5Is5P* z2o`o@BU*Y=ZWdt}J1);Pv^~eo4(S<$j`&3c=Z;f%NKo|9R-crN;(oss7ZdK~@QGPY b)|+P}pShRkRW2LO_dd`tT;OJb148}*Q46Bw diff --git a/images/menu/en_US/menu-usage-reports.gif b/images/menu/en_US/menu-usage-reports.gif deleted file mode 100755 index 3de7f408ad283b3ef7b7fb5e9f740c1830eaaa5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 924 zcmZ?wbhEHbY+w*$c*elczy6eW?eex2N9XUpY*)H4taVMv?A=?>K3sSFPGZl-We0C$ zPuVto>$$o`2SVD{@4oyrVZzoeXCIa?Jhj!7&!+XK?kzohvug37ofjWx&)A(hWyiw(*E`mp z+J62~(cFETPCqDHaG-PD>FAzKjVq3|uRXQ-?1Pxz&700V$eFp@v2y8#)A!rfoXncO zt9jK4%aVnyt53|{eP!e6`v$pl_FR6-Fl2!a$mO88U||2>;MmmM(%RPE(b?7A)7#fS zVdA98Q>IRvK4a#r*>mR3o4;V;qQy&=E?d50<*F_{QPWl(z7__?7EY#l3=X?@bI#&s zSfOTMZr>`PxOr>y_MHyRTr4|gFdkecsBUef)gmb_acbKR?%k~Hj!Z1O*_xR4o_BoW zuy6B+CeAm^j1DZ!jtneZ44exbChTEh7vOoq>e8?;_L@y0!@^`IZgv%xvp+5@6woc? zX;82bSkUOi_M$;Uf+6JqW8(`Bjf#_b6V^F0FOgL^;3v)$`-bO=kkzIGOs%{uq1-_Y zb9WcdtFV}%u!6md-7zU6;$h)UTSi4*5uGIk4UMc#PDZ}J`WyT?$|6v1}$_=bCX894qK=De`* z@K(4MG3~1~%R$E#b9Dj~rZ^qymWkj#DXWrup^@cpgG9!G?M1iJ8wKx%L@97EZ~yvk z)tk35srSzc-sX}^O=j+Mw$9%5ThrL1nTer$TgpqJv?ooRvu8zOP%{dvuCF9vl%n3WZEhghg-2}KAGSmmic6&huX?yMg<0I E00-+D&HeP?e_Uf~(H(zYI@xo^IVb6uf!&jcRn{%XS`xT$X zCwAU`8Mo$a&yhRUvkw3G{rAetPwTHeE8THr-PLCkkKIjLcRq3LIlm<*_TPK`^yBwc zm!CfU^xb*hQICbkZ@m6|{q^TLXCAJ;^7PlAzjm_^pMUn@&)S4u)N!mt`C#1U55u^Jsc_ zWLXpiH8OZGu^5OeFrH&!5mI2B#WL5E!CsUp;y8onIVO&|Vhjpj8W>sqCK_nG5^3C{ z!p30X%iw>2agB$-k)|()-C0zG|62)onjBcwxFvyqjr7US2bh@Hnf};rxcVZ1xnaAW zt4F}W9TUCyHCz-dI~i2!{p(!44m9|mR-f%BZBiA`&Ff(n;_=0>lc|{3L(TI*@WBNP z+a~MiS{+ytb@$mcJqM-(i9#oK6^lDX97wUMESKfWPbd@k?6I`fr(q-Wx( zVL=NKr<*D~iUQI$>lT(vSHIq2&QbG{_mT+HiM#3x7{rtg-Y;f!F+Wkl6t!HbtY4wy z2)C`u#DnZYE*qQ_Idf9uy4hzmPiT8pcw+XPVtF?810Jjb9WKlq2aDzN7`Q}L<7Ts7 znCZ`UL?d;|EE^|gA-w{F4o(4&goC^-Jnaj6SaljE`+2PUp4h&3F3X%epVX~W87)i; z;vGC>8W`dt3_pZMBu_O>Xgp^V)FPP0_sG$VFCoBJe`)P4pB0PLoU>LQozs~-tkoYMB%U-v3|!xsT>Uj+th0L#k0MgRZ+ diff --git a/images/menu/fr_FR/menu-admin-over.gif b/images/menu/fr_FR/menu-admin-over.gif deleted file mode 100644 index a04cc30fe4a354264a7c46a27fec07039cb140b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmZ?wbhEHbY+%q}c*ekR^XARBZ{Hq0dUWyP#d&#oU0q#qadF?ieOteN{o}`vYierF zpFh8A*RJW)r|;dnciXmY6DCZ^&(DvJjt&S2=UHa;51%bA05*=0>3entIeVM!;Ob}ku<3k-oftDHDYj0zOyu6H+=+rscL@dPU`r_3J< zm4rt3=4W2K9ydA|c7(^ zF|vemB*-!=T62puXf0u2Sj5hwv*6SNjS!a4Z4wL&rj9m@?Ay2;1-K{m%P9SCvAAHM zbg^L#+qEv+4S7q>Gjnmsa0vWx2w&pL%kl13N!CHu$8JWp3j`RSDl)aO*hz+IGBP_D z&abKZe9^?o!GhzVf#SvEiri;R6)aU6&$Bi&J&?QfM6ZWZ8 z^E)XVsB3)wiKXGL!g)>ye!o!HqFZcYchV2AOI&DRW^Iiq6L#h}BgUWe`sufORv&qd zohuY;C}|Eze^APq^@*d|>BWIV0;P zk<7^T;>hGl?>adi<*VD?yd4}+n%dyU`$Bz!0K3A1>tQ@CreTrkvK9+^`(|u#n&lia zftN)*3d9T@Y%_)2B<~v=lwRgSinzVl2 OH?ADp!$HCv4AuZb(xbBg diff --git a/images/menu/fr_FR/menu-admin.gif b/images/menu/fr_FR/menu-admin.gif deleted file mode 100644 index 594573e245d4bfc591972ce547cc7a65834353d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1083 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 diff --git a/images/menu/fr_FR/menu-home.gif b/images/menu/fr_FR/menu-home.gif deleted file mode 100644 index acd8f90202594d44e6383ea704fa74fce9fed011..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 806 zcmZ?wbhEHb3}et>c*el6aNm_zAHH6G@XDfTgMaU~$y?8T{r>Ctji>ityf0aJC~5j0 z+45EEj^EsU{(j5q6K)fBUU>ZW(vx?Nz1u&2`_;7NLd}M=auuu2K711~`@o}jU#1O zi-~)$B`r8&(Y_^W&cWY*{_el=+`N7B`>#I@n>V&^zjXKYr|-Z1Oxb_^)#vXEkKYNH zw)gpmZwAd9o%(jX`}*_s=O3FdJ~C+9ShMlmj;l}BoPBWl>ARo5|DL-4`sw?xc`Hsl z`|vG)<;k~Se*FLcU%G51!{7soKUu(z(gBg6IALJ_-{9BO+|t_C-qG3B-P7CGKVjme z$y26In?7Uatl4ws&YQnr;iAP$mM&YqV&$sUYu2t?zhRw{f#Jpl+|qV}l5$;)Z1Wiy z{SM8SQI_Nv)9}&h;ACUtTX=M?qqu;Lle>_ju!&e3FZ+`#hv!ImsA)?1`r7N+dN~`n zFtf3;`Z71MaJ=JTVJv8OU~E)lW#JTfkkY`=#L~gLdYh+fE1&$Goz;O0U0HZqxFjSD z7H~4OGP3cMOgQkQfq{chtz^@MlZ_05tO^rOTn^^!b?}$aN}rr~a&ohTiK0sI!iL37 zA|`QO%QUD$A`Fhs%z<=e|0>_@Z!=CA9f!+}(>U9ShinXEkWB zBrI7_&9Fc%)~jQ!FpK|eA7zp2mzgAe8#pc{E83+UFM*d(ZdV ayX))g8=JH5pWD0p`}+rnyTe5}7_0&1#7NWt diff --git a/images/menu/fr_FR/menu-reportingoptions-on.gif b/images/menu/fr_FR/menu-reportingoptions-on.gif deleted file mode 100644 index 3c664d5610847a53e1334487864767f9329ff53c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1193 zcmc(c>sOKo0Eb^81(oS*qS3ktrLK!^W!iGiypal`0|RG`Go97u={TF6t;;bt^i?78 zl6luOU^6u=DNpK=RPK36vLawk3+64wYbc6VZ0(=e@5A%$InRe*1R?y0|992E9$*px zM8mIdC`Mw-IvWRd2IFdC(*UF6c??&vV&2ftEvu&%(*#cjbh8hhj~Di6N*=u|?|YSW z_lauy&DfHuRXbJH|0>~*^2N*>{er2Y@73RnrqEisKr=zPu6xuF!BK?O$&cMs%$wE;+(%Q!wf^x1;mC~9ypi!x!&gm&)XLh2r%mf` zGrP6Fb!nx#IXZvv#$)|!@WL{Z+TPPn1tdaJP&1($Cu2F-Rn-NhHFY;R+{#*B{jCP>AC3Ix zJNdWo-n-8iw6?X^Jm?TUEb8nMiF0}+@`o}-Uu$pwVDn?;)B2%jFX~hgOgA60`XyU+ z2y)xMo3<@BkOfClskZiP#F8CQPle0v5hX=vXfIxMWECdi+8|-5q+pMoJh&}I@BBT3 znE7krdzya;gs{U#@5J0r=74b6RXZ}}(%B>d;Ck@zv)5tPn;acISzapO3^&gn03(Av zcmY>dZf_^+9KLk{keC?y@NyE@D*BU8vBVs4@5QyYPWGPCWPBy5$rt0^wm(P^VQDJO z#(NW7JR`GDSCT`eF`+0lCUz?TxTMG1gLkh}tukSV%^crmfmIoN7VEr7Y~+PX;SL~3 zXNZQCXAyfNIlfj|4NSg!Zk3Ml11oC_C|FGeN&KJP(vVqt0tPa^r{KJ`-fsc@cx3ppd5u?-^$ zkgw<@&feD@jT2H3009EquoutMGRYJ(2xBBd-~oV?Mk%hNApmS?z*lCfJhkVeUFdYP zcib`dM&NxsBAgm50lmgKP{_1@;rz{%4#jBi{zFZ+3teGZ<7J2=IIV#oUOPALu!4yov5 zr(+^I%I_MQwjeu%BXlSUNEUwLc^phcNlrLkZk@wu_INrOll$YrMb{|anXiA}?R^O= zw*Kov6dqMXS}Vxir_kE@)v*Fn^KyqG*5$4&CAQ{>gu|A^X9j2-{Rup9zT9u zQ&V&P{P|tGc1@o?ec{4|^XAPfDk^&V^l5&6esFN`lP6D}J$tr&`}W4Lx$?h@YQdR8-WyefyR!UAk=9vcSN=ZQHhmg@yI>^xU~~r?a#3{rmSJ zAt4toT-dT@OF%$CN=nMRckg<8d+*-8o0ODv_Uzd;Yt}?ZM=x2jILL{``4z za`K@=hYAV`zJLGz;lqcMCr|eE_2uN`{P^+X<;$1<|Nr;(^<@}3K=CIF*s(ew5)>y4 z?Ef2>+?rcj+uA!iySjUN`}!wLoYXXF>a^)IX3pxJGJD?q1q)})U9@!B@`X!QtX{LW zXVtomn^tewylwmJtvhz_>EE^Yz`@r2hmP(!a_r>h6Q|CuIdksf(hHZa&bwmTF0ZY3 z?Oyj4#b$Xk5jR;$%MNA^S643XZqASF3`<>^k8*QP?w4qm3ShBpe|&Hu8wV3lQhXYB(NeYX#<0pq1mMs505wV2+&H6$?cAtNUTi=IP*Zu-_{K8=7?3rGg3!0~u97vnD}CLN$gCk{4^b<-16Z!7W5lUD2$ZE&7vx0=7;LV>{U`A>NhYhP6b zl+56hG*HMFUH#*pp>p7E2gb&Gk5B$I^e1tL6x2iTMZ3=grfEqvbK zIcaOUO9@Zd@k@<2e?EEeUm>KnU7+M~l{dnm)hO@EQ9YWmO5s zW=6R=2b_82mJ|fIxEX|8N?#vqBADFg=yssP>y+vh*Kc#D@rNx?6p%=f;&WOmsP#12 z!Fv7E;0VTyR>=doZcmeA3;aE~TWbyJ-&hy4|lA1?lbjvM=cU-kE2*-|uUFaaw=hzkkvB2bdOn g7aY7V)3d>pOJB$LFrPJZ;gM55J{y@08yOg^0nxwGWdHyG diff --git a/images/menu/fr_FR/menu-reportingoptions.gif b/images/menu/fr_FR/menu-reportingoptions.gif deleted file mode 100644 index d9d8232b99fb165311e6082cf6375529b582144f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1193 zcmZ?wbhEHboW-EQ@Qi_B_xbyix1L+L?@G|rU9UcT_3zzQvha{a(}u6#f8BraK56=% z%MV^1zwvb4@tZBHPc(12aPHyTwrv-^ChczDerd(&d+rl<-FyAHbH}CgkKW#Y^ZCxJ zPcr2zHR{$WRjpC3UZYyGcFBo5@|CMEJ$aY6;zak(%j&gjJtppY_Tk%_vkwm3eD2)0 z!=hu0dHd$YC+^HYdi&zzx353{$X$No^3(SlFFZPQ>&4@DU#ITBzWL%Kh04`me*V7r z_}!=Pzm}i6_v-Wam!H0ywQYXz=5y`FbDw|wuG@4@r(u1@l4Cu)F6%aKC|z?}yJ3CS z(&HDOyzAY4<>~vcJFhFzmvV}`2YX^rOQ?_3^Y*u$pUtQ4u}NB2?P88 z2Ii3Fme#iRj?S*`p5DIx2@@wZO`1Aw`iz;gdZ)~uH-Evx8FLpcUABDTk`=4htnFE~ zZsVra8#Zs-K6~qq-Fy0X?LBa?b^oEGdyX7Cx%tGYvunK1oJzKG600&62rx5sa`^;SWF>825HmEpbb`^XMV#NLL+1)Z z>cTEA1_2KP)kW4dUsuRPJm8ZPW#EwTi@EhBNs-Z4T}#2L_27x}AKP|yYfQ;-nc=hC zL_%eow*3b8|I4Sexb(7%irLrroNzdF$j^yKOd?2<;ebeW1h>GlNhOSpOzc7nOxA2T zIEDF*g762g6^on>Gw}%s#55eZbuNot*JFVRW7G2Xl`3sBA2g(QG>Hmq_?{==v${mS z@xVewjtQJndOu7>Du5bW1UMpM-XHMV7A)hi+(}5Aq1~o7O8mishYDr(XQdDQ`tnub zrGczbLcl$(YajO|yDef{)I5PhQepX>_-2y>QHoq9Dk6%z1KAlon+3Khlotgy1_b^T zU}{Kc7EoaDDfFE6GNSCGa{>lk8KyI{dKqeZqF~)=N=*< zOBS$*1f3B$%OE1>0c-kDA!NDOW+1?!E+3NLE z;sRgJPl+&ws1&vaY0+JkrfLC3hL2jfghCV=IhRh`bx4s(;KG%d072ISF+8RdL_*&m zF;?{4an6&Y!{zDaFs1{68S%l>SX&#`s9t>L*OqJeLCkwmYWQMhlNSt(Y`4p_o4Naa ze)P6!9lOD0Iqy?gy$;qSlQ`3IODdlwvh gE!XqGoJ&8)_b{I~bK#M5K0X`SjKtz|d=wb00sgrJ`v3p{ diff --git a/images/menu/fr_FR/menu-sushi-on.gif b/images/menu/fr_FR/menu-sushi-on.gif deleted file mode 100644 index e61086469f6ad6a749022a11f9344796688305d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1919 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 WBa2c*SJPsV6AKji>^wXa7_0$eJcBU+ diff --git a/images/menu/fr_FR/menu-usage-reports-over.gif b/images/menu/fr_FR/menu-usage-reports-over.gif deleted file mode 100644 index 5dbeeed5f89b09fc4753415c0781724ee5677f61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmV-)1B?7eNk%w1VWt2U0M!5h$;ruYZ*QxstCWqdwY9fVPU|)z_+)zudlD&-QAd&n99n^adC0W%gdacoY&XaT3T8F00000 z00000A^8LV00000EC2ui0Hy#I000L6K%Q_&EEKb*(&_!{ebQ}l}YylDfLxUt1#Ft4_F@KB_AvkbRn}U)jje05Mm+%G)(Ty8Tk`vs7`S{dE`=Hz!wjuhR)$!v_pViA_WTMh-F zKufxaB-0)eJ(WoTJ~eoei#Ed`CQ5d=h$0kBKK+(RTRgCoK!crpQxJzDB2v|O0ygIb z1SD|KLV}sJ$e4e32w=bhfwZ$jTmXzD4?619Xiz!o?QlRTL)c-DZ4Jd#kTwRWsE9z| zbfct^K7qMVLk|_EkB(hHkiZ2lT%lSK=&_>bo=MzEM4o&G8mOPS*(KF5G(d;j)7_>J}Zy zp0aJng~!vkp39oPt9;?X=$=hAOOEWm{B+&PdpR?A*DgI0(X}zIZ_Bpxk7n<_GI7iK zIlHfHJ@+WKZ}alQw^FC<@NHVX>CA(+)h9zc*3Z~^X~ogosgt+o&e~&EIDh@gd+lpa zrBB_t@$~(e-pwKH>r3Y!2e!MwF6?(V+y zWcrRv^Y&h=Ty)5*VbzKwx8nM@*p)Bda`xe*E$7=-95u+Dv*+?thM@x#f3kobs{
  • |zSd3GLbz4Tb?f;iR(6g> ztV|R3yD=SZzu$6Z;`0klW_%*{EvEeZHyD~ZUH2|ve6Y`jgQ>*&3jf?q9;`Pj874Ne zu(CBPozX~nJ#RtH?v4jq4GIyB(K5X(H^PoMFgbD+@fxQwgbVh`dq>GE*|@~QQIz#> zSL6W+qtr8OGCN#d0?tn7sQ6_vX_H4o;x?9sFH0KTSe0emJ_wjF9^&h|DIoD6ZB3(K z^np2Q3;_lW2Fk4e8(vA5pP9kr$l58xAW*=ln0$DN*wLB3F^==kOj5Kc2v2U>l+N4i zY!j~4u)Tx1npLw#;>ZD49x?GYiBp}D%Ntl-ny0Rw z5n%hV&bxfEOx1y(JD8f8EY4>>srZz7O5ng{Tjn|LQ)=w?y89)5OI32_YFY8&5F1~D zL7bVCsOVIt!%LsuV%!iL!jik~;WS^TCKc013S12u9<|LnR~4I%tCR`&vFmJj*mIH5 z;BGh9hxWVbJT3)Job4ajudj?_;$RWa_G6sj5dEt|^}1e=?KEG;I@8L2H)ch3zqTJ8 z$`Ubkf2aFoyKPwNF!^pxh{*ILrQn+#PG&DU`P5h@I#0T}<>Z|H?HmaQm=10Uamiuq zQ5E*mx|$i{sU=qEVA*^lX>zUa(arnkPROAE$8s? zp7XvZlcuTJXJz&c8XJ@YH1LKxvd)=xj2qnl6mt%mDBuoDTsmht4ASlD`@sYuZt;mL z?H{6}n?yMAgZ7#Wd|{&sc?5Vz*S)&moHB|C&_;x3%<;IZIj$qbdQ+@7n*S==b%tvs zI7L;JA27q~UlmK3sM1g)ueAAayjp%>cSW$@IedphU&-P7qDt5VAH zPuYH~RWU&L=Ddh zhYoybsAnCJMFM;D5Hy1$lo3T=z1Kz7BXaJHe#V9RU1_t|p0WbcEP)ZrqR>WlNm_; z1F_lJ*|{PkBi&3)Oc<9fTXy@{v13H#r#l^vzK!yqm z3W5TQ;lZJ;ipXj)oGPzxHh<~TrJZ2o85tQqefq>OapFW*1v~EtC<=kKgX>E|RE?v5`ZtdE&Wk8KQ zLPA2KiHV83L4F2-d3#PWl!kjTG9bm#%l`=Q>*B?WE0!!-;`RFV>)#*&V6=cGHXlCq zA8Z+t#y22I7)A$2jvRS{RpaBwk8k}a3_hN^aSyB!Aiw}UTFF(w8qV8@OfVp#>nkJqkUYXBAc3nIkD#s5QHgk9skd-uQ! zB_t#m9z1v;vTWHhE)f6EpFeOlST!0O8-D}QTwGiX!jdwtZES3G(A8koXl`!)14J`3 zGlTg&JUk3|HS)5vuzvpe=l|iuhs}`1k)4RkMmAhF5am>0d_hcM1DnIZ&d!b^j-e6g z%&#E&+O=ySXMeeT`7&4>M&G)13$B(C6q!&>AO<5LCjt!wS^pE=ss9OKpatL%2M90# X?RKY|&8^bJ00000NkvXXu0mjfMPZ!# literal 0 HcmV?d00001 diff --git a/images/menu/icon-sushi.png b/images/menu/icon-sushi.png new file mode 100644 index 0000000000000000000000000000000000000000..e52769bbe386fe5bde08b9b8e8e98472da6adac5 GIT binary patch literal 543 zcmV+)0^t3LP)tFffq8$;pW! zI5?Q0udk2c=g*&D34VTlZGV6NWMyS#{ydi*3D-6_wOIW z@87=}n3$MY*x1;385tRQBqSu{e0+Rbg@uJrEL^y77Et52$B!R>ShHr$RG@*k0|Elt zSvWX21l85mBmeyQqnneH^XD%Rh=_eZ`vxwyDkiHV7^FI~FysF9J8u)Mr{InX69fST?DUC+qQ&aMn} zg&mOnm&Mi9)q3mJt^F4+TzKl>;E)ScDEQ*Vi{0nXpFblgD43IS4mdQuXlrY8ef8?qYhaYH#Ky*cxqbUK z12D!In1KmkpRBCxZ&6WEE~w&fK>Xykm#p0KwwR->n002ovPDHLkV1hzc3G)B| literal 0 HcmV?d00001 diff --git a/images/menu/icon-usage.png b/images/menu/icon-usage.png new file mode 100644 index 0000000000000000000000000000000000000000..1fdb38c0797b0e191dd44e96408cb0823637c826 GIT binary patch literal 323 zcmV-J0lfZ+P)R0dFckem(-FFSk zvRwa!@$W*nmNzg$;KTeT#`h=HQJCO@ur}^6tw*>#qFM?Ebm4!~Er_M<*)fI{(#WC( zuhy-Onv<(<%%OxK7FZ#UgytIwFh5Y@}*iM)aie6r&fdsRbp7$AxyLdd|x z#hIWEryvLHPlm7B1zyR Date: Tue, 10 May 2016 16:51:56 -0600 Subject: [PATCH 42/52] Menu Fix --- templates/header.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/header.php b/templates/header.php index 385da5b..577cfc9 100755 --- a/templates/header.php +++ b/templates/header.php @@ -245,7 +245,7 @@ getCORALPath() . "index.php")) || ($config->settings->organizationsModule == 'Y') || ($config->settings->resourcesModule == 'Y') || ($config->settings->cancellationModule == 'Y') || ($config->settings->usageModule == 'Y')) { +if ((file_exists($util->getCORALPath() . "index.php")) || ($config->settings->organizationsModule == 'Y') || ($config->settings->resourcesModule == 'Y') || ($config->settings->managementModule == 'Y') || ($config->settings->usageModule == 'Y')) { ?> From 4c72c1fa9595a9121b54d920df205e563f795496 Mon Sep 17 00:00:00 2001 From: Ryan Chisum Date: Wed, 11 May 2016 11:58:22 -0600 Subject: [PATCH 43/52] Newly Designed Title Bars --- css/style.css | 53 ++++++++++++- images/logo-coral.jpg | Bin 0 -> 3242 bytes images/title-icon-usage.png | Bin 0 -> 1889 bytes templates/header.php | 148 +++++++++++++++++++----------------- 4 files changed, 131 insertions(+), 70 deletions(-) create mode 100644 images/logo-coral.jpg create mode 100644 images/title-icon-usage.png diff --git a/css/style.css b/css/style.css index af5be7f..76ddd17 100755 --- a/css/style.css +++ b/css/style.css @@ -1350,7 +1350,7 @@ select option.changeSelect{ .titleTable td { height: 40px !important; - padding-top: 20px !important; + padding-top: 13px !important; } .titleTable td a { @@ -2576,4 +2576,55 @@ li.change-mod-item a { li.change-mod-item:hover { background-color: none !important; +} + +/*--- New Top Bar Titles ---*/ + +#main-title { + font-size: 36px; + color: #6098A7; + font-family: "Open Sans"; + font-weight: 100; + float: left; +} + +#main-title span { + float: left; +} + +#menu-login { + float: right; + text-align: right; +} + +#main-title-text { + margin-left: 15px; +} + +#powered-by-text img { + vertical-align: text-bottom; + margin-left: 7px; + float: none; +} + +#powered-by-text { + color: #687FA1; + margin-top: 20px; + font-size: 14px; + margin-left: 10px; +} + +#main-title > img { + margin-left: 15px; + float: left !important; +} + +table.titleTable { + border-collapse: collapse; +} + +/*--- Main Table ---*/ + +#main-table { + margin: 0 30px; } \ No newline at end of file diff --git a/images/logo-coral.jpg b/images/logo-coral.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26dc1dd2c49a1be0c01c3cfcf2ea070f1e2add99 GIT binary patch literal 3242 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 literal 0 HcmV?d00001 diff --git a/images/title-icon-usage.png b/images/title-icon-usage.png new file mode 100644 index 0000000000000000000000000000000000000000..17c3dbec0427752e914e72e1e4396548e235d649 GIT binary patch literal 1889 zcmbVNdsNeA6mJWZmxwq(L7XMX1f@-yJ`<^ktzcCc76d$qHcbO`*rujIf_k)+DdJl< z5EPvbR6IJJ=yWOv@htcio1{IruaI(CKFSMJ4Uzr|Uh8`&jQ(7jSnKTu}NwWxZ>4+G!l|^$nv2lzQ!}AGRU?6f$78UTvvEzWiWK;ne zvLqipz1e11NT7=gHPf>;J+4VVcU6ENmE78}Z_fL^;OyLX8}K+vl~ z=c|BML1iYT2-GA+2xKC;5QpRnfdUbUWeSB<5hH*hu?&PHpac@a5>yJIQdrRU0IWC4 zn1kvx34OlUlM2YAX)6kXg@uKpLWzi^azQbIARq*TFf3#>gtj6JjWI%tEu!CohOpt3 z$x53@i@;?OGmr(e3Sc9Bm4extl=RxL#nwj@OBu*uR!}U0K(pDESFg5>))D`P@kVW1 zT9K6ib%c#9pm4SxIT8I}mb&r~vjxWHcF37*TnQVb zh(WB(0s8R9|H~lA1_ip>7O(aH zCVy}s9e!+`DhMmAS>d76B~%)=C;#pEyGi>sav-<5Ikvjg!%*q%&F!Z;}jn`>zQ9!$ThcDyVxZq%%EW2sgrQ6@USK1c6AaMCkKX=Iq zec9lV!JGV-huu5uh}bF*;04=N`mpm|YqH%un=VE@TNh=kF3lKL*VWnX7utl+Iyb#( zrgdrO#d<6-Vt4(l1E27$tra2PQM&fc@2=k9KWWdbZ}b1GARIdA{hCh(> zE$?Q0qTFvrbf1Y?wWz}Wd+Xvx$ElSGqc8LJobM=K>(?<`@sYQZ`>e#-5%V%JQaxV6 zbcIhilRK|yIy82`?)@PS<;>)P%nrhfqbaAsz6{ThAN!K=IX+6}0a zE|r&EyHzl7couitdT^v~^iS_(bWMyQd(iYwm^o8E^v?aiI*o%3e?T)@e%=<88mT$w znPBy3pehkD-;sQ_r?N$f@+f4ArQ);uye-hT0hdm@eRZMs_wr`m$Z5woi@rSQbbpc> zIliqdf2goF2VMSj&FL4O`s2@zOHH+$Gw@k+x-S*-mj(K?jvll%GawJz#TY4UOb)lx z%e!iFX^>a#3eKnzUi+)}PexXstF~@0?I9edrWD4_;qV7qO~Z okyoDmVln;PH3IhU+T*x - +
    - -
  • +
    + +
    +
    - - - - - - +
    -  - -
    - -lastName){ - echo $user->firstName . " " . $user->lastName; - }else{ - echo $user->loginID; - } -?> - -
    settings->authModule == 'Y'){ echo "logout | Help | "; } ?> +
    + + - - + - + settings->authModule == 'Y'){ echo "logout | Help | "; } ?> + + + + + + + + - - @@ -74,9 +73,9 @@ if(e.keyCode == 13) { doSubmitLogEmailAddress(); } - }); + }); - + $sushiServiceID))); + $sushiService = new SushiService(new NamedArguments(array('primaryKey' => $sushiServiceID))); - $sushiService->setDefaultImportDates(); + $sushiService->setDefaultImportDates(); ?>
    @@ -103,20 +102,20 @@
    + +
    + + + +
    + + -
    emailAddress; ?>' style='width:190px;'/>
    - + - + @@ -160,7 +159,7 @@
    getServiceProvider; ?>


    getServiceProvider; ?>


    (yyyy-mm-dd)
    -  getServiceProvider; ?>" +  getServiceProvider;?>"
    - + @@ -189,7 +188,7 @@ } }); - + + '>
    Level outlierLevel; ?>

    - outlierLevel; ?>

    - + - + @@ -348,7 +347,7 @@ case 'getPublisherNoteForm': if (isset($_GET['publisherPlatformNoteID'])) $publisherPlatformNoteID = $_GET['publisherPlatformNoteID']; else $publisherPlatformNoteID = ''; - if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; + if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; if ($publisherPlatformNoteID){ $addUpdate = _('Update'); @@ -371,7 +370,7 @@




    - + @@ -414,8 +413,8 @@ case 'getLoginForm': if (isset($_GET['externalLoginID'])) $externalLoginID = $_GET['externalLoginID']; else $externalLoginID = ''; - if (isset($_GET['platformID'])) $platformID = $_GET['platformID']; else $platformID = ''; - if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; else $publisherPlatformID = ''; + if (isset($_GET['platformID'])) $platformID = $_GET['platformID']; else $platformID = ''; + if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; else $publisherPlatformID = ''; if ($externalLoginID){ $addUpdate = _('Update'); @@ -435,7 +434,7 @@




    - + @@ -479,7 +478,7 @@ //sushi service information case 'getSushiForm': $sushiServiceID = $_GET['sushiServiceID']; - $platformID = $_GET['platformID']; + $platformID = $_GET['platformID']; if ($sushiServiceID){ @@ -497,18 +496,18 @@




    - + - + +
    - @@ -540,22 +539,25 @@ - + + - " . _("only needed for HTTP or WSSE Authentication");?> + + - + + - " . _("only needed for HTTP or WSSE Authentication");?> + + + - " . _("number indicating the day of month the service should run") . "
    " . _("(e.g. 27 will run 27th of every month)");?>
    + @@ -586,7 +588,7 @@ //form to edit associated organizations - case 'getOrganizationForm': + case 'getOrganizationForm': $publisherPlatformID = $_GET['publisherPlatformID']; $platformID = $_GET['platformID']; @@ -635,7 +637,7 @@ "; + echo ""; }else{ foreach($statsArray as $monthlyStat){ echo ""; echo ""; echo ""; echo ""; - echo ""; + echo ""; echo ""; } } @@ -719,7 +721,7 @@ case 'getYearlyOverrideForm': if (isset($_GET['platformID'])) $platformID = $_GET['platformID']; else $platformID = ''; - if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; + if (isset($_GET['publisherPlatformID'])) $publisherPlatformID = $_GET['publisherPlatformID']; $archiveInd = $_GET['archiveInd']; $year = $_GET['year']; @@ -748,7 +750,7 @@




    -
    +
    -
    -
    -
    -
    - (optional)
    -
    -

    None currently
    " . _("None currently") . "
    " . $monthlyStat['Title']. "" . $monthlyStat['usageCount'] . "update override
    " . _("ignore outlier") . "
    " . _("update override") . "
    " . _("ignore outlier") . "
    - + @@ -757,7 +759,7 @@ "; + echo ""; }else{ foreach($statsArray as $yearlyStat){ ?> @@ -770,7 +772,7 @@ - + @@ -906,7 +908,7 @@ //Related Titles (this form is display only) case 'getRelatedTitlesForm': - if (isset($_GET['titleID'])) $titleID = $_GET['titleID']; + if (isset($_GET['titleID'])) $titleID = $_GET['titleID']; $title = new Title(new NamedArguments(array('primaryKey' => $titleID))); @@ -983,15 +985,15 @@ ?>


    None currently
    " . _("None currently") . "
    PDF
    - - - - - + + + + + @@ -1037,8 +1039,8 @@ default: - echo _("Function ") . $_REQUEST['function'] . _(" not set up!"); - break; + echo _("Function ") . $_REQUEST['function'] . _(" not set up!"); + break; } diff --git a/ajax_htmldata.php b/ajax_htmldata.php index 7c53b82..0ebb58b 100755 --- a/ajax_htmldata.php +++ b/ajax_htmldata.php @@ -44,7 +44,7 @@ ?> -

    name; ?>

    +

    name; ?>

    @@ -93,7 +93,7 @@ ?> -

    +

    @@ -125,7 +125,7 @@ echo "
    "; echo ""; echo ""; - echo ""; + echo ""; echo ""; } @@ -171,10 +171,10 @@




    - +
    " . $externalLogin->password . "" . $externalLogin->loginURL . "" . $externalLogin->noteText . "edit
    remove
    " . _("edit") . "
    " . _("remove") . "
    - - - - + + + + @@ -186,7 +186,7 @@ echo ""; echo ""; echo ""; - echo ""; + echo ""; echo ""; } @@ -214,7 +214,7 @@ //both publishers and platforms will have organizations lookup if ($config->settings->organizationsModule == 'Y'){ - echo "

    Organization Accounts

    "; + echo "

    " . _("Organization Accounts") . "

    "; if (isset($_GET['publisherPlatformID']) && ($_GET['publisherPlatformID'] != '')){ $publisherPlatformID = $_GET['publisherPlatformID']; @@ -394,7 +394,7 @@ - + @@ -417,7 +417,7 @@ echo ""; echo ""; echo ""; - echo ""; + echo ""; echo ""; } @@ -456,26 +456,26 @@ $sushiService->getByPublisherPlatformID($pubishlerPlatformID); } - echo "

    SUSHI Connection

    "; + echo "

    " . _("SUSHI Connection") . "

    "; if (($sushiService->platformID != '') || ($sushiService->publisherPlatformID != '')){ echo "
    Interface LoginPasswordURLLogin Notes  
    " . $externalLogin->password . "" . $externalLogin->loginURL . "" . $externalLogin->noteText . "edit
    " . _("remove") . "
    " . _("edit") . "
    " . _("remove") . "

    ' . _("Compliant?");?>  
    " . $endYear . "" . $counterCompliantInd . "" . $platformNote->noteText . "edit
    " . _("remove") . "
    " . _("edit") . "
    " . _("remove") . "
    "; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; echo "
    Service URL" . $sushiService->serviceURL . "
    WSDL URL" . $sushiService->wsdlURL . "
    COUNTER Release" . $sushiService->releaseNumber . "
    Report Layouts" . $sushiService->reportLayouts . "
    Requestor ID" . $sushiService->requestorID . "
    Customer ID" . $sushiService->customerID . "
    Security" . $sushiService->security . "
    Login" . $sushiService->login . "
    Password" . $sushiService->password . "
    Service Day" . $sushiService->serviceDayOfMonth . " (day of month)
    Notes" . $sushiService->noteText . "
    " . _("Service URL") . "" . $sushiService->serviceURL . "
    " . _("WSDL URL") . "" . $sushiService->wsdlURL . "
    " . _("COUNTER Release") . "" . $sushiService->releaseNumber . "
    " . _("Report Layouts") . "" . $sushiService->reportLayouts . "
    " . _("Requestor ID") . "" . $sushiService->requestorID . "
    " . _("Customer ID") . "" . $sushiService->customerID . "
    " . _("Security") . "" . $sushiService->security . "
    " . _("Login") . "" . $sushiService->login . "
    " . _("Password") . "" . $sushiService->password . "
    " . _("Service Day") . "" . $sushiService->serviceDayOfMonth . _(" (day of month)") . "
    " . _("Notes") . "" . $sushiService->noteText . "
    "; echo "

    " . _("Edit SUSHI Connection Info") . "
    "; echo "

    "; }else{ - echo "\n(none found)

    " . _("Add SUSHI Connection") . "
    "; + echo "\n" . _("(none found)") . "

    " . _("Add SUSHI Connection") . "
    "; } @@ -565,7 +565,7 @@ $holdYear = $year; } - if ($statArray['archiveInd'] == "1") {$archive = ' (archive)';}else{$archive='';} + if ($statArray['archiveInd'] == "1") {$archive = " " . _("(archive)");}else{$archive='';} echo "
    "; echo "  " . $statArray['resourceType'] . "s" . $archive; @@ -575,7 +575,7 @@ echo ""; echo ""; - echo ""; //loop through each month @@ -599,11 +599,11 @@ echo "
    View Spreadsheet"; + echo "" . _("View Spreadsheet") . ""; echo "
    "; echo ""; echo ""; - echo ""; @@ -620,9 +620,9 @@ if ($statArray['outlierID'] > 0){ - echo "    update overrides for this year"; + echo "    " . _("update overrides for this year") . ""; }else{ - echo "    (no outliers found for this year)"; + echo "    " . _("(no outliers found for this year)"); } echo ""; @@ -658,19 +658,19 @@ $bookTitleArray = $obj->getBookTitles; - echo "

    Titles

    "; + echo "

    " . _("Titles") . "

    "; echo "
    "; if ((count($journalTitleArray) == '0') && (count($bookTitleArray) == '0') && (count($databaseTitleArray) == '0')){ - echo "(none found)"; + echo _("(none found)"); }else{ if (count($journalTitleArray) > 0){ - echo "View Journal Spreadsheet
    "; + echo "" . _("View Journal Spreadsheet") . "
    "; } if (count($bookTitleArray) > 0){ - echo "View Books Spreadsheet
    "; + echo "" . _("View Books Spreadsheet") . "
    "; } } @@ -759,7 +759,6 @@ $resolverURL .= $urlAdd; echo "\n
    "; - }else{ echo "\n"; } @@ -836,7 +835,7 @@ $resolverURL .= $urlAdd; - echo "\n"; + echo "\n"; }else{ echo "\n"; } @@ -861,11 +860,11 @@ if (count($titleArray) > 0){ ?> -

    Database Titles

    +

    " . numberToMonth($month) . " " . $statArray['year'] . "delete entire month"; + echo "" . _("delete entire month") . ""; //print out prompt for outliers if outlierID is > 0 if ($outlier > 0){ - echo "  view outliers for this month"; + echo "  " . _("view outliers for this month") . ""; } echo "
    " . _("view related titles") . "
    " . _("view in link resolver") . "
     view related titles
    view in link resolver
    " . _("view related titles") . "
    " . _("view in link resolver") . "
     
    - + - @@ -1133,14 +1132,14 @@ } } - if ($pageStart == $nextPageStarts){ - echo " "; - }else{ - echo " "; - } - }else{ - echo "
    "; - } + if ($pageStart == $nextPageStarts){ + echo " "; + }else{ + echo " "; + } + }else{ + echo "
    "; + } //making table larger so it fills the page more echo "
    Title
    Total +
    "; @@ -1166,8 +1165,8 @@ echo ""; echo ""; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo ""; } @@ -1252,8 +1251,8 @@ echo ""; echo ""; echo ""; - echo ""; - echo ""; + echo ""; + echo ""; echo ""; } echo "
    " . format_date($importLog['dateTime'], "%m/%e/%y %I:%i %p") . "" . $importLog['loginID'] . "" . nl2br($importLog['details']) . "view logview archive" . _("view log") . "" . _("view archive") . "
    " . $obj->name . "" . format_date($sushi['importDateTime']) . "" . nl2br($sushi['details']) . "view to processdelete import" . _("view to process") . "" . _("delete import") . "
    "; @@ -1517,7 +1516,7 @@
     
     
     
    By 
     
    - - - + + +
    - $numberOfRecords){ - if ($pageStart == "1"){ - echo " "; - }else{ - echo " "; - } + + + - - -
    + $numberOfRecords){ + if ($pageStart == "1"){ + echo " "; + }else{ + echo " "; + } $maxDisplay=41; if ((($totalRecords/$numberOfRecords)+1) < $maxDisplay){ @@ -1598,30 +1597,30 @@ } } - if ($pageStart == $nextPageStarts){ - echo " "; - }else{ - echo " "; - } - } - ?> - - - -
    + if ($pageStart == $nextPageStarts){ + echo " "; + }else{ + echo " "; + } + } + ?> +
    + + +
    save(); - echo "Override has been updated"; + echo _("Override has been updated"); } catch (Exception $e) { echo $e->getMessage(); } @@ -439,7 +439,7 @@ try { $platform->save(); - echo "Platform Reporting Display Name has been updated"; + echo _("Platform Reporting Display Name has been updated"); } catch (Exception $e) { echo $e->getMessage(); } @@ -455,7 +455,7 @@ try { $platform->save(); - echo "Default display list has been updated"; + echo _("Default display list has been updated"); } catch (Exception $e) { echo $e->getMessage(); } @@ -471,7 +471,7 @@ try { $publisherPlatform->save(); - echo "Publisher Reporting Display Name has been updated"; + echo _("Publisher Reporting Display Name has been updated"); } catch (Exception $e) { echo $e->getMessage(); } @@ -487,7 +487,7 @@ try { $publisherPlatform->save(); - echo "Default display list has been updated"; + echo _("Default display list has been updated"); } catch (Exception $e) { echo $e->getMessage(); } diff --git a/css/style.css b/css/style.css index 4d08bd1..4cad0e4 100755 --- a/css/style.css +++ b/css/style.css @@ -57,14 +57,14 @@ a.helpfulLink {color:#526972;} .smallText{color:#3D545D;font-size:92%;} .smallerText{color:#3D545D;font-size:85%;} -.redText{color:red} +.redText{color:red;} .smallRedText{font-size:85%;color:red;} .darkRedText{color:#7a0026;} .bigDarkRedText{font-size:125%; color:#7a0026;} .smallDarkRedText{font-size:85%;color:#7a0026;} -.normalText{color:#3D545D} -.smallBlueText{font-size:85%;font-weight:normal; color:#526972} -.smallGreyText{font-size:85%;font-weight:normal; color:gray} +.normalText{color:#3D545D;} +.smallBlueText{font-size:85%;font-weight:normal; color:#526972;} +.smallGreyText{font-size:85%;font-weight:normal; color:gray;} .boldBlueText{font-weight:bold; color:#526972;} .boldText{font-weight:bold;} @@ -119,21 +119,21 @@ table.queueMenuTable { table.queueMenuTable td { margin: 0; - padding: 3px 3px 3px 3px; + padding: 3px; background-color: #f6f8fa; - border-top: 1px solid #e6e5e9; - vertical-align:top; + border-top: 1px solid #e6e5e9; + vertical-align:top; -moz-border-radius: 0px; } table.queueMenuTable td.selected { margin: 0; - padding: 3px 3px 3px 3px; - border-top: 1px solid #e6e5e9; - background-color: #f2f5f7; - background-image:url('../images/tab.gif'); - background-repeat:no-repeat; + padding: 3px; + border-top: 1px solid #e6e5e9; + background-color: #f2f5f7; + background-image:url('../images/tab.gif'); + background-repeat:no-repeat; background-position:right top; -moz-border-radius: 0px; } @@ -151,8 +151,8 @@ table.queueMenuTable tr { } -td.queueRightPanel { - border-width: 1px 1px 1px 1px; +td.queueRightPanel { + border-width: 1px; border-style: solid; border-color: #e6e5e9; border-collapse: collapse; @@ -176,7 +176,7 @@ table.queueDataTable { table.queueDataTable td { margin: 0; - padding: 3px 3px 3px 3px; + padding: 3px; border-width: 1px 0 0 0; border-style: solid; border-color: #e6e5e9; @@ -228,21 +228,21 @@ table.adminMenuTable { table.adminMenuTable td { margin: 0; - padding: 3px 3px 3px 3px; + padding: 3px; background-color: #f6f8fa; - border-top: 1px solid #e6e5e9; - vertical-align:top; + border-top: 1px solid #e6e5e9; + vertical-align:top; -moz-border-radius: 0px; } table.adminMenuTable td.selected { margin: 0; - padding: 3px 3px 3px 3px; - border-top: 1px solid #e6e5e9; - background-color: #f2f5f7; - background-image:url('../images/tab.gif'); - background-repeat:no-repeat; + padding: 3px; + border-top: 1px solid #e6e5e9; + background-color: #f2f5f7; + background-image:url('../images/tab.gif'); + background-repeat:no-repeat; background-position:right top; -moz-border-radius: 0px; } @@ -260,8 +260,8 @@ table.adminMenuTable tr { } -td.adminRightPanel { - border-width: 1px 1px 1px 1px; +td.adminRightPanel { + border-width: 1px; border-style: solid; border-color: #e6e5e9; border-collapse: collapse; @@ -327,18 +327,18 @@ div.f3 { clear: both; } .checkboxes label{ - display: block; - float: left; - padding-right: 10px; - white-space: nowrap; + display: block; + float: left; + padding-right: 10px; + white-space: nowrap; } .checkboxes input{ - vertical-align: middle; + vertical-align: middle; } .checkboxes label span{ - vertical-align: middle; + vertical-align: middle; } @@ -362,21 +362,21 @@ hr { } #search_box { - width: 170px; - height: 19px; - background: url('../images/searchbox.gif'); + width: 170px; + height: 19px; + background: url('../images/searchbox.gif'); } #search_box #search_organization { - float: left; - padding: 0; - margin: 2px 0 0 6px; - border: 0; - width: 159px; - background: none; + float: left; + padding: 0; + margin: 2px 0 0 6px; + border: 0; + width: 159px; + background: none; } #search_box #go { - float: right; - margin: 3px 4px 0 0; + float: right; + margin: 3px 4px 0 0; } @@ -446,7 +446,7 @@ table.verticalFormTable { table.verticalFormTable td { margin: 0; - padding: 3px 3px 3px 3px; + padding: 3px; border-width: 1px 1px 0 0; border-style: solid; border-color: #e0dfe3; @@ -492,7 +492,7 @@ table.linedFormTable { table.linedFormTable td { margin: 0; - padding: 3px 3px 3px 3px; + padding: 3px; border-width: 1px 0 0 0; border-style: solid; border-color: #e6e5e9; @@ -503,7 +503,7 @@ table.linedFormTable td { table.linedFormTable td.bottom { margin: 0; - padding: 3px 3px 3px 3px; + padding: 3px; border-width: 1px 0 0 0; border-style: solid; border-color: #e6e5e9; @@ -580,7 +580,7 @@ table.noBorder td { border:0; } table.smallPadding td{ padding:1px; } table.noMargin { border:0px;margin:0px; padding:0px;text-align:center; } -table.noMargin tr { border:0px;margin:0px; padding:0px; vertical-align:center; } +table.noMargin tr { border:0px;margin:0px; padding:0px; vertical-align:middle; } table.noMargin td { border:0px;margin:0px; padding:0px; } @@ -590,21 +590,21 @@ table.noMargin td { border:0px;margin:0px; padding:0px; } div.thickboxDiv{display:none;} table.thickboxTable{ - padding:6px; - text-decoration: none; - color: #2c3c42; - font-family: "arial"; - font-size: 8pt; - font-weight: heavy; + padding:6px; + text-decoration: none; + color: #2c3c42; + font-family: "arial"; + font-size: 8pt; + font-weight: heavy; } table.thickboxTable td{ padding:1px; } -.infoText{font-size:small;font-weight:normal; color:gray} -.span_CancellationNumber{font-size:small;font-weight:normal; color:gray} -.span_CurrentQueue{font-size:small;font-weight:normal; color:gray} +.infoText{font-size:small;font-weight:normal; color:gray;} +.span_CancellationNumber{font-size:small;font-weight:normal; color:gray;} +.span_CurrentQueue{font-size:small;font-weight:normal; color:gray;} table.noBorderTable {padding:0px; width:100%; border-style:none;} table.noBorderTable td {padding:0px; border-style:none; vertical-align:middle;} @@ -639,7 +639,7 @@ input.dp-applied { } .adminAddInput{margin-top:5px;} -.licenseAddInput{margin-top:5px;margin-bottom;5px;} +.licenseAddInput{margin-top:5px;margin-bottom:5px;} @@ -2628,11 +2628,3 @@ table.titleTable { #main-table { margin: 0 30px; } - -/*--- Allow Browser to Scroll When Modal Appears ---*/ - -#TB_window { - position: absolute !important; - margin-top: 100px !important; - top: 0 !important; -} \ No newline at end of file diff --git a/directory.php b/directory.php index c69f610..2817c5f 100755 --- a/directory.php +++ b/directory.php @@ -147,7 +147,7 @@ function debug($value) { if(isset($_COOKIE["lang"])){ $http_lang = $_COOKIE["lang"]; }else{ - $codeL = str_replace("-","_",substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,5)); + $codeL = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,5); $http_lang = $lang_name->getLanguage($codeL); if($http_lang == "") $http_lang = "en_US"; diff --git a/import.php b/import.php index 428e83b..30e10c1 100755 --- a/import.php +++ b/import.php @@ -1,6 +1,6 @@   Processing...'); + $('#span_User_response').html("  " + _("Processing...")); $.ajax({ type: "GET", url: "ajax_processing.php", @@ -196,8 +196,8 @@ function validateLogEmail(){ //validates fields for outlier form function validateForm (){ myReturn=0; - if (!validateNumber('overageCount',_('Count over must be a number.'))) myReturn="1"; - if (!validateNumber('overagePercent',_('% over must be a number.'))) myReturn="1"; + if (!validateNumber('overageCount', _("Count over must be a number."))) myReturn="1"; + if (!validateNumber('overagePercent', _("% over must be a number."))) myReturn="1"; if (myReturn == "1"){ return false; diff --git a/js/common.js b/js/common.js index 9c9a5b3..9af3410 100755 --- a/js/common.js +++ b/js/common.js @@ -1,3 +1,20 @@ +/* +************************************************************************************************************************** +** CORAL Usage Statistics Module v. 1.0 +** +** Copyright (c) 2010 University of Notre Dame +** +** This file is part of CORAL. +** +** CORAL 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, either version 3 of the License, or (at your option) any later version. +** +** CORAL 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 CORAL. If not, see . +** +************************************************************************************************************************** +*/ + //image preloader (function($) { @@ -15,10 +32,6 @@ } })(jQuery) - - - - $(function() { @@ -33,37 +46,9 @@ $(function() $('.coraldropdown:eq(0)', this).slideUp(100); }); }); - - //for swapping menu images - $('.rollover').hover(function() { - var currentImg = $(this).attr('src'); - $(this).attr('src', $(this).attr('hover')); - $(this).attr('hover', currentImg); - - if ($(this).attr('id') == 'menu-last'){ - var endImg = $("#menu-end").attr('src'); - $('#menu-end').attr('src', $("#menu-end").attr('hover')); - $('#menu-end').attr('hover', endImg); - } - }, function() { - var currentImg = $(this).attr('src'); - $(this).attr('src', $(this).attr('hover')); - $(this).attr('hover', currentImg); - - if ($(this).attr('id') == 'menu-last'){ - var endImg = $("#menu-end").attr('src'); - $('#menu-end').attr('src', $("#menu-end").attr('hover')); - $('#menu-end').attr('hover', endImg); - } - - }); - }); - - - var displayInds = []; // 1 visible, 0 hidden @@ -84,8 +69,6 @@ function toggleDivState(divID, intDisplay) } } - - // 1 visible, 0 hidden function toggleDivs(platformID) { @@ -95,8 +78,10 @@ function toggleDivs(platformID) divID = 'div_' + platformID; - - if (typeof displayInds[divID] == "undefined") displayInds[divID] = 1; + if (typeof displayInds[divID] == "undefined") + { + displayInds[divID] = 1; + } toggleDivState(divID, displayInds[divID]); @@ -108,20 +93,16 @@ function toggleDivs(platformID) { displayInds[divID] = 0; } - - } function replaceSpecial(myString) { - var re = new RegExp(/.?&/); myString = myString.replace(/\//gi, "\\/"); return myString.replace(/\./gi, "\\."); - } @@ -213,10 +194,6 @@ function validateDate(field, alerttxt) return true; } - - - - function postwith(to, p) { var myForm = document.createElement("form"); @@ -261,8 +238,6 @@ if (!Array.prototype.indexOf) }; } - - function isEmpty(value) { var error = ""; @@ -280,7 +255,6 @@ function isEmpty(value) function isISSN(value) { - value = value.replace('-', ''); if (value.length == 8) @@ -296,8 +270,6 @@ function isISSN(value) } - - function isYear(value) { diff --git a/js/forms/identifierSubmitForm.js b/js/forms/identifierSubmitForm.js index c693d7d..62c6088 100755 --- a/js/forms/identifierSubmitForm.js +++ b/js/forms/identifierSubmitForm.js @@ -68,7 +68,7 @@ function submitIdentifier(){ function validateForm (){ myReturn=0; if (!isIdentifier($("#identifier").val())){ - $('#span_error_Identifier').html('
    Identifier must be valid format.'); + $('#span_error_Identifier').html("
    " + _("Identifier must be valid format.")); myReturn=1; } diff --git a/js/forms/organizationForm.js b/js/forms/organizationForm.js index 61e8c4a..4683c96 100755 --- a/js/forms/organizationForm.js +++ b/js/forms/organizationForm.js @@ -94,7 +94,7 @@ $(function(){ success: function(exists) { if ((exists == 0) && ($("#organizationName").val() != '')){ $("#organizationID").val(""); - $("#span_error_organizationNameResult").html("
    This organization doesn't exist in the CORAL Organizations Module."); + $("#span_error_organizationNameResult").html("
    " + _("This organization doesn't exist in the CORAL Organizations Module.")); $('#submitOrganization').attr("disabled", "disabled"); }else{ diff --git a/js/forms/outlierSubmitForm.js b/js/forms/outlierSubmitForm.js index db05d21..685100c 100755 --- a/js/forms/outlierSubmitForm.js +++ b/js/forms/outlierSubmitForm.js @@ -91,7 +91,7 @@ function ignoreOutlier(monthlyUsageSummaryIDValue){ //validates fields function validateForm (monthlyUsageSummaryIDValue){ myReturn=0; - if (!validateRequired('overrideUsageCount_' + monthlyUsageSummaryIDValue, '
    ' + _('Count is required. If you wish to remove the count the outlier should be ignored.'))) myReturn="1"; + if (!validateRequired('overrideUsageCount_' + monthlyUsageSummaryIDValue, "
    " + _("Count is required. If you wish to remove the count the outlier should be ignored."))) myReturn="1"; if (myReturn == "1"){ return false; }else{ diff --git a/js/forms/platformSubmitForm.js b/js/forms/platformSubmitForm.js index 7c73f3a..9ff405a 100755 --- a/js/forms/platformSubmitForm.js +++ b/js/forms/platformSubmitForm.js @@ -68,7 +68,7 @@ function submitPlatform(){ function validateForm (){ myReturn=0; if ($("#platformName").val() == ""){ - $('#span_error_Platform').html('
    ' + _('Platform must be entered.')); + $('#span_error_Platform').html("
    " + _("Platform must be entered.")); myReturn=1; } diff --git a/js/import.js b/js/import.js index b75dd3a..3606648 100755 --- a/js/import.js +++ b/js/import.js @@ -35,7 +35,7 @@ var pageStart = '1'; function updateImportTable(){ - $('#span_feedback').html('  Loading...'); + $('#span_feedback').html("  " + _("Loading...")); $.ajax({ type: "GET", url: "ajax_htmldata.php", @@ -62,7 +62,7 @@ function setPageStart(pageStartNumber){ function validateForm(){ if ($("#usageFile").val() == '') { - $('#span_error').html(' ' + _('Please select a file.')); + $('#span_error').html(' ' + _("Please select a file.")); return false; }else{ $('#span_error').html(''); diff --git a/js/index.js b/js/index.js index aee68d0..77236a0 100755 --- a/js/index.js +++ b/js/index.js @@ -18,7 +18,6 @@ $(document).ready(function() { - updateSearch(); //perform search if enter is hit @@ -29,8 +28,6 @@ $(document).ready(function() updateSearch(); } }); - - }); @@ -41,9 +38,7 @@ var startWith = ''; function updateSearch() { - $("#div_feedback").html(" Processing..."); - - + $("#div_feedback").html(" " + _("Processing...") + ""); $.ajax( { type: "GET", @@ -55,27 +50,21 @@ function updateSearch() $("#div_feedback").html(" "); $('#div_searchResults').html(html); } - - }); - } - function setOrder(column, direction) { orderBy = column + " " + direction; updateSearch(); } - function setPageStart(pageStartNumber) { pageStart = pageStartNumber; updateSearch(); } - function setNumberOfRecords(numberOfRecordsNumber) { pageStart = '1'; @@ -83,9 +72,6 @@ function setNumberOfRecords(numberOfRecordsNumber) updateSearch(); } - - - function setStartWith(startWithLetter) { //first, set the previous selected letter (if any) to the regular class diff --git a/js/publisherPlatform.js b/js/publisherPlatform.js index 723a3de..5bc705e 100755 --- a/js/publisherPlatform.js +++ b/js/publisherPlatform.js @@ -78,7 +78,7 @@ function updateImportDetails(){ - $('.div_mainContent').html('  Processing...'); + $('.div_mainContent').html("  " + _("Processing...")); $.ajax({ type: "GET", @@ -96,7 +96,7 @@ function updateLoginDetails(){ - $('.div_mainContent').html('  Processing...'); + $('.div_mainContent').html("  " + _("Processing...")); $.ajax({ type: "GET", @@ -114,7 +114,7 @@ function updateFullStatsDetails(){ - $('.div_mainContent').html('  Processing...'); + $('.div_mainContent').html("  " + _("Processing...")); $.ajax({ type: "GET", @@ -133,10 +133,10 @@ function updateTitleDetails(titleID){ - $('.div_mainContent').html('  Processing...'); + $('.div_mainContent').html("  " + _("Processing...")); if (titleID != ''){ - $('#span_' + titleID + '_feedback').html('  Loading...'); + $('#span_' + titleID + '_feedback').html("  " + _("Loading...")); } $.ajax({ type: "GET", @@ -152,7 +152,7 @@ } function updateSushiDetails(){ - $('.div_mainContent').html('  Processing...'); + $('.div_mainContent').html("  " + _("Processing...")); $.ajax({ type: "GET", @@ -223,8 +223,8 @@ function deleteMonth(resourceType, month, year, archiveInd, publisherPlatformID, platformID){ - if (confirm("Do you really want to delete this month?") == true) { - $('.div_mainContent').html('  Processing...'); + if (confirm(_("Do you really want to delete this month?")) == true) { + $('.div_mainContent').html("  " + _("Processing...")); $.ajax({ type: "GET", @@ -260,7 +260,7 @@ function testService(sushiServiceID){ - $('.div_mainContent').find('#div_test_service').html('  Running...
    '); + $('.div_mainContent').find('#div_test_service').html("  " + _("Running...") + "
    "); $.ajax({ type: "GET", diff --git a/js/publisherPlatformList.js b/js/publisherPlatformList.js index 18f3b78..3068025 100755 --- a/js/publisherPlatformList.js +++ b/js/publisherPlatformList.js @@ -32,11 +32,11 @@ function showPublisherList(platformID){ if (displayInds[divID] == 0) { $('#image_' + platformID).attr('src', "images/arrowright.gif"); - $('#link_' + platformID).text(_('show Publisher list')); + $('#link_' + platformID).text(_("show Publisher list")); displayInds[divID]=1; } else { $('#image_' + platformID).attr('src', "images/arrowdown.gif"); - $('#link_' + platformID).text(_('hide Publisher list')); + $('#link_' + platformID).text(_("hide Publisher list")); displayInds[divID]=0; } diff --git a/js/reporting.js b/js/reporting.js index c5bfb06..5041520 100755 --- a/js/reporting.js +++ b/js/reporting.js @@ -32,11 +32,11 @@ function showPublisherList(platformID){ if (displayInds[divID] == 0) { $('#image_' + platformID).attr('src', "images/arrowright.gif"); - $('#link_' + platformID).text(_('show Publisher list')); + $('#link_' + platformID).text(_("show Publisher list")); displayInds[divID]=1; } else { $('#image_' + platformID).attr('src', "images/arrowdown.gif"); - $('#link_' + platformID).text(_('hide Publisher list')); + $('#link_' + platformID).text(_("hide Publisher list")); displayInds[divID]=0; } diff --git a/js/sushi.js b/js/sushi.js index bcdf072..2744eab 100755 --- a/js/sushi.js +++ b/js/sushi.js @@ -75,9 +75,9 @@ $(document).ready(function(){ function deleteImportLog(importLogID){ - if (confirm("Do you really want to delete this import?") == true) { + if (confirm(_("Do you really want to delete this import?")) == true) { - $('#span_outstanding_feedback').html('  Processing...'); + $('#span_outstanding_feedback').html("  "+_("Processing...")); $.ajax({ type: "GET", url: "ajax_processing.php", @@ -101,7 +101,7 @@ $(document).ready(function(){ function runService(sushiServiceID, el){ //$("html, body").scrollTop($('#div_run_feedback').offset().top); - $(el).parent().html('  Running...
    '); + $(el).parent().html("  "+_("Running...")+"
    "); $.ajax({ type: "GET", diff --git a/not_avail.php b/not_avail.php index e3484ee..c2b1733 100755 --- a/not_avail.php +++ b/not_avail.php @@ -26,7 +26,7 @@ -<?php echo _("Usage Statistics Module - ") . $pageTitle;?> +<?php echo _("Usage Statistics Module") . " - " . $pageTitle;?> diff --git a/publisherPlatformList.php b/publisherPlatformList.php index ff14866..72e95de 100755 --- a/publisherPlatformList.php +++ b/publisherPlatformList.php @@ -39,7 +39,7 @@ $publisherPlatform = new PublisherPlatform(); foreach($platformObj->getPublisherPlatforms() as $publisherPlatform) { $publisher = new Publisher(new NamedArguments(array('primaryKey' => $publisherPlatform->publisherID))); - echo $publisher->name . "  view / edit
    "; + echo $publisher->name . "  " . _("view / edit") . "
    "; } echo "
    "; diff --git a/reporting.php b/reporting.php index 1fa41b1..f8cd8fa 100755 --- a/reporting.php +++ b/reporting.php @@ -9,7 +9,7 @@
    -
    + " . _("Mark the checkboxes to add / remove specific Platforms or Publishers to the default report list.") . "
    " . _("Click 'edit report display name' to change the display name in the reporting system for specific Platforms or Publishers.");?>

    platformID . "' onclick='javascript:updatePlatformDropDown(" . $platform->platformID . ");' $reportDropDownInd>"; echo "    " . $platform->name . ""; if ($platform->reportDisplayName) echo "  (" . $platform->reportDisplayName . ")"; - echo "  edit report display name
    "; + echo "  " . _("edit report display name") . "
    "; echo ""; echo ""; - echo "         platformID . "');\">show publisher list platformID . "');\" name='link_" . $platform->platformID . "' id='link_" . $platform->platformID . "'>show publisher list
    "; + echo "         platformID . "');\">show publisher list platformID . "');\" name='link_" . $platform->platformID . "' id='link_" . $platform->platformID . "'>" . _("show publisher list") . "
    "; echo "\n
    " . $publisher->name; if ($publisherPlatform->reportDisplayName) echo "  (" . $publisherPlatform->reportDisplayName . ")"; - echo "  edit report display name
    "; + echo "  " . _("edit report display name") . ""; echo "
    "; echo ""; } diff --git a/sushi.php b/sushi.php index 861382d..fb0bb3a 100755 --- a/sushi.php +++ b/sushi.php @@ -72,7 +72,6 @@



    -
       
    diff --git a/templates/header.php b/templates/header.php index b52f6dc..42b2b3a 100755 --- a/templates/header.php +++ b/templates/header.php @@ -37,7 +37,7 @@ -Usage Statistics - <?php echo $pageTitle; ?> +<?php echo _("Usage Statistics") . ' - ' . $pageTitle;?> @@ -69,7 +69,7 @@ - +
    diff --git a/uploadComplete.php b/uploadComplete.php index 693c9c5..fc58b40 100755 --- a/uploadComplete.php +++ b/uploadComplete.php @@ -35,7 +35,29 @@ $overrideInd = $_POST['overrideInd']; $layoutID = $_POST['layoutID']; $importLogID = $_POST['importLogID']; -$year = $_POST['checkYear']; +$startDate = $_POST['startDate']; +$numMonths = $_POST['numMonths']; +$startYearArr = explode("-", $startDate); +$startYear = $startYearArr[1]; +$startMonthArr = explode("-", $startDate); +$startMonth = date("n",strtotime($startMonthArr[0])); +$holdStartMonth = $startMonth; +$endMonth = date("n",mktime(0,0,0,$startMonth+$numMonths-1)); +if($startMonth <= $endMonth) { + $endYear = $startYear; + $multYear = false;//lets us know that we don't need to account for multiple years +} +else { + $endYear = $startYear + 1; + $multYear = true;//lets us know that we need to account for multiple years + $holdEndMonth = $endMonth; + $endMonth = 12; +} + +if ($_POST['checkYear'] == NULL) + $year = $startYear; +else + $year = $_POST['checkYear']; $pISSNArray = array(); $platformArray = array(); @@ -56,6 +78,7 @@ //if this came from sushi if ($importLogID > 0){ $file_handle = $util->utf8_fopen_read($uploadedFile, true); + $headerline = stream_get_line($file_handle, 10000000, "\n");//This is just disregarded }else{ $file_handle = $util->utf8_fopen_read($uploadedFile, false); } @@ -64,7 +87,7 @@ $logSummary = "\n" . $orgFileName; $topLogOutput = ""; -$logOutput = _("Process started on ") . date('l jS \of F Y h:i A') . "
    "; +$logOutput = _("Process started on ") . date('l \t\h\e jS \o\f F Y \a\t h:i A') . "
    "; $logOutput.= _("File: ") . $uploadedFile . "

    "; $logOutput.= _("Report Format: ") . $reportTypeDisplay . "

    "; $monthlyInsert=''; @@ -106,7 +129,7 @@ $formatCorrectFlag = "Y"; $startFlag = "Y"; $logSummary .= " $reportTypeDisplay"; - $logSummary .= "\n$year for "; + $logSummary .= "\nfor "; $overrideInd="1"; } @@ -117,68 +140,61 @@ $holdPublisher = ''; $holdPublisherPlatformID = ''; $holdYear = ''; -$startMonth = ''; +if ($importLogID < 1) { + $startMonth = ''; +} //loop through each line of file while (!feof($file_handle)) { - //get each line out of the file handler - $line = stream_get_line($file_handle, 10000000, "\n"); - - //set delimiter - if (($del) == NULL or (empty($del))) { - if(count(explode("\t",$line)) > 5){ - $del = "\t"; - }else if (count(explode(",",$line)) > 5){ - $del = ","; - } - - } - - //check column formats to get the year and months - if (($formatCorrectFlag == "N") && (count(explode("\t",$line)) >= count($columnsToCheck))){ - //positive unless proven negative - $formatCorrectFlag = "Y"; - $lineArray = explode("\t",$line); - - foreach ($columnsToCheck as $key => $colCheckName){ - $fileColName = strtolower(trim($lineArray[$key])); - - if (strpos($fileColName, strtolower($colCheckName)) === false){ - $formatCorrectFlag='N'; - } + //get each line out of the file handler + $line = stream_get_line($file_handle, 10000000, "\n"); + //set delimiter + if (($del) == NULL or (empty($del))) { + if(count(explode("\t",$line)) > 5){ + $del = "\t"; + }else if (count(explode(",",$line)) > 5){ + $del = ","; + } - } + } + //check column formats to get the year and months + if (($formatCorrectFlag == "N") && (count(explode("\t",$line)) >= count($columnsToCheck))){ + //positive unless proven negative + $formatCorrectFlag = "Y"; + $lineArray = explode("\t",$line); - if ($formatCorrectFlag == 'Y'){ + foreach ($columnsToCheck as $key => $colCheckName){ + $fileColName = strtolower(trim($lineArray[$key])); + if (strpos($fileColName, strtolower($colCheckName)) === false){ + $formatCorrectFlag='N'; + } + } + if ($formatCorrectFlag == 'Y'){ //at this point, $fileColName has the last column check value, Jan //determine the year - list ($checkMonth,$year) = preg_split("/[-\/.]/",$fileColName); - if ($year < 100) $year = 2000 + $year; + list ($checkMonth,$year) = preg_split("/[-\/.]/",$fileColName); + if ($year < 100) $year = 2000 + $year; $missingMonths = array(); // determine the latest month // since months may not all exist $jan_i = array_search('jan',$layoutColumns); - for($i=$jan_i;$i<12+$jan_i;$i++){ $month = $i - $jan_i + 1; $monthName = date("M", mktime(0,0,0,$month,10)); if (strpos(strtolower($lineArray[$i]), strtolower($monthName)) === false){ unset($layoutColumns[$i]); } - - } - + } $layoutColumns = array_values($layoutColumns); $logSummary .= " $reportTypeDisplay"; $logSummary .= "\n$year for "; - - } - } + } + } //as long as the flags are set to print out then we can continue if (($startFlag == "Y") && ($formatCorrectFlag == "Y") && !(strpos($line,"\t") == "0") && (substr($line,0,5) != "Total") && (count(explode("\t",$line)) > 5)) { @@ -233,7 +249,6 @@ $ytdHTML = $columnValues['ytdHTML']; $ytdPDF = $columnValues['ytdPDF']; - // loop through each month to assign month array $month=array(); for($i=1;$i<=12;$i++){ @@ -241,8 +256,7 @@ if(isset($columnValues[strtolower($monthName)])){ $month[$i] = $columnValues[strtolower($monthName)]; } - } - + } ################################################################ // PLATFORM @@ -284,7 +298,7 @@ $logOutput .= _("No records exist for this Platform / year. Import will start with month 1."); }else{ $endMonth=$min_month-1; - $logOutput .= _("Partial year records exist for this Platform / year. Import will start with month 1 and end with month $endMonth."); + $logOutput .= _("Partial year records exist for this Platform / year. Import will start with month 1 and end with month ") . $endMonth . "."; } } @@ -304,6 +318,9 @@ //For log output we only want to print the year once if ($year != $holdYear) { $logOutput .= "
    " . _("Year: ") . $year; + if ($startYear != $endYear) { + $logOutput .= " - " . $endYear; + } } //If Platform does not already exist, insert it and get the new ID @@ -356,7 +373,7 @@ if ($publisherName == ""){ $publisherName = $holdPublisher; } - + if (($publisherID) == NULL || ($publisherName != $holdPublisher)){ //get the publisher object $publisherTestObj = new Publisher(); @@ -664,7 +681,6 @@ $logOutput .="

    " . _("Title: ") . $resourceTitle; } - //now we can insert the actual stats for ($i=$startMonth; $i<=$endMonth; $i++){ $usageCount = ''; @@ -691,108 +707,116 @@ //add the other titles count in with this titles counts to merge the two together ($i = month) $usageCount+=$titleObj->getUsageCountByMonth($archiveInd, $year, $i, $publisherPlatformID); - //now delete the old one ($i = month) - $titleObj->deleteMonth($archiveInd, $year, $i, $publisherPlatformID); - + //now delete the old one ($i = month) + $titleObj->deleteMonth($archiveInd, $year, $i, $publisherPlatformID); + $logOutput .= _("Merged"); - //flag when inserted into db that this is a merged statistic - $mergeInd = 1; - - $logOutput .= _("Duplicate record for this Print ISSN in same spreadsheet: Month: ") . $i . _(" New Count: ") . $usageCount; - } + //flag when inserted into db that this is a merged statistic + $mergeInd = 1; - #calculate Outlier - dont bother if this is a new Title - if (($newTitle == 0) && (count($outlier) > 0)){ - #figure out which months to pull - start with this month previous year - $prevYear = $year-1; - $prevMonths=''; - $currMonths=''; - $yearAddWhere=''; - $outlierID = '0'; - $outlierLevel = ''; + $logOutput .= _("Duplicate record for this Print ISSN in same spreadsheet: Month: ") . $i . _(" New Count: ") . $usageCount; + } - if ($i == 1){ - $yearAddWhere = "(year = " . $prevYear . ")"; - }else{ - for ($j=$i; $j<=11; $j++){ - $prevMonths .= $j . ", "; - } - $prevMonths .= "12"; + #calculate Outlier - dont bother if this is a new Title + if (($newTitle == 0) && (count($outlier) > 0)){ + #figure out which months to pull - start with this month previous year + $prevYear = $year-1; + $prevMonths=''; + $currMonths=''; + $yearAddWhere=''; + $outlierID = '0'; + $outlierLevel = ''; + + if ($i == 1){ + $yearAddWhere = "(year = " . $prevYear . ")"; + }else{ + for ($j=$i; $j<=11; $j++){ + $prevMonths .= $j . ", "; + } + $prevMonths .= "12"; - for ($j=1; $j<$i-1; $j++){ - $currMonths .= $j . ", "; - } - $currMonths .= $j; - $yearAddWhere .= "((year = $prevYear and month in ($prevMonths)) or (year = $year and month in ($currMonths)))"; + for ($j=1; $j<$i-1; $j++){ + $currMonths .= $j . ", "; } + $currMonths .= $j; + $yearAddWhere .= "((year = $prevYear and month in ($prevMonths)) or (year = $year and month in ($currMonths)))"; + } - //get the previous 12 months data in an array - $usageCountArray = array(); - $usageCountArray = $titleObj->get12MonthUsageCount($archiveInd, $publisherPlatformID, $yearAddWhere); + //get the previous 12 months data in an array + $usageCountArray = array(); + $usageCountArray = $titleObj->get12MonthUsageCount($archiveInd, $publisherPlatformID, $yearAddWhere); - $avgCount = 0; - if (count($usageCountArray) == "12"){ + $avgCount = 0; + if (count($usageCountArray) == "12"){ - foreach ($usageCountArray as $usageCountRec) { - $avgCount += $usageCountRec['usageCount']; - } + foreach ($usageCountArray as $usageCountRec) { + $avgCount += $usageCountRec['usageCount']; + } - $avgCount = $avgCount / 12; + $avgCount = $avgCount / 12; - foreach ($outlier as $k => $outlierArray) { - if ($usageCount > ((($avgCount * ($outlierArray['overagePercent']/100)) + $outlierArray['overageCount'])) ) { - //we can overwrite previous Outlier level so that we just take the highest Outlier level - $outlierID = $k; - $outlierLevel = $outlierArray['outlierLevel']; - } + foreach ($outlier as $k => $outlierArray) { + if ($usageCount > ((($avgCount * ($outlierArray['overagePercent']/100)) + $outlierArray['overageCount'])) ) { + //we can overwrite previous Outlier level so that we just take the highest Outlier level + $outlierID = $k; + $outlierLevel = $outlierArray['outlierLevel']; } - - }else{ - $outlierID = '0'; } }else{ $outlierID = '0'; } - //if override and this is not a merged title delete original data so we don't have duplicates in system ($i = month) - if ((!isset($pISSNArray[$pISSN])) && ($overrideInd == 1)){ - $titleObj->deleteMonth($archiveInd, $year, $i, $publisherPlatformID); - } + }else{ + $outlierID = '0'; + } - $monthlyUsageSummary = new MonthlyUsageSummary(); - $monthlyUsageSummary->titleID = $titleID; - $monthlyUsageSummary->publisherPlatformID = $publisherPlatformID; - $monthlyUsageSummary->year = $year; - $monthlyUsageSummary->month = $i; - $monthlyUsageSummary->archiveInd = $archiveInd; - $monthlyUsageSummary->usageCount = $usageCount; - $monthlyUsageSummary->outlierID = $outlierID; - $monthlyUsageSummary->mergeInd = $mergeInd; - $monthlyUsageSummary->ignoreOutlierInd = '0'; - $monthlyUsageSummary->overrideUsageCount = null; - $monthlyUsageSummary->sectionType = $sectionType; - $monthlyUsageSummary->activityType = $activityType; - - try { - $monthlyUsageSummary->save(); - } catch (Exception $e) { - echo $e->getMessage(); + //if override and this is not a merged title delete original data so we don't have duplicates in system ($i = month) + if ((!$mergeInd) && ($overrideInd == 1)){ + if ($multYear && $i >= $startMonth) { + $titleObj->deleteMonth($archiveInd, $startYear, $i, $publisherPlatformID); + } + else if ($multYear && $i < $startMonth && $i <= $endMonth) { + $titleObj->deleteMonth($archiveInd, $endYear, $i, $publisherPlatformID); } + else { + $titleObj->deleteMonth($archiveInd, $startYear, $i, $publisherPlatformID); + } + } + $monthlyUsageSummary = new MonthlyUsageSummary(); + $monthlyUsageSummary->titleID = $titleID; + $monthlyUsageSummary->publisherPlatformID = $publisherPlatformID; + $monthlyUsageSummary->year = $year; + $monthlyUsageSummary->month = $i; + $monthlyUsageSummary->archiveInd = $archiveInd; + $monthlyUsageSummary->usageCount = $usageCount; + $monthlyUsageSummary->outlierID = $outlierID; + $monthlyUsageSummary->mergeInd = $mergeInd; + $monthlyUsageSummary->ignoreOutlierInd = '0'; + $monthlyUsageSummary->overrideUsageCount = null; + $monthlyUsageSummary->sectionType = $sectionType; + $monthlyUsageSummary->activityType = $activityType; + + try { + $monthlyUsageSummary->save(); + } catch (Exception $e) { + echo $e->getMessage(); + } - if (is_numeric($usageCount)){ - $logOutput .= _("New Usage Count Record Added: Month: ") . $i . _(" Count: ") . $usageCount; - }else{ - $logOutput .= _("Usage Count Record is not numeric for month: ") . $i . _(" Count: ") . $usageCount . " imported as 0."; - } + if (is_numeric($usageCount)){ + $logOutput .= _("New Usage Count Record Added: Month: ") . $i . " - " . $year . _(" Count: ") . $usageCount; + }else{ + $logOutput .= _("Usage Count Record is not numeric for month: ") . $i . _(" Count: ") . $usageCount . _(" imported as 0."); + } - $monthlyInsert=1; - if ($outlierID){ - $logOutput .= "
    " . _("Outlier found for this record: Level ") . $outlierLevel . ""; - } + $monthlyInsert=1; + + if ($outlierID){ + $logOutput .= "
    "._("Outlier found for this record: Level ") . $outlierLevel . ""; + } //}else{ @@ -803,10 +827,21 @@ $logOutput .= _("Current or future month will not be imported: ") . $i . "-" . $year . ": " . $usageCount; } - //end usage count is entered + //end usage count is entered + } + if ($i == 12 && $multYear) { + $year = $endYear; + $startMonth = 1; + $endMonth = $holdEndMonth; + $i = 0; } - //end month for loop + //end month for loop + } + if ($multYear) { + $year = $startYear; + $startMonth = $holdStartMonth; + $endMonth = 12; } @@ -839,7 +874,7 @@ $ytdHTML += $yearCountArray['ytdHTMLCount']; $ytdPDF += $yearCountArray['ytdPDFCount']; - $logOutput .= "
    " . _("YTD Already Exists for this Print ISSN, counts are added together."); + $logOutput .= "
    "._("YTD Already Exists for this Print ISSN, counts are added together."); } //delete these yearly stats since we will next overwrite them @@ -863,17 +898,17 @@ try { $yearlyUsageSummary->save(); - $logOutput .= "
    " . _("YTD Total Count: ") . $ytd . "
    " . _("YTD HTML Count: ") . $ytdHTML . "
    " . _("YTD PDF Count: ") . $ytdPDF; + $logOutput .= "
    "._("YTD Total Count: ") . $ytd . "
    "._("YTD HTML Count: ") . $ytdHTML . "
    "._("YTD PDF Count: ") . $ytdPDF; } catch (Exception $e) { echo $e->getMessage(); } }else{ - $logOutput .= "
    " . _("No YTD import performed since monthly stats were not imported"); + $logOutput .= "
    "._("No YTD import performed since monthly stats were not imported"); } - //end ytd if statement + //end ytd if statement } # add to array so we can determine if print ISSN already exists in this spreadsheet to add counts together @@ -884,14 +919,14 @@ } - //end start flag if + //end start flag if } - #check "Total for all" is in first column - set flag to start import after this - if ((substr($line,0,5) == "Total") || ($formatCorrectFlag == "Y")){ - $startFlag = "Y"; - } + #check "Total for all" is in first column - set flag to start import after this + if ((substr($line,0,5) == "Total") || ($formatCorrectFlag == "Y")){ + $startFlag = "Y"; + } //reset all ID variables that were just set $titleID=''; @@ -942,9 +977,12 @@ $mailOutput = _("Email to ") . implode(", ", $emailAddresses) . _(" Failed!"); } } - -$logSummary .= date("M", mktime(0,0,0,$startMonth,10)) . "-" . date("M", mktime(0,0,0,$endMonth,10)); - +if ($multYear) { + $logSummary .= date("F Y", mktime(0,0,0,$startMonth,10,$startYear)) . " - " . date("F Y", mktime(0,0,0,$holdEndMonth,10,$endYear)); +} +else { + $logSummary .= date("F Y", mktime(0,0,0,$startMonth,10,$startYear)) . " - " . date("F Y", mktime(0,0,0,$endMonth,10,$startYear)); +} include 'templates/header.php'; //Log import in database @@ -996,20 +1034,20 @@ - -
    -
    Status
    +

    -

    File archived as .

    -

    Log file available at: .

    -

    Process completed.

    +

    .

    +

    .

    +


    - " . nl2br($logSummary); ?>
    + " . nl2br($logSummary); ?>


     

    -
    + + + diff --git a/uploadConfirmation.php b/uploadConfirmation.php index 6385074..28575bc 100755 --- a/uploadConfirmation.php +++ b/uploadConfirmation.php @@ -25,7 +25,7 @@ //this file has been created from SUSHI if ($_GET['importLogID'] > 0){ $importLog = new ImportLog(new NamedArguments(array('primaryKey' => $_GET['importLogID']))); - + $layout = new Layout(); $layout->getByLayoutCode($importLog->layoutCode); $layoutID = $layout->layoutID; @@ -33,7 +33,7 @@ $pageTitle = _('SUSHI Import Confirmation'); $target_path = $importLog->fileName; - $checkYear = date("Y"); + //$checkYear = date("Y"); //checkYear is not used for SUSHI imports anymore $formatCorrectFlag = "Y"; $errorFlag = "N"; $startFlag = "Y"; @@ -42,6 +42,51 @@ #read this file $file_handle = $util->utf8_fopen_read($target_path, true); + //takes the first line of the SUSHI import file and finds the year(s) associated + $firstLine = stream_get_line($file_handle, 10000000, "\n"); + $firstArray = explode("\t",$firstLine); + $numCol = count($firstArray); + //gets the start and ending years from the first line of the SUSHI import + $startYearArr = explode("-",$firstArray[($numCol-1)]); + $startYear = $startYearArr[1];//the month of december is always the starting year + $endYearArrHelp = explode("-",$firstLine); + $endYearArr = explode("\t",$endYearArrHelp[1]); + $endYear = $endYearArr[0];//find january's year, which is always the end year + for ($i = 0; $i < 12; $i++) { + $monthArray[$i] = $firstArray[($numCol-12+$i)]; + } + $startMonth = NULL; + //find the startMonth if only one year is present + if ($startYear == $endYear) { + $cMonth = explode("-",$monthArray[0]); + for ($i = 0; $cMonth[2] == 'x'; $i++) { + $cMonth = explode("-",$monthArray[$i]); + if ($cMonth[2] != 'x') { + $startMonth = $cMonth[0]; + } + } + $startMonth = $cMonth[0];//this will set the startMonth to January if the program never enters the for loop + } + //find the startMonth if multiple years are represented in the file + else { + $cMonth = explode("-",$monthArray[0]); + for ($i = 0; $cMonth[1] != $startYear; $i++) { + $cMonth = explode("-",$monthArray[$i]); + if($cMonth[1] == $startYear) { + $startMonth = $cMonth[0]; + } + } + } + $startDate = array($startMonth, $startYear); + $startDate = implode("-", $startDate); + $numMonths = 12; + for ($i = 11; $i >= 0; $i--) { + $cMonth = explode("-",$monthArray[$i]); + if ($cMonth[2] == 'x') + $numMonths--; + } +//came from file import + //came from file import }else{ @@ -66,22 +111,22 @@ header( 'Location: import.php?error=1' ) ; }else{ - if(move_uploaded_file($_FILES['usageFile']['tmp_name'], $target_path)) { - $uploadConfirm = _("The file ") . basename( $_FILES['usageFile']['name']) . _(" has been uploaded successfully.") . "
    " . _("Please confirm the following data:") . "
    "; - } else{ - header( 'Location: import.php?error=2' ) ; - } + if(move_uploaded_file($_FILES['usageFile']['tmp_name'], $target_path)) { + $uploadConfirm = _("The file "). basename( $_FILES['usageFile']['name'])._(" has been uploaded successfully.")."
    "._("Please confirm the following data:")."
    "; + } else{ + header( 'Location: import.php?error=2' ) ; + } } - #file upload was OK, now we can read the file to output for confirmation - $formatCorrectFlag = "N"; - $foundColumns = ""; - $errorFlag = "N"; - $startFlag = "N"; - $unmatched = ""; - $del = ""; //delimiter - $layoutID = $_POST['layoutID']; + #file upload was OK, now we can read the file to output for confirmation + $formatCorrectFlag = "N"; + $foundColumns = ""; + $errorFlag = "N"; + $startFlag = "N"; + $unmatched = ""; + $del = ""; //delimiter + $layoutID = $_POST['layoutID']; #read this file $file_handle = $util->utf8_fopen_read($target_path, false); @@ -97,219 +142,220 @@ -
    -
    -
    - - -
    +
    +
    - if ($layoutID != ""){ - $reportTypeSet = 'Y'; - $layout = new Layout(new NamedArguments(array('primaryKey' => $layoutID))); - $layoutKey = $layoutsArray['ReportTypes'][$layout->layoutCode]; - $columnsToCheck = $layoutsArray[$layoutKey]['columnToCheck']; - $reportTypeDisplay = $layout->name; - $layoutColumns = $layoutsArray[$layoutKey]['columns']; - $numberOfColumns = count($layoutColumns); - } - - if ((isset($uploadConfirm)) and (!empty($uploadConfirm))) { - echo $uploadConfirm; - } - echo ""; + loginID == "sushi"){ + #read layouts ini file to get the available layouts + $layoutsArray = parse_ini_file("layouts.ini", true); - //print out report type and year - echo ""; + if ($layoutID != ""){ + $reportTypeSet = 'Y'; + $layout = new Layout(new NamedArguments(array('primaryKey' => $layoutID))); + $layoutKey = $layoutsArray['ReportTypes'][$layout->layoutCode]; + $columnsToCheck = $layoutsArray[$layoutKey]['columnToCheck']; + $reportTypeDisplay = $layout->name; + $layoutColumns = $layoutsArray[$layoutKey]['columns']; + $numberOfColumns = count($layoutColumns); + } - #also print out column headers - echo ""; - foreach ($layoutColumns as $value){ - echo ""; - } - echo ""; + if ((isset($uploadConfirm)) and (!empty($uploadConfirm))) { + echo $uploadConfirm; + } + echo "
    " . $reportTypeDisplay . _(" for ") . $checkYear . "
    " . strtoupper($value) . "
    "; + + //print out headers automaticall if this was from sushi + if ($importLog->loginID == "sushi"){ + //print out report type and year + echo ""; + #also print out column headers + echo ""; + foreach ($layoutColumns as $value){ + echo ""; + } + echo ""; + } - } + while (!feof($file_handle)) { + //get each line out of the file handler + $line = stream_get_line($file_handle, 10000000, "\n"); - while (!feof($file_handle)) { - //get each line out of the file handler - $line = stream_get_line($file_handle, 10000000, "\n"); + //if report type hasn't been figured out, check for it in the first row / column + if ($reportTypeSet == ""){ - //if report type hasn't been figured out, check for it in the first row / column - if ($reportTypeSet == ""){ + foreach ($layoutsArray['ReportTypes'] as $reportTypeKey => $layoutKey){ + list($report,$release) = explode("_",$reportTypeKey); + if ((strpos($line, $report) !== false) && (strpos($line, $release) !== false)){ + $reportTypeSet = 'Y'; + $columnsToCheck = $layoutsArray[$layoutKey]['columnToCheck']; + $reportTypeDisplay = $line; + $layout = $layoutKey; + } + } - foreach ($layoutsArray['ReportTypes'] as $reportTypeKey => $layoutKey){ - list($report,$release) = explode("_",$reportTypeKey); - if ((strpos($line, $report) !== false) && (strpos($line, $release) !== false)){ - $reportTypeSet = 'Y'; - $columnsToCheck = $layoutsArray[$layoutKey]['columnToCheck']; - $reportTypeDisplay = $line; - $layout = $layoutKey; - } - } + } - } + //set delimiter + $del = "\t"; - //set delimiter - $del = "\t"; + //check column formats if the format correct flag has not been set yet + if (($formatCorrectFlag == "N") && (count(explode($del,$line)) >= count($columnsToCheck)) && (strlen($line) > 20)){ + //positive unless proven negative + $formatCorrectFlag = "Y"; + $lineArray = explode("\t",$line); - //check column formats if the format correct flag has not been set yet - if (($formatCorrectFlag == "N") && (count(explode($del,$line)) >= count($columnsToCheck)) && (strlen($line) > 20)){ - //positive unless proven negative - $formatCorrectFlag = "Y"; - $lineArray = explode("\t",$line); + if (($columnsToCheck) && (count($lineArray) >=5)){ + foreach ($columnsToCheck as $key => $colCheckName){ + $fileColName = strtolower(trim($lineArray[$key])); - if (($columnsToCheck) && (count($lineArray) >=5)){ - foreach ($columnsToCheck as $key => $colCheckName){ - $fileColName = strtolower(trim($lineArray[$key])); + if (strpos($fileColName, strtolower($colCheckName)) === false){ + if (!$unmatched){ + $unmatched = _("Looking for ") . "\"$colCheckName\"" . _(" in column ") . $key . _("but found ") . "\"$fileColName\""; + } + $formatCorrectFlag='N'; + } - if (strpos($fileColName, strtolower($colCheckName)) === false){ - if (!$unmatched){ - $unmatched = _("Looking for ") . "\"$colCheckName\"" . _(" in column ") . $key . _("but found ") . "\"$fileColName\""; + } } - $formatCorrectFlag='N'; - } - - } - } - if ($formatCorrectFlag == 'Y'){ - $numberOfColumns = count($lineArray); - - if ($checkYear == ""){ - list ($checkMonth,$checkYear) = preg_split("/[-\/.]/",$fileColName); - if ($checkYear < 100) $checkYear = 2000 + $checkYear; - } - - //print out report type and year - echo ""; - - #also print out column headers - echo ""; - foreach ($lineArray as $value){ - echo ""; - } - echo ""; - }else{ - if (!$foundColumns){ - $foundColumns = implode(", ", $lineArray); - } - } - } + if ($formatCorrectFlag == 'Y'){ + $numberOfColumns = count($lineArray); + + if ($checkYear == ""){ + list ($checkMonth,$checkYear) = preg_split("/[-\/.]/",$fileColName); + if ($checkYear < 100) $checkYear = 2000 + $checkYear; + } + + //print out report type and year + echo ""; + + #also print out column headers + echo ""; + foreach ($lineArray as $value){ + echo ""; + } + echo ""; + }else{ + if (!$foundColumns){ + $foundColumns = implode(", ", $lineArray); + } + } + } - //as long as the flags are set to print out, and the line exists, print the line formatted in table - //(strpos($line,"\t\t\t\t") === false) + //as long as the flags are set to print out, and the line exists, print the line formatted in table + //(strpos($line,"\t\t\t\t") === false) //if (($startFlag == "Y") && ($formatCorrectFlag == "Y") && !(strpos($line,"\t") == "0") && (substr($line,0,5) != "Total") && (count(explode("\t",$line)) > 5)) { - if (($formatCorrectFlag == "Y") && (substr($line,0,5) != "Total") && ($startFlag == "Y") && (strpos($line,$del) != "0" ) && (count(explode("\t",$line)) > 5)) { - echo ""; - $lineArray = explode($del,$line); - - foreach($lineArray as $value){ + if (($formatCorrectFlag == "Y") && (substr($line,0,5) != "Total") && ($startFlag == "Y") && (strpos($line,$del) != "0" ) && (count(explode("\t",$line)) > 5)) { + echo ""; + $lineArray = explode($del,$line); - //Clean some of the data + foreach($lineArray as $value){ - //strip everything after (Subs from Title - if (strpos($value,' (Subs') !== false) $value = substr($value,0,strpos($value,' (Subs')); + //Clean some of the data - //remove " quotes - $value = str_replace("\"","",$value); + //strip everything after (Subs from Title + if (strpos($value,' (Subs') !== false) $value = substr($value,0,strpos($value,' (Subs')); - if (($value == '') || ($value == ' ')) { - echo ""; - }else{ - echo ""; - } - } - echo ""; - - } + //remove " quotes + $value = str_replace("\"","",$value); + if (($value == '') || ($value == ' ')) { + echo ""; + }else{ + echo ""; + } + } + echo ""; - #check "Total for all" is in first column - set flag to start import after this - if ((substr($line,0,5) == "Total") || ($formatCorrectFlag == "Y")){ - $startFlag = "Y"; - } + } - } - echo "
    " . $reportTypeDisplay . _(" for ") . date("F", strtotime($startMonth)) . " " . $startYear; + echo " - " . date("F", mktime(0,0,0,date("n",strtotime($startMonth))+$numMonths-1)) . " " . $endYear . "
    " . strtoupper($value) . "
    " . $reportTypeDisplay . " for " . $checkYear . "
    " . $value . "
    " . $reportTypeDisplay . _(" for ") . $checkYear . "
    " . $value . "
     " . $value . "
     " . $value . "
    "; - fclose($file_handle); + #check "Total for all" is in first column - set flag to start import after this + if ((substr($line,0,5) == "Total") || ($formatCorrectFlag == "Y")){ + $startFlag = "Y"; + } - $errrorFlag="N"; + } + echo "
    "; + fclose($file_handle); - if (($formatCorrectFlag == "N")){ - echo "
    " . _("Error with Format") . ": " . _("Report format is set to ") . "" . $reportTypeDisplay . "" . _(" but does not match the column names listed in layouts.ini for this format - ") . $unmatched . "

    " . _("Expecting columns: ") . implode(", ", $columnsToCheck) . "

    " . _("Found columns: ") . $foundColumns . "


    " . _("If problems persist you can copy an existing header that works into this file."); - $errorFlag="Y"; - } - if (!$layoutKey){ - echo "
    " . _("Error with Setup: This report format is not set up in layouts.ini.") . "
    "; - $errorFlag="Y"; - } + $errrorFlag="N"; - if (($startFlag == "N")){ - echo "
    " . _("Error with Format: The line preceding the first should start with 'Total'.") . "
    "; - $errorFlag="Y"; - } + if (($formatCorrectFlag == "N")){ + echo "
    " . _("Error with Format") . ": " . _("Report format is set to ") . "" . $reportTypeDisplay . "" . _(" but does not match the column names listed in layouts.ini for this format") . " - " . $unmatched . "

    " . _("Expecting columns: ") . implode(", ", $columnsToCheck) . "

    " . _("Found columns: ") . $foundColumns . "


    " . _("If problems persist you can copy an existing header that works into this file."); + $errorFlag="Y"; + } - if ($checkYear > date('Y')){ - echo "
    " . _("Error with Year: Year listed in header ") . "(" . $checkYear . ")" . _(" may not be ahead of current year. Please correct and submit again.") . "
    "; - $errorFlag="Y"; - } + if (!$layoutKey){ + echo "
    "._("Error with Setup: This report format is not set up in layouts.ini.")."
    "; + $errorFlag="Y"; + } - if (isset($_POST['overrideInd'])){ - echo "
    " . _("File is flagged to override verifications of previous month data. If this is incorrect use 'Cancel' to fix.") . "
    "; - $overrideInd = 1; - }else{ - $overrideInd = 0; - } + if (($startFlag == "N")){ + echo "
    "._("Error with Format: The line preceding the first should start with 'Total'.")."
    "; + $errorFlag="Y"; + } - if ($errorFlag != "Y"){ - echo "
    " . _("Report Format: ") . "" . $reportTypeDisplay . "
    " . _("If this is incorrect, please use 'Cancel' to go back and fix the headers of the file.") . "
    "; - } + if ($checkYear > date('Y')){ + echo "
    " . _("Error with Year: Year listed in header") . " (" . $checkYear . ") " . _("may not be ahead of current year. Please correct and submit again.") . "
    "; + $errorFlag="Y"; + } -?> + if (isset($_POST['overrideInd'])){ + echo "
    "._("File is flagged to override verifications of previous month data. If this is incorrect use 'Cancel' to fix.")."
    "; + $overrideInd = 1; + }else{ + $overrideInd = 0; + } -
    -
    - - - - - - - - - - - -
    - onclick="javascript:updateSubmit();" class="submit-button" /> - - -
    + if ($errorFlag != "Y"){ + echo "
    " . _("Report Format: ") . "" . $reportTypeDisplay . "
    "._("If this is incorrect, please use 'Cancel' to go back and fix the headers of the file.")."
    "; + } + if ($importLog->importLogID > 0) { + echo "
    "._("File has been imported from SUSHI. The default behavior for imported SUSHI files is to overwrite previously imported data. If this is incorrect, please contact a system administrator.")."
    "; + } + ?> + +
    + + + + + + + + + + + + + + +
    + onclick="javascript:updateSubmit();" class="submit-button" /> + + +
    +
    \ No newline at end of file From 8d6581596c4ba8cc084e2ffbe9c2083f083057a4 Mon Sep 17 00:00:00 2001 From: Bradley Droubay Date: Thu, 23 Jun 2016 11:12:50 -0600 Subject: [PATCH 52/52] Updates from merging our code with CORAL's --- css/style.css | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/css/style.css b/css/style.css index 4cad0e4..b884de6 100755 --- a/css/style.css +++ b/css/style.css @@ -2628,3 +2628,11 @@ table.titleTable { #main-table { margin: 0 30px; } + +#TB_window { + max-height: 75vh !important; + max-width: 100vw !important; + overflow-y: auto !important; + top: 5vh !important; + margin-top: 0px !important; +}