From 4689a8f1aafe5b21f1279cfbc31d9cc30a928ab9 Mon Sep 17 00:00:00 2001 From: "psychoticwolf%carolina.rr.com" Date: Wed, 6 Oct 2004 18:35:28 +0000 Subject: [PATCH] Initial Landing of update-beta code. Bug 260157. Initial Landing of Developer CP. Bug 254925. git-svn-id: svn://10.0.0.236/trunk@163307 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/webtools/update/css/base/content.css | 492 ++++++++++++ mozilla/webtools/update/css/base/template.css | 104 +++ .../webtools/update/css/cavendish/content.css | 349 ++++++++ .../webtools/update/css/cavendish/home.css | 125 +++ .../update/css/cavendish/template.css | 265 +++++++ mozilla/webtools/update/css/print.css | 84 ++ .../webtools/update/developers/additem.php | 748 ++++++++++++++++++ .../webtools/update/developers/appmanager.php | 211 +++++ .../webtools/update/developers/approval.php | 196 +++++ .../update/developers/categorymanager.php | 189 +++++ .../webtools/update/developers/faqmanager.php | 174 ++++ .../update/developers/inc_sidebar.php | 31 + mozilla/webtools/update/developers/index.php | 56 ++ .../update/developers/itemoverview.php | 159 ++++ .../update/developers/listmanager.php | 579 ++++++++++++++ mozilla/webtools/update/developers/login.php | 44 ++ mozilla/webtools/update/developers/logout.php | 10 + mozilla/webtools/update/developers/main.php | 110 +++ .../webtools/update/developers/osmanager.php | 153 ++++ .../webtools/update/developers/previews.php | 255 ++++++ .../update/developers/usermanager.php | 396 ++++++++++ mozilla/webtools/update/images/body_back.gif | Bin 0 -> 526 bytes mozilla/webtools/update/images/delete.png | Bin 0 -> 2379 bytes .../webtools/update/images/download_back.gif | Bin 0 -> 4156 bytes .../webtools/update/images/download_br.gif | Bin 0 -> 386 bytes mozilla/webtools/update/images/edit.png | Bin 0 -> 2069 bytes .../update/images/feature-back-cnet.png | Bin 0 -> 24826 bytes mozilla/webtools/update/images/front-shop.gif | Bin 0 -> 1548 bytes mozilla/webtools/update/images/header_bl.png | Bin 0 -> 2391 bytes mozilla/webtools/update/images/header_br.gif | Bin 0 -> 546 bytes .../webtools/update/images/header_logo.gif | Bin 0 -> 4180 bytes mozilla/webtools/update/images/header_tab.gif | Bin 0 -> 4296 bytes mozilla/webtools/update/images/header_tl.gif | Bin 0 -> 836 bytes mozilla/webtools/update/images/header_tr.gif | Bin 0 -> 466 bytes .../webtools/update/images/key-point_back.gif | Bin 0 -> 94 bytes .../webtools/update/images/key-point_bl.gif | Bin 0 -> 102 bytes .../webtools/update/images/key-point_br.gif | Bin 0 -> 386 bytes .../webtools/update/images/key-point_tl.gif | Bin 0 -> 103 bytes .../webtools/update/images/key-point_tr.gif | Bin 0 -> 107 bytes mozilla/webtools/update/images/menu_back.gif | Bin 0 -> 94 bytes mozilla/webtools/update/images/menu_br.gif | Bin 0 -> 384 bytes mozilla/webtools/update/images/menu_tr.gif | Bin 0 -> 107 bytes .../update/images/product-front-firefox.png | Bin 0 -> 6868 bytes .../update/images/product-front-mozilla.png | Bin 0 -> 4954 bytes .../images/product-front-thunderbird.png | Bin 0 -> 7376 bytes mozilla/webtools/update/images/ratings.png | Bin 0 -> 1745 bytes mozilla/webtools/update/images/reply.png | Bin 0 -> 2091 bytes mozilla/webtools/update/images/rss.png | Bin 0 -> 1140 bytes mozilla/webtools/update/images/shop_back.gif | Bin 0 -> 5156 bytes mozilla/webtools/update/images/shop_br.gif | Bin 0 -> 274 bytes mozilla/webtools/update/images/shop_tl.gif | Bin 0 -> 113 bytes .../webtools/update/images/t_featuring.gif | Bin 0 -> 1464 bytes mozilla/webtools/update/images/t_firefox.gif | Bin 0 -> 1398 bytes 53 files changed, 4730 insertions(+) create mode 100755 mozilla/webtools/update/css/base/content.css create mode 100755 mozilla/webtools/update/css/base/template.css create mode 100755 mozilla/webtools/update/css/cavendish/content.css create mode 100755 mozilla/webtools/update/css/cavendish/home.css create mode 100755 mozilla/webtools/update/css/cavendish/template.css create mode 100755 mozilla/webtools/update/css/print.css create mode 100755 mozilla/webtools/update/developers/additem.php create mode 100755 mozilla/webtools/update/developers/appmanager.php create mode 100755 mozilla/webtools/update/developers/approval.php create mode 100755 mozilla/webtools/update/developers/categorymanager.php create mode 100755 mozilla/webtools/update/developers/faqmanager.php create mode 100755 mozilla/webtools/update/developers/inc_sidebar.php create mode 100755 mozilla/webtools/update/developers/index.php create mode 100755 mozilla/webtools/update/developers/itemoverview.php create mode 100755 mozilla/webtools/update/developers/listmanager.php create mode 100755 mozilla/webtools/update/developers/login.php create mode 100755 mozilla/webtools/update/developers/logout.php create mode 100755 mozilla/webtools/update/developers/main.php create mode 100755 mozilla/webtools/update/developers/osmanager.php create mode 100755 mozilla/webtools/update/developers/previews.php create mode 100755 mozilla/webtools/update/developers/usermanager.php create mode 100755 mozilla/webtools/update/images/body_back.gif create mode 100755 mozilla/webtools/update/images/delete.png create mode 100755 mozilla/webtools/update/images/download_back.gif create mode 100755 mozilla/webtools/update/images/download_br.gif create mode 100755 mozilla/webtools/update/images/edit.png create mode 100755 mozilla/webtools/update/images/feature-back-cnet.png create mode 100755 mozilla/webtools/update/images/front-shop.gif create mode 100755 mozilla/webtools/update/images/header_bl.png create mode 100755 mozilla/webtools/update/images/header_br.gif create mode 100755 mozilla/webtools/update/images/header_logo.gif create mode 100755 mozilla/webtools/update/images/header_tab.gif create mode 100755 mozilla/webtools/update/images/header_tl.gif create mode 100755 mozilla/webtools/update/images/header_tr.gif create mode 100755 mozilla/webtools/update/images/key-point_back.gif create mode 100755 mozilla/webtools/update/images/key-point_bl.gif create mode 100755 mozilla/webtools/update/images/key-point_br.gif create mode 100755 mozilla/webtools/update/images/key-point_tl.gif create mode 100755 mozilla/webtools/update/images/key-point_tr.gif create mode 100755 mozilla/webtools/update/images/menu_back.gif create mode 100755 mozilla/webtools/update/images/menu_br.gif create mode 100755 mozilla/webtools/update/images/menu_tr.gif create mode 100755 mozilla/webtools/update/images/product-front-firefox.png create mode 100755 mozilla/webtools/update/images/product-front-mozilla.png create mode 100755 mozilla/webtools/update/images/product-front-thunderbird.png create mode 100755 mozilla/webtools/update/images/ratings.png create mode 100755 mozilla/webtools/update/images/reply.png create mode 100755 mozilla/webtools/update/images/rss.png create mode 100755 mozilla/webtools/update/images/shop_back.gif create mode 100755 mozilla/webtools/update/images/shop_br.gif create mode 100755 mozilla/webtools/update/images/shop_tl.gif create mode 100755 mozilla/webtools/update/images/t_featuring.gif create mode 100755 mozilla/webtools/update/images/t_firefox.gif diff --git a/mozilla/webtools/update/css/base/content.css b/mozilla/webtools/update/css/base/content.css new file mode 100755 index 00000000000..1ee2aa9174b --- /dev/null +++ b/mozilla/webtools/update/css/base/content.css @@ -0,0 +1,492 @@ +/* mozilla.org Base Styles + * maintained by fantasai + * (classes defined in the Markup Guide - http://mozilla.org/contribute/writing/markup ) + */ +/* Suggested order: + * display + * list-style + * position + * float + * clear + * width + * height + * margin + * padding + * border + * background + * color + * font + * text-decoration + * text-align + * vertical-align + * white-space + * other text + * content + * + */ + +/* TOC: + Random HTML Styles + Forms + General Structure + Navigation + Quotations + Comments and Other Asides + Emphasis + Computers - General + Code + Examples and Figures + Q and A (FAQ) + Tables + Headers + Meta + Specific to Products Pages +*/ +/* Random HTML Styles */ + + dt { + font-weight: bold; + } + + dd { + margin: 0 0 1em 1em; + } + + li { + margin-top: 0.2em; + margin-bottom: 0.2em; + } + + sup { + font-size: 70%; + } + + form { + margin: 0; + display: inline; + } + + label { + font-weight: bold; + } + + .deepLevel #mainContent :link img, + .deepLevel #mainContent :visited img { + border: medium solid; + } + +/* General Structure */ + + .subtitle { + font-style: italic; + } + + div.para { + margin: 1em 0; + } + + div.section { + display: block; + padding-left: 3%; + } + + div.section > h2, + div.section > h3, + div.section > h4, + div.section > h5, + div.section > h6 { + margin-left: -1.3%; + } + + .imgright { + float: right; + margin: 0 0 2em 2em; + } + + .first { + margin-top: 0; /* For IE not understanding first:child */ + } + +/* Navigation */ + + :link img, + :visited img { + border: 0; + } + + .ex-ref { + font-style: italic; + } + + dl.toc dt { + margin-top: 1em; + font-size: 110%; + } + dl.toc p { + margin: 0; + text-indent: 1em; + } + dl.toc p:first-child { + text-indent: 0; + } + dl.toc > dd { + margin-left: 1em; + } + + ol.toc ol { + list-style-type: circle; + } + ol.toc > li > ol { + font-size: 90%; + } + + ul.snav {/* section navigation or short navigation, whichever you prefer */ + margin: 0.7em 10%; + padding: .2em; + text-align: center; + } + ul.snav > li { + list-style-type: none; + margin: 0; + padding: 0; + } + ul.snav > li { + display: inline; + } + ul.snav > li:before { + content: " | "; + } + ul.snav > li:first-child:before { + content: ""; + } + + a.cont { + display: block; + margin-right: 0; + text-align: right; + } + +/* Quotations */ + + blockquote > address { + padding-left: 1em; + text-indent: -1em; + } + blockquote > address:before { + content: "\2015"; + } + + div.quote, + div.epigraph { + margin: 1em; + } + div.quote q, + div.epigraph q { + display: block; + margin: 0 .5em; + text-indent: -0.5em; + } + div.quote cite, + div.epigraph cite { + display: block; + padding: 0 1em; + text-align: right; + text-indent: -1em; + } + div.quote cite:before, + div.epigraph cite:before { + content: "\2015"; + } + + blockquote.epigraph, + div.epigraph q { + font-style: italic; + text-align: right; + } + blockquote.epigraph em, + div.epigraph q em { + font-style: normal; + } + blockquote.epigraph address, + div.epigraph cite { + font-style: normal; + } + +/* Comments and other Asides */ + + .note { + font-style: italic; + } + .note:before { + content: "Note: "; + } + + .remark { + font-size: smaller; + } + .remark:before { + content: "["; + } + .remark:after { + content: "]"; + } + + .sidenote { + clear: both; + margin: 0.75em 0.5em; + padding: 0.2em; + border: 1px solid; + + /* Block NS4 from floating */ /*/*/ + float: right; + width: 30%; + min-width: 15em; + /* */ + } + /* Reduce main header sizes */ + .sidenote h1 {font-size: 1.40em;} + .sidenote h2 {font-size: 1.25em;} + .sidenote h3 {font-size: 1.10em;} + + .key-point > h1:first-child, + .key-point > h2:first-child, + .key-point > h3:first-child, + .key-point > h4:first-child, + .key-point > h5:first-child, + .key-point > h6:first-child { + margin-top: 0; + } + +/* Emphasis */ + + /* em, strong */ + + strong.stronger { + font-style: italic; + font-weight: bold; + } + + strong.very-strong { + font-weight: bold; + text-transform: uppercase; + } + + *.important, + div.important, + p.important { + margin: 1em; + padding: 0.1em; + border: solid #F00; + font-size: larger; + } + +/* Computers - General */ + + pre.screen { + overflow: auto; + margin: 1em 0.5em; + padding: 0.2em; + border: solid 1px; + font-family: monospace; + white-space: pre; + } + + div.screen { + margin: 1em .5em; + padding: 0.2em; + border: solid 1px; + } + + span.application { + font-style: italic; + } + + kbd.command, + code.command { + white-space: pre; + } + + code.filename { + font-style: italic; + white-space: nowrap; + } + +/* Code */ + + code { + white-space: pre; + } + + pre.code { + overflow: auto; + margin: 1em .5em; + padding: .2em; + border: solid 1px; + } + + pre.code .remark { + font-size: 1em; + font-style: italic; + } + + /* turn off content generation */ + pre.code .remark:before, + pre.code .remark:after, + pre.code .note:before { + content: ""; + } + + +/* Examples and Figures */ + + .example { + margin: 1em 3%; + padding: .25em; + border: solid; + } + .example:before { + display: block; + font-weight: bold; + content: "Example"; + } + .example[title]:before { + content: "Example: " attr(title); + } + + pre.bad, + div.bad { + border: dashed red 3px; + } + .bad.example:before { + content: "Incorrect Example"; + } + .bad.example[title]:before { + content: "Incorrect Example: " attr(title); + } + + pre.good, + div.good { + border: double lime 3px; + } + .good.example:before { + content: "Correct Example"; + } + .good.example[title]:before { + content: "Correct Example: " attr(title); + } + + .figure, + .screenshot { + display: block; + margin: .75em auto; + } + .screenshot[title]:after, + .figure[title]:after { + display: block; + margin: 0 8% .05em; + font-style: italic; + font-size: small; + text-align: right; + content: attr(title); + } + + .co, + .callout { + text-decoration: underline; + } + +/* Q and A (FAQ) */ + + .qandaset .question { + font-size: large; + font-weight: bold; + } + + .qandaset .answer { + margin-top: 1em; + } + +/* Tables */ + + table.data { + border-collapse: collapse; + margin: 0.5em auto; + border: 1px solid; + } + + table.data caption { + margin: 1em auto 0.2em; + font-size: small; + font-style: italic; + text-align: center; + } + + table.data th, + table.data td { + padding: 0.2em; + border: 1px solid; + } + +/* Meta */ + + address { + text-align: right; + } + .author { + margin-bottom: 1em; + text-align: left; + } + + +/* Headers */ + + #mainContent > h1:first-child, + #mainContent > h2:first-child, + #mainContent > h3:first-child, + #mainContent > h4:first-child, + #mainContent > h5:first-child, + #mainContent > h6:first-child, + #side > h1:first-child, + #side > h2:first-child, + #side > h3:first-child, + #side > h4:first-child, + #side > h5:first-child, + #side > h6:first-child { + margin-top: 0; + } + + +/* Specific to Products Pages */ + +.productlist { + margin: 0; + padding: 0 0 0 5px; +} + +.productlist li { + clear: left; + list-style: none; + padding: 0 0 1em 0; + margin-left: 0; +} + +.productlist h3 { + margin: 0 0 0.2em 0; +} + +.productlist img { + float: left; + margin: 0 0.5em 1em 0; + display: auto; +} + +/* Random Stuff That Needs To Be Cleaned Up / Deprecated */ + +.flLeft { + float: left; + margin: 5px 10px 5px 0; +} +.flRight { + float: right; + margin: 5px 0 5px 10px; +} diff --git a/mozilla/webtools/update/css/base/template.css b/mozilla/webtools/update/css/base/template.css new file mode 100755 index 00000000000..b1a6db494b3 --- /dev/null +++ b/mozilla/webtools/update/css/base/template.css @@ -0,0 +1,104 @@ +/* mozilla.org Base Template Styles + * Initial Design by Dave Shea + * Severely tweaked by David Baron + * Reorganized by fantasai + * Large Changes for new Cavendish default by Daniel Burka and Steven Garrity + */ + +/* Basic Structure */ + body { + min-width: 610px; + margin: 20px; + } + + #container { + max-width: 70em; + margin: 0 auto; + } + + #mBody { + clear: both; + padding: 0 0 1em 0; + } + + #side { + float: left; + width: 23%; + margin-bottom: 1em; + } + + #mainContent { + margin-left: 25%; + } + .nomenu #mainContent { + margin-left: 0; + } + .bodyleft { + margin-left: 25% ! important + } + #mainContent.right { + float: left; + width: 62%; + margin-bottom: 1em; + margin-left: 0; + } + + #side.right { + float: none; + width: auto; + margin-left: 65%; + } + +/* Header */ + + #header { margin-bottom: 1em; } + #header ul { + margin: 0 0 1em 0; + padding: 0; + } + + #header li { + display: inline; + padding: 0 20px 0 0; + margin: 0; + white-space: nowrap; + } + +/* Sidebar */ + + #getcd { + margin: 1em 0 0 45px; + } + +/* Footer */ + + #footer { + clear: both; + margin-top: 1em; + } + + #footer ul { + margin: 0 0 1em 0; + padding: 0; + } + + #footer li { + display: inline; + padding: 0 20px 0 0; + margin: 0; + white-space: nowrap; + } + + #footer p { + margin: 0.6em 0; + } + +/*accessibility tweaks*/ + .skipLink { + position: absolute; + left: -999px; + width: 990px; + } + hr.hide { + display: none; + } diff --git a/mozilla/webtools/update/css/cavendish/content.css b/mozilla/webtools/update/css/cavendish/content.css new file mode 100755 index 00000000000..6f584dd8736 --- /dev/null +++ b/mozilla/webtools/update/css/cavendish/content.css @@ -0,0 +1,349 @@ +/* mozilla.org MezzoTan Content Styles + * Initial Design by Dave Shea + * Reorganized and Expanded to include Markup Reference classes by fantasai + */ +/* Suggested order: + * display + * list-style + * position + * float + * clear + * width + * height + * margin + * padding + * border + * background + * color + * font + * text-decoration + * text-align + * vertical-align + * white-space + * other text + * content + * + */ + +/* TOC: + Body + Random HTML Styles + Forms + General Structure + Navigation + Quotations + Comments and Other Asides + Emphasis + Computers - General + Code + Examples and Figures + Q and A (FAQ) + Tables + Meta +*/ + +/* Body */ + + body { + background: #fff; + } + + #mainContent, #side { + background: #fff; + line-height: 1.3; /* value other than 'normal' needed for WinIE */ + } + .deepLevel #mainContent { + line-height: 1.4; + } + +/* Random HTML Styles */ + + hr { + height: 1px; + background-color: #000; + color: #000; + margin: 2em 0; + } + + input[type="submit"] { + font-weight: bold; + } + +/* General Structure */ + body, td, th, input { /* redundant rules for bad browsers */ + font-family: verdana, sans-serif; + font-size: x-small; + voice-family: "\"}\""; + voice-family: inherit; + font-size: small; + } + + h1, h2, h3, h4, h5, h6 { + margin: 1em 0 0.2em 0; + border-bottom: 1px solid #ccc; + font-family: arial, verdana, sans-serif; + } + + #header h1 { border: 0; } + + h1 { font-size: 160%; font-weight: normal; } + h2 { font-size: 150%; font-weight: normal; } + h3 { font-size: 120%; } + h4 { font-size: 100%; } + h5 { font-size: 90%; } + h6 { font-size: 90%; border: 0; } + +/* Navigation */ + + a:link { color: #039; } + a:visited { color: #636; } + a:hover { color: #333; } + a:active { color: #000; } + +/* Quotations */ + + +/* Comments and other Asides */ + + .note { + color: #666; + font-style: normal; + } + + .remark { + color: #666; + } + + .sidenote { + border: #666; + } + + .key-point:before { + line-height: 0.1; + font-size: 1px; + background: transparent url("../../images/key-point_tr.gif") no-repeat top right; + margin: -15px -15px 0 -15px; + height: 15px; + display: block; + border: none; + content: url("../../images/key-point_tl.gif"); + } + .key-point { + background: #e4ecec url("../../images/key-point_back.gif") right repeat-y; + padding: 15px; + margin-bottom: 1em; + } + .key-point:after { + display: block; + clear: both; + padding-top: 15px; + line-height: 0.1; + font-size: 1px; + content: url("../../images/key-point_bl.gif"); + margin: -15px; + height: 8px; + background: transparent url("../../images/key-point_br.gif") scroll no-repeat bottom right ; + } + + .key-point h2, .key-point h3, .key-point h4, .key-point h5 { + border: none; + margin-top: 0; + } + + .news dt { + font-weight: normal; + color: #666; + } + .news dt a { + font-weight: bold; + } + + ul.compact { + margin-left: 0; + padding-left: 20px; + } + +/* Emphasis */ + +/* Computers - General */ + + kbd { + margin: 0.1em; + padding: 0.1em; + border: 1px #ccc; + } + + kbd.command, + code.command { + color: #6B5839; + } + +/* Code */ + + pre.code { + margin: 0.1em; + padding: 0.1em; + background: #EEECF6; + } + + code > em, + code > strong, + pre.code > em, + pre.code > strong { + font-style: normal; + } + +/* Examples and Figures */ + + div.example { + border-color: #554FA0; + } + div.example::before { + color: #666; + } + +/* Tables */ + + table.data { + border-style: none hidden; + } + + table.data thead { + background: #EEECF6; + } + + table.data th, + table.data td { + border: 1px dotted #D6CCBD; + } + + tr.odd { + background: #F5F5F5; + } + +/* Meta */ + + address { + color: #666; + } + +/* Product Specific CSS */ + + .productlist h3 { + border: none; + } + + .key-point h3 { + margin: 0; + } + + #product-desc h2 { + text-indent: -700em; + height: 25px; + line-height: 2px; + font-size: 2px; + } + + #product-desc p { + padding-left: 170px; + } + + #product-side { + margin-left: 65%; + } + + #product-side ul { + margin-left: 0; + padding-left: 20px; + } + + #product-side li { + padding-bottom: 0.2em; + } + + #product-desc { + padding: 40px 0 25px 0; + color: #4C5C5C; + width: 60%; + float: left; + line-height: 140%; + } + + .product-firefox { + background: url("../../images/product-firefox-screen.png") no-repeat; + } + .product-thunderbird { + background: url("../../images/product-thunderbird-screen.png") no-repeat; + } + .product-camino { + background: url("../../images/product-camino-screen.png") no-repeat; + } + .product-mozilla { + background: url("../../images/product-mozilla-screen.png") no-repeat; + } + + .download h3 { + color: #1D9101; + font-weight: bold; + margin: 0; + font-size: 140%; + } + + .download h3 a:link, + .download h3 a:visited, + .download h3 a:active { + color: #1D9101; + } + + .download h3 a:hover { + color: #156B01; + } + + .download:before { + line-height: 0.1; + font-size: 1px; + margin: -15px -15px 0 -15px; + height: 15px; + display: block; + border: none; + content: url("../../images/download_tl.gif"); + } + .download { + background: #C4EFA1 url("../../images/download_back.gif") top right no-repeat; + padding: 15px 45px 15px 15px; + margin-bottom: 0.5em; + } + .download:after { + display: block; + padding-top: 15px; + line-height: 0.1; + font-size: 1px; + content: url("../../images/download_bl.gif"); + margin: -10px -45px -15px -15px; + height: 8px; + background: transparent url("../../images/download_br.gif") scroll no-repeat bottom right ; + } + + .shop:before { + line-height: 0.1; + font-size: 1px; + margin: -15px -15px 0 -15px; + height: 15px; + display: block; + border: none; + content: url("../../images/shop_tl.gif"); + } + .shop { + background: #C0DCDC url("../../images/shop_back.gif") top right no-repeat; + padding: 15px 70px 15px 15px; + } + .shop:after { + display: block; + padding-top: 15px; + line-height: 0.1; + font-size: 1px; + content: url("../../images/shop_bl.gif"); + margin: -10px -70px -15px -15px; + height: 8px; + background: transparent url("../../images/shop_br.gif") scroll no-repeat bottom right ; + } diff --git a/mozilla/webtools/update/css/cavendish/home.css b/mozilla/webtools/update/css/cavendish/home.css new file mode 100755 index 00000000000..e7f6ecb02e7 --- /dev/null +++ b/mozilla/webtools/update/css/cavendish/home.css @@ -0,0 +1,125 @@ +h2 a { text-decoration: none; } +h2 a:link { color: #000; } +h2 a:visited { color: #000; } +h2 a:hover { color: #039; } + +#mBody h2 { margin-top: 0; } +#mBody p { margin-top: 0; } + +.front-feature-cnet { background: #E4ECEC url(/images/feature-back-cnet.png) bottom right no-repeat; } +.front-feature-wired { background: #E4ECEC url(/images/feature-back-wired.png) bottom right no-repeat; } +.front-feature-nytimes { background: #E4ECEC url(/images/feature-back-nytimes.png) bottom right no-repeat; } +.front-feature-onion { background: #E4ECEC url(/images/feature-back-onion.png) bottom right no-repeat; } +.front-feature-slate { background: #E4ECEC url(/images/feature-back-slate.png) bottom right no-repeat; } +.front-feature-nasa { background: #E4ECEC url(/images/feature-back-nasa.png) bottom right no-repeat; } + +#firefox-feature { + position: relative; +} + +#firefox-feature ul { + margin: 0.5em 0 0 0; + padding: 0; +} + +#firefox-feature li { + list-style: none; + margin-left: 1.5em; +} + +#firefox-feature li a { + display: block; + padding: 5px 0 7px 34px; + text-decoration: none; +} + +#firefox-feature li a .front-link { + text-decoration: underline; +} + +a#shopLink { + display: block; + padding: 2px 4px 10px 32px; + background: url(/images/front-shop.gif) no-repeat; +} + +div.extrainfo { + margin-top: 10px; +} + +#firefox-feature p { + margin: 0 0 1em 0; + line-height: 140%; +} + +#firefox-feature #feature-content { + padding: 6px 330px 10px 10px; +} + +#featurelink { + display: block; + width: 350px; + height: 235px; + position: absolute; + bottom: 0; + right: 0; + text-decoration: none; + text-indent: -2500px; +} + +ul.news { + margin: 0.5em 0 0 0; + padding: 0; +} + +.news li { + margin: 0 0 0.7em 0; + padding: 0; + clear: both; + list-style-type: none; +} +.news li a { font-weight: normal; } + +.news .date { + background: #eee; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + float: left; + text-align: center; + margin: 0 5px 5px 0; + line-height: 1.1em; + padding: 2px; + font-size: 11px; + width: 4em; + white-space: nowrap; +} + +img.rss { + float: right; + margin: 0; + padding: 4px 4px 0 0; +} + +img.promo { + margin: 0 0 8px 8px; + float: right; +} + +.frontcolumn { + width: 30%; + float: left; + padding-right: 3%; +} + +.frontcolumnlast { + width: 33%; + float: left; +} + +.homepage .download { + width: 200px; +} + +.homepage .shop { + width: 175px; +} diff --git a/mozilla/webtools/update/css/cavendish/template.css b/mozilla/webtools/update/css/cavendish/template.css new file mode 100755 index 00000000000..00454127f6c --- /dev/null +++ b/mozilla/webtools/update/css/cavendish/template.css @@ -0,0 +1,265 @@ +/* mozilla.org Cavendish Template Styles + * Initial Design by Daniel Burka and Steven Garrity +*/ + +/* Basic Structure */ + body { + background: #fff url("../../images/body_back.gif") repeat-x; + } + +/* Header */ + + #header { + background: #455372 url("../../images/header_bl.png") bottom left repeat-x; + position: relative; + min-height: 39px; + height: 5em; + padding: 0; + voice-family: "\"}\""; + voice-family: inherit; + height: 3em; + padding: 15px 0; + } #ignored {} + + #header h1 { + position: absolute; + top: 0; + left: 0; + margin: 0; + font-size: 2px; + background: url("../../images/header_tl.gif") no-repeat; + height: 8px; + z-index: 100; /* above the UL */ + } + #header h1 a { + display: block; + width: 204px; + height: 55px; + background: transparent url("../../images/header_logo.gif") no-repeat; + text-indent: -700em; + text-decoration: none; + } + #header ul { + width: auto; + position: absolute; + bottom: 0; + right: 0; + margin: 0; + padding: 0 15px 0 0; + list-style: none; + background: url("../../images/header_br.gif") no-repeat bottom right; + z-index: 90; /* below the H1 */ + } + #header li { + float: right; + background: transparent url("../../images/header_tab.gif") 100% -600px no-repeat; + padding: 0 6px 0 0; + margin: 0 1px 0 0; + border-bottom: 1px solid #515358; + } + #header ul a { + float: left; + display: block; + padding: 4px 4px 4px 10px; + background: transparent url("../../images/header_tab.gif") 0% -600px no-repeat; + font-weight: bold; + color: #fff; + text-decoration: none; + } + #header ul li:hover a { background-position: 0% -400px; } + #header ul li:hover { background-position: 100% -400px; } + + body.sectionAbout li#menu_aboutus, + body.sectionProducts li#menu_products, + body.sectionSupport li#menu_support, + body.sectionDevelopers li#menu_developers { + background-position: 100% -200px; + } + + body.sectionAbout li#menu_aboutus a, + body.sectionProducts li#menu_products a, + body.sectionSupport li#menu_support a, + body.sectionDevelopers li#menu_developers a { + background-position: 0% -200px; + color: #039; + } + + body.sectionAbout li#menu_aboutus, + body.sectionProducts li#menu_products, + body.sectionSupport li#menu_support, + body.sectionDevelopers li#menu_developers { + border-bottom: 1px solid #fff; + } + + body.sectionAbout li#menu_aboutus:hover, + body.sectionProducts li#menu_products:hover, + body.sectionSupport li#menu_support:hover, + body.sectionDevelopers li#menu_developers:hover { + background-position: 100% 0%; + } + + body.sectionAbout li#menu_aboutus:hover a, + body.sectionProducts li#menu_products:hover a, + body.sectionSupport li#menu_support:hover a, + body.sectionDevelopers li#menu_developers:hover a { + background-position: 0% 0%; + color: #333; + } + +/* Search Field */ + + #header form { + position: absolute; + top: 0; + right: 0; + padding: 12px 20px 0 0; + background: url("../../images/header_tr.gif") no-repeat top right; + margin: 0; /* need for IE Mac */ + text-align: right; /* need for IE Mac */ + white-space: nowrap; /* for Opera */ + } + #header form label { color: #fff; font-size: 85%; } + #header form input { font-size: 85%; } + + #header form #submit { + font-size: 85%; + background: #6A7389; + color: #fff; + padding: 1px 4px; + border-right: 1px solid #283043; + border-bottom: 1px solid #283043; + border-top: 1px solid #9097A2; + border-left: 1px solid #9097A2; + } + + #header form #q { + width: 170px; + font-size: 85%; + border: 1px solid #9097A2; + background: #D9DBE1; + padding: 2px; + } + #header form #q:hover, #header form #q:focus { + background: #fff; + } + +/* Sidebar */ + + #nav:before { + line-height: 0.1; + font-size: 1px; + background: transparent url("../../images/menu_tr.gif") no-repeat top right; + margin: 0; + height: 9px; + display: block; + border-bottom: 1px solid #ddd; + content: url("../../images/key-point_tl.gif"); + } + #nav { + background: #E0E9E9 url("../../images/menu_back.gif") right repeat-y; + } + #nav:after { + display: block; + clear: both; + padding-top: 0; + line-height: 0.1; + font-size: 1px; + content: url("../../images/key-point_bl.gif"); + margin: 0 0 0 0; + height: 8px; + background: transparent url("../../images/menu_br.gif") scroll no-repeat bottom right ; + border-top: 1px solid #fff; + } + + #nav, #nav ul { + margin: 0; + padding: 0; + list-style: none; + } + #nav { + margin-bottom: 1em; + } + #nav li { + fdisplay: inline; /* need for IE spacing issue */ + padding: 0; + margin: 0; + } + + #nav li span { /* used for un-linked menu items */ + display: block; + padding: 6px 10px; + font-weight: bold; + color: #666; + } + + #nav li span#configParent, #nav li span #configuration { + display: inline; + font-weight: normal; + padding: 0; + } + + #nav li a { + display: block; + padding: 6px 10px; + text-decoration: none; + background: #EDF2F2; + border-bottom: 1px solid #ddd; + border-top: 1px solid #fff; + border-right: 1px solid #ddd; + } + + #nav li a:hover { + background: #E0E9E9; + } + + #nav li li a { + padding: 4px 8px 4px 20px; + } + + #oN { + background-color: #E0E9E9; + } + #oN:hover { + background-color: #C6DCDC; + } + +/* Footer */ + + #footer { + border-top: 1px solid #666; + margin: 2em 0; + padding: 1em 0; + text-align: center; + } + + #footer ul { + margin: 0; + padding: 0; + list-style: none; + } + + #footer li { + display: inline; + } + + #footer span,#footer a { + white-space: nowrap; + padding: 0 1em; + } + + #footer p span,#footer p a { + white-space: nowrap; + padding: 0 0.3em; + } + + #footer span a { + padding: 0; + } + + #footer p,#footer p a { + color: #666; + } + + #footer p a:hover { + color: #000; + } diff --git a/mozilla/webtools/update/css/print.css b/mozilla/webtools/update/css/print.css new file mode 100755 index 00000000000..99c5b3f50cb --- /dev/null +++ b/mozilla/webtools/update/css/print.css @@ -0,0 +1,84 @@ +/* mozilla.com print css +by dave shea, http://www.mezzoblue.com/ */ + +/*html elements*/ +body { + background: #fff; + font: 12pt Verdana,Sans-serif; +} + +a img { + border: 0; +} +form { + margin: 0; + display: inline; +} +label, input { + font-weight: bold; +} +h1, h2, h3, h4, h5, h6 { + margin: 0; +} +h1 { + font-size: 120%; + color: #955322; +} +h2 { + font-size: 110%; + color: #B26C38; +} +h2 a:visited { + text-decoration: none; +} +h3 { + color: #EC361D; + font-size: 110%; +} +h4 { + font-size: 110%; + color: #666; +} +h5 { + font-size: 100%; + color: #955322; +} +h6 { + color: #EC361D; + font-size: 100%; +} + +p, li, dt, dd { + font-size: 92%; +} +p { + line-height: 150%; +} +sup { + font-size: 70%; +} +a:link, a:visited { + color: #554FA0; + font-weight: bold; + text-decoration: none; +} + +dt.im { + float: left; +} + +#mainContent a:link:after, #mainContent a:visited:after { + content: " (" attr(href) ") "; + font-size: 70%; + color: #000; +} +#mainContent a[href^="/"]:after { + content: " (http://www.mozilla.org" attr(href) ") "; +} + +#tools, #search, #ad, #bn, #int, .skipLink, #brd { + display: none; +} +#header + hr { + display: none; +} diff --git a/mozilla/webtools/update/developers/additem.php b/mozilla/webtools/update/developers/additem.php new file mode 100755 index 00000000000..b85aa0ec554 --- /dev/null +++ b/mozilla/webtools/update/developers/additem.php @@ -0,0 +1,748 @@ + + + + +Mozilla Update :: Developer Control Panel :: Add Item + + +"Extension","T"=>"Theme"); +$typename = $typearray[$_GET["type"]]; +?> +

Add New

+ + +"> + + +
+Your File:
+
+
+ +
+ +\n"; + +//------------------ +// Construct $manifestdata[] array from install.rdf info. +// Thanks to Chewie[] with the Perl-Compatable RegExps Help. :-) +//------------------- + +// em:id +preg_match("/(.*?)<\/em:id>/", $buf, $matches); +$manifestdata["id"]=$matches[1]; + +// em:version +preg_match("/(.*?)<\/em:version>/", $buf, $matches); +$manifestdata["version"]=$matches[1]; + +//em:targetApplication +preg_match_all("/(.*?)<\/em:targetApplication>/s", $buf, $matches); +//echo"
";
+//print_r($buf);
+//print_r($matches);
+//echo"
"; + foreach ($matches[0] as $targetapp ) { + //em:targetApplication --> em:id + preg_match("/(.*?)<\/em:id>/", $targetapp, $matches); + $i = $matches[1]; + $manifestdata["targetapplication"][$i]["id"]=$matches[1]; + + //em:targetApplication --> em:minVersion + preg_match("/(.*?)<\/em:minVersion>/", $targetapp, $matches); + $manifestdata["targetapplication"][$i]["minversion"]=$matches[1]; + + //em:targetApplication --> em:maxVersion + preg_match("/(.*?)<\/em:maxVersion>/", $targetapp, $matches); + $manifestdata["targetapplication"][$i]["maxversion"]=$matches[1]; + } + +//em:name +preg_match("/(.*?)<\/em:name>/", $buf, $matches); +$manifestdata["name"]=$matches[1]; + +//em:description +preg_match("/(.*?)<\/em:description>/", $buf, $matches); +$manifestdata["description"]=$matches[1]; + +//em:homepageURL +preg_match("/(.*?)<\/em:homepageURL>/", $buf, $matches); +$manifestdata["homepageurl"]=$matches[1]; + + +//echo"

Adding Extension... Checking file...

\n"; +//echo"
"; print_r($manifestdata); echo"
\n"; +//Populate Form Variables from manifestdata. +$id = $manifestdata[id]; +$name = $manifestdata[name]; +$version = $manifestdata[version]; +$homepage = $manifestdata[homepageurl]; +$description = $manifestdata[description]; + + +//Check GUID for validity/existance, if it exists, check the logged in author for permission +$sql = "SELECT ID, GUID from `t_main` WHERE `GUID` = '$manifestdata[id]' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + if (mysql_num_rows($sql_result)=="1") { +// echo"This is a updated extension... Checking author data...
\n"; + $mode = "update"; + $row = mysql_fetch_array($sql_result); + $item_id = $row["ID"]; +if ($_POST["legacy"]=="TRUE") {$item_id = $_POST["existingitems"]; } + $sql = "SELECT `UserID` from `t_authorxref` WHERE `ID`='$item_id' AND `UserID` = '$_SESSION[uid]' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + if (mysql_num_rows($sql_result)=="1" or ($_SESSION["level"]="admin" or $_SESSION["level"]="editor")) { +// echo"This extension belongs to the author logged in
\n"; + } else { + echo"ERROR!! This extension does NOT belong to the author logged in.
\n"; + die("Terminating..."); + } + + } else { + $mode = "new"; +// echo"This is a new extension...
\n"; + } + +//Verify MinAppVer and MaxAppVer per app for validity, if they're invalid, reject the file. +if ($_POST["legacy"]=="TRUE" AND !$manifestdata[targetapplication]) {$manifestdata[targetapplication]=array(); } +foreach ($manifestdata[targetapplication] as $key=>$val) { +//echo"$key -- $val[minversion] $val[maxversion]
\n"; + +$i=0; + $sql = "SELECT `AppName`, `major`, `minor`, `release`, `SubVer` FROM `t_applications` WHERE `GUID`='$key' ORDER BY `major` DESC, `minor` DESC, `release` DESC, `SubVer` DESC"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $i++; + $appname = $row["AppName"]; + $subver = $row["SubVer"]; + $release = "$row[major].$row[minor]"; + if ($row["release"]) {$release = "$release.$row[release]";} + if ($subver !=="final") {$release="$release$subver";} + if ($release == $val[minversion]) { $versioncheck[$key][minversion_valid] = "true"; } + if ($release == $val[maxversion]) { $versioncheck[$key][maxversion_valid] = "true"; } + + } + if (!$versioncheck[$key][minversion_valid]) { + $versioncheck[$key][minversion_valid]="false"; + echo"Error! The MinAppVer for $appname of $val[minversion] in install.rdf is invalid.
\n"; + $versioncheck[errors]="true"; + } + if (!$versioncheck[$key][maxversion_valid]) { + $versioncheck[$key][maxversion_valid]="false"; + echo"Error! The MaxAppVer for $appname of $val[maxversion] in install.rdf is invalid.
\n"; + $versioncheck[errors]="true"; + } +} + +//echo"
"; print_r($versioncheck); echo"
\n"; + +if ($versioncheck[errors]=="true") { + echo"Errors were encountered during install.rdf checking...
\n"; + die("Aborting..."); +} else { +// echo"install.rdf minAppVer and maxAppVer valid...
\n"; +} + + +} else { +//echo"install.rdf is not present, use legacy mode...
\n"; +//header("Location: http://$_SERVER[HTTP_HOST]/developers/additem.php?function=step1b&filename=$filename"); +echo"

Add Step 1b: Legacy Item Data Entry: ($filename)

\n"; +?> + + +"> + + +
+ + > New
+ > Update to: +
+Your file: "> "> +
+ +
+ + + + +"Extension","T"=>"Theme"); +$type = $_POST["type"]; +$typename = $typearray[$type]; + +if ($mode=="update") { + $sql = "SELECT `Name`, `Homepage`, `Description` FROM `t_main` WHERE `ID` = '$item_id' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $name = $row["Name"]; + $homepage = $row["Homepage"]; + $description = $row["Description"]; + + $authors = ""; $i=""; + $sql = "SELECT TU.UserEmail FROM `t_authorxref` TAX INNER JOIN t_userprofiles TU ON TAX.UserID = TU.UserID WHERE `ID` = '$item_id'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $numresults = mysql_num_rows($sql_result); + while ($row = mysql_fetch_array($sql_result)) { + $i++; + $email = $row["UserEmail"]; + $authors .= "$email"; + if ($i < $numresults) { $authors .=", "; } + } + +//Get Currently Set Categories for this Object... + $sql = "SELECT TCX.CategoryID, TC.CatName FROM `t_categoryxref` TCX +INNER JOIN t_categories TC ON TCX.CategoryID = TC.CategoryID +WHERE TCX.ID = '$item_id' +ORDER BY `CatName` ASC "; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $n++; + $catid = $row["CategoryID"]; + $categories[$n] = $catid; + } +unset($n); +} + +if (!$categories) {$categories = array(); } +?> +

Add New »» Step 2:

+ + +"> + +"> + +"> +"> + + + + + + + + +\n"; + echo"\n"; + echo"\n"; + +echo"\n"; + $sql2 = "SELECT `AppName`,`GUID` FROM `t_applications` GROUP BY `AppName` ORDER BY `AppName` ASC"; + $sql_result2 = mysql_query($sql2, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row2 = mysql_fetch_array($sql_result2)) { + $appname = $row2["AppName"]; + $guid = $row2["GUID"]; + if ($appname == "Mozilla") { $mozguid = $guid; } + $minappver = $manifestdata["targetapplication"]["$guid"]['minversion']; + $maxappver = $manifestdata["targetapplication"]["$guid"]['maxversion']; + echo"\n"; + } } +} +?> + + + +\n"; +?> + + + + +
Name* " SIZE=45 MAXLENGTH=100>Categories:
    
Author(s):*" SIZE=45>
Version:*
OS*
Filename:$filename ($filesize"."kb)
Target Application(s):
$appname "; + +if (($mode=="new" or $mode=="update") and (strtolower($appname) !="mozilla" or $manifestdata["targetapplication"]["$mozguid"])) { + //Based on Extension Manifest (New Mode) + if ($minappver and $maxappver) { + echo"$minappver - $maxappver\n"; + echo"\n"; + echo"\n"; + } else { + echo"N/A"; + } +} else { + //Legacy Mode Code... + if ($appname =="Firefox" or $appname == "Thunderbird") { + echo"
Incompatable with Legacy Extensions (Requires install.rdf)"; + } else { + +$sql = "SELECT `version`,`major`,`minor`,`release`,`SubVer` FROM `t_applications` WHERE `AppName` = '$appname' ORDER BY `major` ASC, `minor` ASC, `release` ASC, `SubVer` ASC"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +echo"\n"; + + echo" - "; + +$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +echo"\n"; + echo"
Homepage " SIZE=60 MAXLENGTH=200>
Description*
Version Notes:
  
+ +1) { + //Too many e-mails match, store individual data for error block. + $r++; + $emailerrors[$a]["foundemails"][$r] = $useremail; + } + $authorids[] = $userid; + $authoremails[] = $useremail; + } + if ($numresults !="1") { + //No Valid Entry Found for this E-Mail or too many, kill and store data for error block. + $emailerrors[$a]["author"] = "$author"; + $updateauthors = "false"; // Just takes one of these to kill the author update. + } +} +unset($a,$r); + + + +if ($_POST["name"] AND $_POST["type"] AND $_POST["authors"] AND $updateauthors !="false" AND $_POST["version"] AND $_POST["osid"] AND $_POST["filename"] AND $_POST["filesize"] AND $_POST["description"] AND $minappver AND $maxappver) { +//All Needed Info is in the arrays, procceed with inserting... + +//Create DIV for Box around the output... + echo"

Adding Item... Please Wait...

\n"; + echo"
\n"; + +//Phase One, Main Data +$name = $_POST["name"]; +$homepage = $_POST["homepage"]; +$description = $_POST["description"]; +$item_id = $_POST["item_id"]; +$guid = $_POST["guid"]; +$type = $_POST["type"]; +if ($_POST["mode"]=="update") { +$sql = "UPDATE `t_main` SET `Name`='$name', `Homepage`='$homepage', `Description`='$description', `DateUpdated`=NOW(NULL) WHERE `ID`='$item_id' LIMIT 1"; +} else { +$sql = "INSERT INTO `t_main` (`GUID`, `Name`, `Type`, `Homepage`,`Description`,`DateAdded`,`DateUpdated`) VALUES ('$guid', '$name', '$type', '$homepage', '$description', NOW(NULL), NOW(NULL));"; +} + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +if ($sql_result) {echo"Updating/Adding record for $name...
\n";} + + +//Get ID for inserted row... if we don't know it already +if (!$_POST[item_id] and $_POST["mode"] !=="update") { + $sql = "SELECT `ID` FROM `t_main` WHERE `GUID`='$_POST[guid]' AND `Name`='$_POST[name]' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $id = $row["ID"]; + } else { + $id = $_POST["item_id"]; + } + + +//Phase 2 -- Commit Updates to AuthorXref tables.. with the ID and UserID. +if ($updateauthors != "false") { + //Remove Current Authors + $sql = "DELETE FROM `t_authorxref` WHERE `ID` = '$id'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + //Add New Authors based on $authorids + sort($authorids); + foreach ($authorids as $authorid) { + $sql = "INSERT INTO `t_authorxref` (`ID`, `UserID`) VALUES ('$id', '$authorid');"; + $result = mysql_query($sql) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + } + if ($result) { echo"Authors added...
\n"; } +} else { + echo"ERROR: Could not update Authors list, please fix the errors printed below and try again...
\n"; +} + +unset($authors); //Clear from Post.. + + +// Phase 3, t_categoryxref + +if (!$_POST["categories"]) { +//No Categories defined, need to grab one to prevent errors... + $sql = "SELECT `CategoryID` FROM `t_categories` WHERE `CatType`='$type' AND `CatName`='Miscellaneous' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $_POST["categories"] = array("$row[CategoryID]"); + } + +} + + //Delete Current Category Linkages... + $sql = "DELETE FROM `t_categoryxref` WHERE `ID` = '$id'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + //Add New Categories from $_POST["categories"] + foreach ($_POST["categories"] as $categoryid) { + $sql = "INSERT INTO `t_categoryxref` (`ID`, `CategoryID`) VALUES ('$id', '$categoryid');"; + $result = mysql_query($sql) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + } + if ($result) {echo"Categories added...
\n"; } + + +//Phase 4, t_version rows + +//Construct Internal App_Version Arrays +$i=0; +$sql = "SELECT `AppName`, `int_version`, `major`, `minor`, `release`, `SubVer`, `shortname` FROM `t_applications` ORDER BY `AppName`, `major` DESC, `minor` DESC, `release` DESC, `SubVer` DESC"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $i++; + $appname = $row["AppName"]; + $int_version = $row["int_version"]; + $subver = $row["SubVer"]; + $release = "$row[major].$row[minor]"; + if ($row["release"]) {$release = "$release.$row[release]";} + if ($subver !=="final") {$release="$release$subver";} + $app_internal_array[$release] = $int_version; + $app_shortname[strtolower($appname)] = $row["shortname"]; + } + + $sql2 = "SELECT `AppName`,`AppID` FROM `t_applications` GROUP BY `AppName` ORDER BY `AppName` ASC"; + $sql_result2 = mysql_query($sql2, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row2 = mysql_fetch_array($sql_result2)) { + $appname = $row2["AppName"]; + $appid = $row2["AppID"]; + $minappver = $_POST["$appname-minappver"]; + $maxappver = $_POST["$appname-maxappver"]; + +if ($minappver and $maxappver) { + +if ($app_internal_array["$minappver"]) {$minappver_int = $app_internal_array["$minappver"]; } +if ($app_internal_array["$maxappver"]) {$maxappver_int = $app_internal_array["$maxappver"]; } +if (!$minappver_int) {$minappver_int = $minappver;} +if (!$maxappver_int) {$maxappver_int = $maxappver;} + + +$version = $_POST["version"]; +$osid = $_POST["osid"]; +$filesize = $_POST["filesize"]; +$uri = ""; //we don't have all the parts to set a uri, leave blank and fix when we do. +$notes = $_POST["notes"]; + +//If a record for this item's exact version, OS, and app already exists, find it and delete it, before inserting + $sql3 = "SELECT `vID` from `t_version` TV INNER JOIN `t_applications` TA ON TA.AppID=TV.AppID WHERE `OSID`='$osid' AND `AppName` = '$appname' AND TV.Version='$version' ORDER BY `vID` ASC"; + $sql_result3 = mysql_query($sql3, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result3)) { + $sql = "DELETE FROM `t_version` WHERE `vID`='$row[vID]' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + if ($sql_result) { echo"Warning! A version Record already exists for this item's Application/OS/Version combination. Deleting.
\n"; } + } + +$sql = "INSERT INTO `t_version` (`ID`, `Version`, `OSID`, `AppID`, `MinAppVer`, `MinAppVer_int`, `MaxAppVer`, `MaxAppVer_int`, `Size`, `URI`, `Notes`, `DateAdded`, `DateUpdated`) VALUES ('$id', '$version', '$osid', '$appid', '$minappver', '$minappver_int', '$maxappver', '$maxappver_int', '$filesize', '$uri', '$notes', NOW(NULL), NOW(NULL));"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + if ($sql_result) {echo"Added $name version $version for $appname
\n"; $apps_array[]=$app_shortname[strtolower($appname)];} + +$sql = "SELECT `vID` from `t_version` WHERE `id` = '$id' ORDER BY `vID` DESC LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $vid_array[] = $row["vID"]; +} +} + +$sql = "SELECT `OSName` FROM `t_os` WHERE `OSID`='$osid' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $osname = $row["OSName"]; + + +//Construct the New Filename +$filename_array = explode(".",$_POST[filename]); +$filename_count = count($filename_array)-1; +$fileext = $filename_array[$filename_count]; + +$itemname = str_replace(" ","_",$name); +$j=0; $app=""; +$app_count = count($apps_array); +foreach ($apps_array as $app_val) { +$j++; +$apps .="$app_val"; +if ($j<$app_count) {$apps .="+"; } +} +$newfilename = "$itemname-$version-$apps"; +if (strtolower($osname) !=="all") {$newfilename .="-".strtolower($osname).""; } +$newfilename .=".$fileext"; + + +//Move temp XPI to home for approval queue items... +$oldpath = "$repositorypath/temp/$_POST[filename]"; +$newpath = "$repositorypath/approval/".strtolower($newfilename); +if (file_exists($oldpath)) { + rename("$oldpath","$newpath"); + echo"File $newfilename saved to disk...
\n"; +} +$uri = str_replace("$repositorypath/approval/","http://$sitehostname/developers/approvalfile.php/",$newpath); +//echo"$newfilename ($oldpath) ($newpath) ($uri)
\n"; + +foreach ($vid_array as $vid) { + $sql = "UPDATE `t_version` SET `URI`='$uri' WHERE `vID`='$vid'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +} + +//Approval Queue +$_SESSION["trusted"]=="FALSE"; + //Trusted User Code Not Yet Implemented, needs a shared function w/ the approval queue + // for file moving, creation. (and sql updating?) + //Check if the item belongs to the user, (special case for where admins are trusted, the trust only applies to their own work.) + $sql = "SELECT `UserID` from `t_authorxref` WHERE `ID`='$id' AND `UserID` = '$_SESSION[uid]' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + if (mysql_num_rows($sql_result)=="1" AND $_SESSION["trusted"]=="TRUE") { + //User is trusted and the item they're modifying inheirits that trust. + $action = "Approval+"; + $comments = "Auto-Approval for Trusted User"; + //$typenames = array("E"=>"extensions","T"=>"themes"); + //$typename = $typenames[$type]; + + //$uri = strtolower(str_replace("http://$sitehostname/developers/approvalfile.php/","http://ftp.mozilla.org/pub/mozilla.org/$typename/$itemname/",$newpath)); + //foreach ($vid_array as $vid) { + // $sql = "UPDATE `t_version` SET `URI`='$uri' WHERE `vID`='$vid'"; + // $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + //} + + } else { + $action="Approval?"; + $comments=""; + } + + +//Firstly, log the comments and action taken.. +$userid = $_SESSION["uid"]; + +if (!$vid_array) { $vid_array = array(); } +foreach ($vid_array as $vid) { +$sql = "INSERT INTO `t_approvallog` (`ID`, `vID`, `UserID`, `action`, `date`, `comments`) VALUES ('$id', '$vid', '$userid', '$action', NOW(NULL), '$comments');"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +} + + +echo"Process Complete...

\n"; +echo"$name version $version has been added to the Mozilla Update database and is awaiting review by an editor, you will be notified when an editor reviews it.
\n"; +echo"To review or make changes to your submission, visit the Item Details page...
\n"; + +echo"

\n"; +echo"«« Back to Home"; +echo"
\n"; + +} + + +//Author Error Handling/Display Block for Form Post... +if ($emailerrors) { + +echo" +

Adding Item... Error Found while processing authors

\n + +"; + +foreach ($_POST as $key => $val) { +if ($key=="authors" or $key=="submit") {continue; } +if ($key=="categories") { +foreach ($_POST["categories"] as $val) { +echo"\n"; +} +continue; +} +echo"\n"; +} + + +echo"\n"; +$authors = $_POST["authors"]; +?> + +
\n"; +echo"
"; +foreach ($emailerrors as $authorerror) { +$author = $authorerror["author"]; +$count = count($authorerror["foundemails"]); + +if ($count=="0") { +//Error for No Entry Found +echo"Error! Entry '$author': No Matches Found. Please check your entry and try again.
\n"; +} else { +//Error for Too Many Entries Found +echo"Error! Entry '$author': Too Many Matches. Please make your entry more specific.
\n"; +} +if ($count>0 AND $count<6) { +echo"    Possible Addresses found: "; +foreach ($authorerror["foundemails"] as $foundemails) { +$a++; +echo"$foundemails"; + +if ($a != $count) {echo", "; } else {echo"
\n";} +} +} + +} +echo"
Author(s):*" SIZE=70>
+ + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/appmanager.php b/mozilla/webtools/update/developers/appmanager.php new file mode 100755 index 00000000000..628465863e8 --- /dev/null +++ b/mozilla/webtools/update/developers/appmanager.php @@ -0,0 +1,211 @@ + + + + + + + + + + +MozUpdates :: Manage Application Versions + + + + + +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +} +?> + + + + + + + + + + + + + +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + $lastname = ""; + + while ($row = mysql_fetch_array($sql_result)) { + + // If it's a new AppName, start a new row + if ($lastname != $row["AppName"]) { + + // Close out previous row if necessary + if ($lastname != "") { + echo""; + echo"\n"; + } + + $applications[] = $row["AppName"]; + echo"\n"; + echo"\n"; + echo""; + echo""; + echo"\n"; + +?> +
Manage Application List:
ReleaseVersion
".++$i." ".$row["AppName"]."  "; + + } else { + + // Separate with a comma + + echo", "; + } + + echo""; + echo"".$row["Release"].""; + + if ($row["SubVer"] != "final") {echo"".$row["SubVer"]."";} + + echo""; + + $lastname = $row["AppName"]; + } + + echo"
+
+The application $_POST[AppName] (Version $_POST[Release]$_POST[SubVer]) has been successfully added.
"; + } +?> +
+New Application + Name: +Release: +GUID: +
+If other, Name: + + + + + +
+ + +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + echo"
Your update to $_POST[AppName], has been successful.
"; + + } else if ($_POST["submit"] == "Delete Application") { + $sql = "DELETE FROM `t_applications` WHERE `appid`='$_POST[appid]'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("
MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + echo"
You've successfully deleted the application '$_POST[AppName]'.
"; +} + +if (!$appid) { $appid = $_POST["appid"]; } +// Show Edit Form + $sql = "SELECT * FROM `t_applications` WHERE `appid` = '$appid' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("
MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + $row = mysql_fetch_array($sql_result); +?> + +
+

Edit Application:

+
+
\n"; + echo"Release: "; + echo"
\n"; + + echo"GUID:
\n"; + + echo"\n"; +?> + + + + +
+«« Return to Application Manager +
+ + + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/approval.php b/mozilla/webtools/update/developers/approval.php new file mode 100755 index 00000000000..1e51d235219 --- /dev/null +++ b/mozilla/webtools/update/developers/approval.php @@ -0,0 +1,196 @@ + + + + +Mozilla Update :: Developer Control Panel :: Manage Approval Queue + + + + +

Extensions/Themes Awaiting Approval

+ + + + + + + + +\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + + } + +?> + +
NameRequested by?Last UpdatedWorks with
$i$row[Name] $row[Version]$row2[UserName] - $row2[UserEmail]$date$row[AppName]"; if($row[OSName] != "ALL") { echo" ($row[OSName])"; } echo"
+ $i) {$authors .=", ";} + } +$sql = "SELECT `UserName`, `UserEmail`,`date` FROM `t_approvallog` TA INNER JOIN t_userprofiles TU ON TA.UserID=TU.UserID WHERE `ID`='$id' AND `vID`='$_GET[vid]' AND `action`='Approval?' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $requestedby = $row["UserName"]; + $requestedon = $row["date"]; + $requestedbyemail = $row["UserEmail"]; +?> + +

Mozilla Update - Approval Requested:

+ + +
+
+"> +"> +"> +"> +"> +
+  name          
+  author(s)     
+  id            
+  version       
+  supported apps:
+                
+  requested by: 
+  requested on: 
+  
+  ">Install Now (KB)
+  Download
+  
+  Comments: 
+  
+   
+
+
+«« Return to Approval Queue +
+ +"; + + +//Firstly, log the comments and action taken.. +$_POST["userid"] = $_SESSION["uid"]; + +$sql = "INSERT INTO `t_approvallog` (`ID`, `vID`, `UserID`, `action`, `date`, `comments`) VALUES ('$_POST[id]', '$_POST[vid]', '$_POST[userid]', '$action', NOW(NULL), '$_POST[comments]');"; +$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + +//Secondly, let's move the file to it's new home in /ftp/ for staging... +$sql = "SELECT `Type`,`Name`,`Version`,`URI` from `t_main` TM INNER JOIN t_version TV ON TM.ID=TV.ID WHERE `vID`='$_POST[vid]' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $uri = $row["URI"]; + $filename = str_replace ("http://$sitehostname", "$websitepath", $uri); + if (file_exists($filename)) { +if ($row["Type"]=="T") {$type="themes";} else if ($row["Type"]=="E") {$type="extensions";} +$name = str_replace(" ","_",$row["Name"]); +$path = strtolower("$type/$name"); +//http://mozupdates.psychoticwolf.net/files/approval/chatzilla-0.9.63c-ff.xpi + $destination = str_replace("/files/approval",strtolower("/files/ftp/$path"),$filename); + +$dirpath = "$websitepath/files/ftp/$path"; +if (!file_exists($dirpath)) { +mkdir($dirpath,0775); +} +if (!file_exists($destination)) { +rename("$filename", "$destination"); +} + +$newurl = "http://ftp.mozilla.org/pub/mozilla.org"; +$uri = str_replace("$websitepath/files/ftp","$newurl","$destination"); +} + +//Thirdly, update version record... +$sql = "UPDATE `t_version` SET `URI`='$uri', `approved`='$approved' WHERE `ID`='$_POST[id]' AND `URI`='$row[URI]' LIMIT 5"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + +@include"mail_approval.php"; + +echo"Processing Request...
\n"; +echo"Approval Flag set to $action, for $_POST[name] $_POST[version]
\n"; +echo"E-Mail sent to requestee informing them of the action taken along with your comments
\n"; +echo"«« Return to Approval Queue"; +echo""; + +} +?> + + + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/categorymanager.php b/mozilla/webtools/update/developers/categorymanager.php new file mode 100755 index 00000000000..b38a6f471a8 --- /dev/null +++ b/mozilla/webtools/update/developers/categorymanager.php @@ -0,0 +1,189 @@ + + + + + + + + + +Mozilla Update :: Category Manager + + + + + + +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +} +?> + + + + + + + + + + + + +\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; +} + +?> +
Manage Category List:  Show: "; +if ($types[$type]) {$type = $types[$type]; } + echo"$type"; + echo" / \n"; + } + echo"All\n"; +?>
NameDescriptionType
$i$catname$catdesc$cattype
+
+MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + echo"
The category $_POST[catname] has been Successfully Added...
"; +} +?> +
+New Category + +Name: +Description:
+ +Type: +If other, Type: + +
+ + +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + echo"
Your update to $_POST[catname], has been submitted successfully...
"; + +} else if ($_POST["submit"] == "Delete Category") { + $sql = "DELETE FROM `t_categories` WHERE `CategoryID`='$_POST[categoryid]'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("
MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + echo"
You've successfully deleted the category '$_POST[catname]'...
"; +} + +if (!$categoryid) { $categoryid = $_POST["categoryid"]; } +// Show Edit Form + $sql = "SELECT * FROM `t_categories` WHERE `CategoryID` = '$categoryid' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("
MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + $row = mysql_fetch_array($sql_result); + $categoryid = $row["CategoryID"]; + $catname = $row["CatName"]; + $catdesc = $row["CatDesc"]; + $cattype = $row["CatType"]; +?> + +
+

Edit Category:

+
+
\n"; + echo"Description:
\n"; + echo"Type: \n"; + echo"
\n"; +?> + + + +
+«« Return to Category Manager +
+MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + +// echo"
The category $_POST[catname] has been Successfully Added...
"; +//} +?> + +//

Add New Category:

+//
+//Name:
+//Description:
+//Type:
+// +// +//
+?> + + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/faqmanager.php b/mozilla/webtools/update/developers/faqmanager.php new file mode 100755 index 00000000000..2fd634306fa --- /dev/null +++ b/mozilla/webtools/update/developers/faqmanager.php @@ -0,0 +1,174 @@ + + + + + + + + + + +MozUpdates :: Manage Application Versions + + + + + + + + + + + + + + + + + + + + +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + +//Create Customizeable Timestamp + $date = $row["lastupdated"]; + $day=substr($date,6,2); //get the day + $month=substr($date,4,2); //get the month + $year=substr($date,0,4); //get the year + $hour=substr($date,8,2); //get the hour + $minute=substr($date,10,2); //get the minute + $second=substr($date,12,2); //get the sec + $timestamp = strtotime("$year-$month-$day $hour:$minute:$second"); + $lastupdated = gmdate("F d, Y g:i:sa", $timestamp); + + $applications[] = $row["AppName"]; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + +} +?> +
Manage FAQs:
FAQ EntryUpdatedActive
".++$i." ".$row["title"]."$lastupdated$row[active]
+
+ +
+New FAQ Entry + Title: + +
+
+ +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + + echo"
Your update to $_POST[title], has been successful.
"; + + } else if ($_POST["submit"] == "Delete Entry") { + $sql = "DELETE FROM `t_faq` WHERE `id`='$_POST[id]'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("
MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + echo"
You've successfully deleted the application '$_POST[AppName]'.
"; +} + +if (!$id) { $id = $_POST["id"]; } +// Show Edit Form + $sql = "SELECT * FROM `t_faq` WHERE `id` = '$id' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("
MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); +?> + +
+

Edit FAQ Entry:

+
+\n"; + echo"Title:
\n"; + echo"Index:   "; + echo"Alias:
"; + echo"Entry Text:
"; +$active = $row["active"]; +if ($active=="YES") { + echo"Yes: / No: "; + } else if ($active=="NO") { + echo"Yes: / No: "; + } else { + echo"Yes: / No: "; + } +?> +
+ + + +
+«« Return to FAQ Manager +
+ +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + + echo"
The entry $_POST[title] has been successfully added.
"; + } +?> + +
+

Add FAQ Entry:

+
+
\n"; + echo"Index:   "; + echo"Alias:
"; + echo"Entry Text:
"; + echo"Yes: / No: "; +?> +
+ + + +
+«« Return to FAQ Manager +
+ + + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/inc_sidebar.php b/mozilla/webtools/update/developers/inc_sidebar.php new file mode 100755 index 00000000000..99a49cf387f --- /dev/null +++ b/mozilla/webtools/update/developers/inc_sidebar.php @@ -0,0 +1,31 @@ + +
+
diff --git a/mozilla/webtools/update/developers/index.php b/mozilla/webtools/update/developers/index.php new file mode 100755 index 00000000000..0834f698d7f --- /dev/null +++ b/mozilla/webtools/update/developers/index.php @@ -0,0 +1,56 @@ + + + + + +Mozilla Update :: Developer Control Panel + + +
+
+
+ +

About the Developer Control Panel

+ +
+
+

Developers Login

+ +You were not successfully logged in. Check your e-mail address and password and try again. + +You've been successfully logged out. + + + + + + + + + + + + + + +
E-Mail:
Password:
+ +
+ + + + diff --git a/mozilla/webtools/update/developers/itemoverview.php b/mozilla/webtools/update/developers/itemoverview.php new file mode 100755 index 00000000000..1d7c2489330 --- /dev/null +++ b/mozilla/webtools/update/developers/itemoverview.php @@ -0,0 +1,159 @@ + + + + +Mozilla Update :: Developer Control Panel :: Item Overview + + +
+

Item Overview ::

+Edit $name
\n"; +echo"$description
\n"; +if ($guid) {echo"GUID: $guid
\n"; } +if ($homepage) {echo"Homepage: $homepage
\n";} +echo"Categories: $categories
\n"; + +?> + +

Listed Versions

+"Pending Approval", "YES"=>"Approved", "NO"=>"Disabled"); +$sql = "SELECT vID, TV.Version, URI, OSName, approved FROM `t_version` TV +INNER JOIN t_os TOS ON TOS.OSID = TV.OSID +WHERE `ID`='$id' GROUP BY `URI` ORDER BY `Version`"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while($row = mysql_fetch_array($sql_result)) { + $vid = $row["vID"]; + $version = $row["Version"]; + $uri = $row["URI"]; + $filename = basename($row["URI"]); + $os = $row["OSName"]; + $approved = $row["approved"]; + $approved = $approved_array["$approved"]; + +echo"

Version $version - $approved

\n"; +echo"$filename - for $os
\n"; + + +$sql2 = "SELECT TV.Version, AppName, MinAppVer, MaxAppVer FROM `t_version` TV + INNER JOIN t_applications TA ON TA.AppID = TV.AppID + WHERE `ID`='$id' AND `URI`='$uri' ORDER BY TV.Version, TA.AppName"; + $sql_result2 = mysql_query($sql2, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while($row2 = mysql_fetch_array($sql_result2)) { + + $app = $row2["AppName"]; + $minappver = $row2["MinAppVer"]; + $maxappver = $row2["MaxAppVer"]; + + + echo"For $app:  $minappver - $maxappver
\n"; + + + } + + } +?> + + +
+
+

Statistics

+ Downloads this Week:
+ Total Downloads:
+
+ Rated: of 5
 
+
+ Comments:
 
+ +

Developer Comments

+\n"; } +} + +$sql = "SELECT `devcomments` FROM `t_main` WHERE `id`='$id' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $devcomments = $row["devcomments"]; + +?> +
"> +"> +
+  +
+ +

">Previews

+\"$caption\"
$caption\n"; + } + if (mysql_num_rows($sql_result)=="0") {echo"Add a Preview...
\n"; } +?> + + + +
+ + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/listmanager.php b/mozilla/webtools/update/developers/listmanager.php new file mode 100755 index 00000000000..079b0004a34 --- /dev/null +++ b/mozilla/webtools/update/developers/listmanager.php @@ -0,0 +1,579 @@ + + + + +Mozilla Update :: Developer Control Panel :: List Manager + + +"Extensions","T"=>"Themes"); +if (!$_GET["type"]) {$_GET["type"]="E";} +?> + +

Manage :

+" style="font-weight: bold;">Add New Item | Show: $typename) { +$i++; +echo"$typename"; +if ($i !== $count) {echo" / "; } + +} +unset($i); +?> + + + + + + + + + +\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; +} +?> +
NameDescriptionLast Updated
$i$name$description$dateupdated
+
+
+New + Input File: +"> + +
+
+"; + echo"

Updating $name, please wait...

"; +if ($_POST["name"] && $_POST["authors"] && $_POST["categories"] && $_POST["description"]) { +//Everything We *must* have is present... Begin.... + +//Phase One, update t_main values... + $sql = "UPDATE `t_main` SET `Name`= '$_POST[name]', `Homepage`='$_POST[homepage]', `Description`='$_POST[description]', `DateUpdated`=NOW(NULL) WHERE `ID`='$_POST[id]' LIMIT 1"; + //echo"$sql
\n"; //Debug + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +if ($sql_result) { + echo"Your update to $_POST[name] has been submitted successfully...
\n"; +} +echo""; + +//Phase Two, Author List -- Autocomplete and Verify + $authors = $_POST["authors"]; + $authors = explode(", ","$authors"); +foreach ($authors as $author) { +if (strlen($author)<2) {continue;} //Kills all values that're too short.. +$a++; + $sql = "SELECT `UserID`,`UserEmail` FROM `t_userprofiles` WHERE `UserEmail` LIKE '$author%' ORDER BY `UserMode`, `UserName` ASC"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $numresults = mysql_num_rows($sql_result); + while ($row = mysql_fetch_array($sql_result)) { + $userid = $row["UserID"]; + $useremail = $row["UserEmail"]; + if ($numresults>1) { + //Too many e-mails match, store individual data for error block. + $r++; + $emailerrors[$a]["foundemails"][$r] = $useremail; + } + $authorids[] = $userid; + } + if ($numresults !="1") { + //No Valid Entry Found for this E-Mail or too many, kill and store data for error block. + $emailerrors[$a]["author"] = "$author"; + $updateauthors = "false"; // Just takes one of these to kill the author update. + } +} +unset($a,$r); + +//Commit Updates to AuthorXref tables.. with the ID and UserID. +if ($updateauthors != "false") { + //Remove Current Authors + $sql = "DELETE FROM `t_authorxref` WHERE `ID` = '$_POST[id]'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + //Add New Authors based on $authorids + sort($authorids); + foreach ($authorids as $authorid) { + $sql = "INSERT INTO `t_authorxref` (`ID`, `UserID`) VALUES ('$_POST[id]', '$authorid');"; + $result = mysql_query($sql) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + } + echo"Authors for $_POST[name]'s updated...
\n"; +} else { + echo"ERROR: Could not update Authors list, please fix the errors printed below and try again...
\n"; +} + +unset($authors); //Clear from Post.. + +//Phase Three, Category List, update linkages. +//print_r($_POST["categories"]); + //Delete Current Category Linkages... + $sql = "DELETE FROM `t_categoryxref` WHERE `ID` = '$_POST[id]'"; + //echo"$sql
\n"; //Debug + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + //Add New Categories from $_POST["categories"] + foreach ($_POST["categories"] as $categoryid) { + $sql = "INSERT INTO `t_categoryxref` (`ID`, `CategoryID`) VALUES ('$_POST[id]', '$categoryid');"; + //echo"$sql
\n"; //Debug + $result = mysql_query($sql) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + } + echo"Categories for $_POST[name]'s updated...
\n"; + +//End _POST if. + +} else { +//Something Isnt Present.. Throw the main error and details... + +echo"You're missing one or more required fields, please return to the previous page and correct the errors and try again...
\n"; +if (!$_POST["name"]) {echo"Name is required
\n";} +if (!$_POST["authors"]) {echo"Authors is required
\n";} +if (!$_POST["categories"]) {echo"Categories is required
\n";} +if (!$_POST["description"]) {echo"Description is required
\n";} +} + +echo"
"; + + + +} else if ($_POST["submit"]=="Delete") { +$name = $_POST["name"]; +$id = $_POST["id"]; + +echo"

Deleting $name, please wait...

\n"; + $sql = "SELECT `Version`, `URI` FROM `t_version` WHERE `ID`='$id' GROUP BY `URI` ORDER BY `Version` ASC"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $version = $row["Version"]; + $uri = $row["URI"]; + + //Delete File(s) from server + if (strpos("$uri","approvalfile.php/")) { + $file = str_replace("http://$sitehostname/developers/approvalfile.php/","$repositorypath/approval/",$uri); + } else if (strpos("$uri","ftp.mozilla.org")) { + $ftppath = $uri; + $file = str_replace("http://ftp.mozilla.org/pub/mozilla.org/","$repositorypath/ftp/",$uri); + } + + if (file_exists($file)) { + $unlink = unlink($file); + } else { + $file_exists = "false"; + } + + if ($file_exists == "false" or !$unlink) { + echo"Error! Encountered a problem when trying to delete associated files, files were not deleted successfully
\n"; + } else { + echo"Deleted $name $version (".basename($uri).") successfully...
\n"; + } + + } + if ($ftppath) { + $basename = basename($ftppath); + $ftppath = str_replace("/$basename","",$ftppath); + $ftppath = str_replace("http://ftp.mozilla.org/pub/mozilla.org","$repositorypath/ftp",$ftppath); + if (@rmdir($ftppath)) { + echo"Removed Directory for $name...
\n"; + } else { + echo"Warning! Unable to remove directory for $name. Directory may not be empty.
\n"; + } + } + + $sql = "DELETE FROM `t_main` WHERE `ID`='$id'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + if ($sql_result) { + echo"$name has been deleted...
\n"; + echo"«« Back to Main Page...
\n"; + include"$page_footer"; + echo"\n\n"; + exit; + } +} + + +//---------------------- +// END +//---------------------- + + + +//Get Parent Item Information +$id = $_GET["id"]; +if (!$id) {$id = $_POST["id"]; } +$sql = "SELECT TM.ID, TM.Type, TM.GUID, TM.Name, TM.Description, TM.DateAdded, TM.DateUpdated, TM.Homepage, TU.UserEmail FROM `t_main` TM +LEFT JOIN t_authorxref TAX ON TM.ID = TAX.ID +INNER JOIN t_userprofiles TU ON TAX.UserID = TU.UserID +WHERE TM.ID = '$id' +ORDER BY `Type` , `Name` ASC "; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $v++; + $id = $row["ID"]; + $type = $row["Type"]; + $guid = $row["GUID"]; + $name = $row["Name"]; + $dateadded = date("l, F, j Y g:i:s",strtotime($row["DateAdded"])); + $dateupdated = date("l, F, j Y g:i:s",strtotime($row["DateUpdated"])); + $homepage = $row["Homepage"]; + $description = $row["Description"]; + $downloadcount = $row["DownloadCount"]; + $authors[$v] = $row["UserEmail"]; + } + unset($v); + +//Make Authors E-Mail Array into a Nice String +$num_authors = count($authors); +foreach($authors as $author) { +$v++; +$authorstring .= "$author"; +if ($v != $num_authors) { $authorstring .=", "; } +} +$authors = $authorstring; +unset($v); +?> +

+ +"> +"> + + + + + + + + + +\n"; +$authors = $_POST["authors"]; +} +?> + + + + + +
GUID:Categories:
    
Date Added:
Last Updated:
Name* " SIZE=50 MAXLENGTH=100>
\n"; +echo"
"; +echo"Errors Found in Authors
\n"; +echo"\n"; +foreach ($emailerrors as $authorerror) { +$author = $authorerror["author"]; +$count = count($authorerror["foundemails"]); + +if ($count=="0") { +//Error for No Entry Found +echo"Entry '$author': No Matches Found, Please check your entry and try again.
\n"; +} else { +//Error for Too Many Entries Found +echo"Entry '$author': Too Many Matches, Please make your entry more specific.
\n"; +} +if ($count>0 AND $count<6) { +echo"    Possible Addresses found: "; +foreach ($authorerror["foundemails"] as $foundemails) { +$a++; +echo"$foundemails"; + +if ($a != $count) {echo", "; } else {echo"
\n";} +} +} + +} +echo"
Author(s):*" SIZE=50>
Homepage " SIZE=50 MAXLENGTH=200>
Description*
    ? This action is not reversable and will remove all files and listed versions.');">
+   ">«« Back to Item Overview + +"; + echo"

Updating Version, please wait...

\n"; +//print_r($_POST); +//echo"

\n"; + +echo""; +//Phase One-Part 1 -- Version (per-file record update) +$notes = $_POST["notes"]; +$id = $_POST["id"]; +$uri = $_POST["uri"]; +$osid = $_POST["osid"]; + $sql = "UPDATE `t_version` SET `OSID`='$osid', `Notes`='$notes', `DateUpdated`=NOW(NULL) WHERE `ID`='$id' AND `URI`='$uri'"; + //echo"$sql
\n"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + echo"Version Notes and OS for $_POST[name] $_POST[version] updated...
\n"; + +//Phase Two -- Update Min/Max Versions + +//Construct Internal App_Version Arrays +$i=0; +$sql = "SELECT `int_version`, `major`, `minor`, `release`, `SubVer` FROM `t_applications` ORDER BY `AppName`, `major` DESC, `minor` DESC, `release` DESC, `SubVer` DESC"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $i++; + $int_version = $row["int_version"]; + $subver = $row["SubVer"]; + $release = "$row[major].$row[minor]"; + if ($row["release"]) {$release = "$release.$row[release]";} + if ($subver !=="final") {$release="$release$subver";} + $app_internal_array[$release] = $int_version; + } + +//print_r($app_internal_array); + +for ($i = 1; $i <= $_POST[maxval]; $i++) { +unset($minappver_int,$maxappver_int); +$minappver = $_POST["minappver_$i"]; +$maxappver = $_POST["maxappver_$i"]; +$vid = $_POST["appvid_$i"]; +if ($app_internal_array["$minappver"]) {$minappver_int = $app_internal_array["$minappver"]; } +if ($app_internal_array["$maxappver"]) {$maxappver_int = $app_internal_array["$maxappver"]; } +if (!$minappver_int) {$minappver_int = $minappver;} +if (!$maxappver_int) {$maxappver_int = $maxappver;} + +if ($minappver && $maxappver) { + $sql = "UPDATE `t_version` SET `MinAppVer`='$minappver', `MinAppVer_int`='$minappver_int', `MaxAppVer`='$maxappver', `MaxAppVer_int`='$maxappver_int' WHERE `vID`='$vid'"; + //echo"$sql
\n"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + echo"Updated Target Application Values for Application $i...
\n"; +} else { +if (!$minappver) { echo"Error: Minimum Version is not specified or invalid
\n"; } +if (!$maxappver) { echo"Error: Maximum Version is not specified or invalid
\n"; } +} +} + +echo"
"; + + + +} else if ($_POST["submit"]=="Delete") { +$id = $_POST["id"]; +$uri = $_POST["uri"]; +$version = $_POST["version"]; +echo"

Deleting Version... Please wait...

\n"; +$sql = "SELECT `Name` FROM `t_main` WHERE `ID` = '$id'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $name = $row["Name"]; + + $sql = "DELETE FROM `t_version` WHERE `ID`='$id' AND `URI`='$uri'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + if ($sql_result) { + //Delete File from server + if (strpos("$uri","approvalfile.php/")) { + $file = str_replace("http://$sitehostname/developers/approvalfile.php/","$repositorypath/approval/",$uri); + } else if (strpos("$uri","ftp.mozilla.org")) { + $file = str_replace("http://ftp.mozilla.org/pub/mozilla.org/","$repositorypath/ftp/",$uri); + } + + if (file_exists($file)) { + $unlink = unlink($file); + } else { + $file_exists = "false"; + } + + if ($file_exists == "false" or !$unlink) { + echo"Error! Encountered a problem when trying to delete associated files, files were not deleted successfully
\n"; + } + + echo"
$name $version has been deleted...
+ «« Back to the $name overview page...
"; + include"$page_footer"; + echo""; + exit; + } +} + + +//---------------------- +// END +//---------------------- + +//Get Parent Item Information +$id = $_GET["id"]; +if (!$id) {$id = $_POST["id"]; } +$sql = "SELECT TM.ID, TM.Name FROM `t_main` TM WHERE TM.ID = '$id' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $id = $row["ID"]; + $name = $row["Name"]; + + +//----------------------- +// Version Table +//----------------------- +$vid = $_GET["vid"]; +if (!$vid) {$vid = $_POST["vid"]; } +//Get Data for Form Population +//INNER JOIN t_main TM ON TV.ID = TM.ID + $sql = "SELECT `Version`, TV.OSID, `OSName`,`URI`,`Notes`,`Size`,`DateAdded`, `DateUpdated` FROM `t_version` TV INNER JOIN `t_os` TOS ON TOS.OSID=TV.OSID WHERE `vID` = '$vid' ORDER BY `Version` ASC LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $v++; + $version=$row["Version"]; + $osid=$row["OSID"]; + $osname=$row["OSName"]; + $minappver=$row["MinAppVer"]; + $maxappver=$row["MaxAppVer"]; + $uri=$row["URI"]; + $filename=basename($row["URI"]); + $notes=$row["Notes"]; + $size=$row["Size"]; + +?> +

+ +"> +\n"; + echo"\n"; + echo"\n"; + echo"\n"; + + + +//Construct App_Versions Arrays +$i=0; +$sql = "SELECT `AppName`, `Version`, `major`, `minor`, `release`, `SubVer` FROM `t_applications` ORDER BY `AppName`, `major` DESC, `minor` DESC, `release` DESC, `SubVer` DESC"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $i++; + $application = strtolower($row["AppName"]); + $display_version = $row["Version"]; + $subver = $row["SubVer"]; + $release = "$row[major].$row[minor]"; + if ($row["release"]) {$release = "$release.$row[release]";} + if ($subver !=="final") {$release="$release$subver";} + $app_ver_array[$application][] = $release; + $app_display_array[$application][$release] = $display_version; + } + +$i=0; +echo"\n"; + $sql = "SELECT vID, TV.AppID,`AppName`,`MinAppVer`,`MaxAppVer` FROM `t_version` TV INNER JOIN `t_applications` TA ON TA.AppID=TV.AppID WHERE `ID` = '$id' && TV.URI = '$uri' ORDER BY `AppName` ASC"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + while ($row = mysql_fetch_array($sql_result)) { + $i++; + $appname = $row["AppName"]; + $appid=$row["AppID"]; + $minappver=$row["MinAppVer"]; + $maxappver=$row["MaxAppVer"]; + + echo"\n"; + +} + echo""; + echo"\n"; + echo"\n"; +?> + + + + +
$filename ($size"."kb)
Target Application(s):
$appname "; + echo""; + echo"\n"; + echo" - "; + + echo"\n"; + echo"
OS*"; + echo"\n"; + echo"
Version Notes:
    ?');">
+   ">«« Back to Item Overview + + + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/login.php b/mozilla/webtools/update/developers/login.php new file mode 100755 index 00000000000..d332bf788ee --- /dev/null +++ b/mozilla/webtools/update/developers/login.php @@ -0,0 +1,44 @@ +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $num = mysql_num_rows($sql_result); + +if ($num == 1) { + +$row = mysql_fetch_array($sql_result); + +$userid=$row["UserID"]; +$useremail=$row["UserEmail"]; +$username=$row["UserName"]; +$usermode=$row["UserMode"]; +$usertrusted=$row["UserTrusted"]; +$logoncheck="YES"; + +//User Role to Session Level variable... +$rolearray = array("A"=>"admin", "E"=>"editor","U"=>"user"); +$usermode = $rolearray[$usermode]; + +//Register Session Variables +$_SESSION["uid"] = "$userid"; +$_SESSION["email"] = "$useremail"; +$_SESSION["name"] = "$username"; +$_SESSION["level"] = "$usermode"; +$_SESSION["trusted"] = "$usertrusted"; +$_SESSION["logoncheck"] = "$logoncheck"; + +$return_path="developers/main.php"; + +header("Location: http://$_SERVER[HTTP_HOST]/$return_path"); +exit; + + +} else { +$return_path ="developers/index.php?login=failed"; +header("Location: http://$_SERVER[HTTP_HOST]/$return_path"); +exit; +} +?> \ No newline at end of file diff --git a/mozilla/webtools/update/developers/logout.php b/mozilla/webtools/update/developers/logout.php new file mode 100755 index 00000000000..ddc895aa4cc --- /dev/null +++ b/mozilla/webtools/update/developers/logout.php @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/main.php b/mozilla/webtools/update/developers/main.php new file mode 100755 index 00000000000..02d086d20d1 --- /dev/null +++ b/mozilla/webtools/update/developers/main.php @@ -0,0 +1,110 @@ + + + + +Mozilla Update :: Developer Control Panel :: Overview + +

Welcome !

+ +

+ +Approval Queue Status: Pending Approval + + +

My Extensions

+ +$name\n"; +echo"$description\n"; +//Icon Bar +echo"
"; +echo""; +echo"
\"\"Downloads: $downloadcount
  $totaldownloads total
"; +echo""; +echo"
"; + +} +?> +    Add New Extension... +

+

+ +

My Themes

+$name\n"; +echo"$description\n"; +//Icon Bar +echo"
"; +echo""; +echo"
\"\"Downloads: $downloadcount
  $totaldownloads total
"; +echo""; +echo"
"; + + +} +?> +    Add New Theme... + +

+ + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/osmanager.php b/mozilla/webtools/update/developers/osmanager.php new file mode 100755 index 00000000000..7d7b189b8ac --- /dev/null +++ b/mozilla/webtools/update/developers/osmanager.php @@ -0,0 +1,153 @@ + + + + + + + + + + +MozUpdates :: Manage Operating Systems + + + + + + +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + } +?> + + + + + + + + + + +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + + while ($row = mysql_fetch_array($sql_result)) { + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + } +?> + +
Manage OS List:
Name
".++$i."".$row["OSName"]."
+
+MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + echo"
The OS $_POST[osname] has been successfully added.
"; + } +?> +
+Add New OS: + +Name: + +
+ +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + + + echo"
Your update to $_POST[osname], has been successful.
"; + + } else if ($_POST["submit"] == "Delete OS") { + $sql = "DELETE FROM `t_os` WHERE `OSID`='$_POST[osid]'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("
MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + echo"
You've successfully deleted the operating system '$_POST[osname]'.
"; +} + +if (!$osid) { $osid = $_POST["osid"]; } +// Show Edit Form + $sql = "SELECT * FROM `t_os` WHERE `OSID` = '$osid' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("
MySQL Error ".mysql_errno().": ".mysql_error()."
", E_USER_NOTICE); + + + $row = mysql_fetch_array($sql_result); +?> + +
+

Edit OS:

+
+\n"; + echo"
\n"; +?> + + + + +
+«« Return to OS Manager +
+ +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +// + +// echo"
The OS $_POST[osname] has been successfully added.
"; +// } +?> + +//

Add New Operating System:

+//
+//Name:
+// +// +//
+// +?> + + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/previews.php b/mozilla/webtools/update/developers/previews.php new file mode 100755 index 00000000000..387d9e310c5 --- /dev/null +++ b/mozilla/webtools/update/developers/previews.php @@ -0,0 +1,255 @@ + + + + +Mozilla Update :: Developer Control Panel :: Item Previews + + + +

Item Previews ::

+\n"; + +} + + +unset($i); +$sql = "SELECT * FROM `t_previews` TP WHERE `ID`='$id' ORDER BY `PreviewID`"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $num_results = mysql_num_rows($sql_result); + +if ($num_results>"0") { +?> +
&function=updatepreviews"> +$dest_height_fixed) { + $dest_height = $dest_height_fixed; + $dest_width = ($src_width * $dest_height) / $src_height; + } + } + +echo"

Preview #$i - $caption

\n"; +echo"$filename ($src_width x $src_height) $filesize"."Kb"; if ($preview=="YES") {echo" (List Page Preview)";}echo"
\n"; +if ($nopopup != "true") {echo"";} +echo"\"$caption\""; +if ($nopopup != "true") {echo"";} +echo"
\n"; +echo"\n"; +echo"Edit Caption: "; +if ($preview == "YES" OR ( $src_width<="175" AND $src_height <="80")) { +echo"  List Page Preview?
\n"; +} else { echo"
\n"; } +echo"Delete File?
\n"; +} +?> +"0") { ?> +"> +
+
+ + +

Add Preview

+$dest_height_fixed) { +$dest_height = $dest_height_fixed; +$dest_width = ($src_width * $dest_height) / $src_height; +} +$quality="80"; // JPEG Image Quality +$outputpath="$websitepath/$previewpath"; //path of output image ;-) + +if ($type=="2") { +$src_img = imagecreatefromjpeg("$sourcepath"); +} else if ($type=="3") { +$src_img = imagecreatefrompng("$sourcepath"); +$quality="95"; +} +$dst_img = imagecreatetruecolor($dest_width,$dest_height); +imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dest_width, $dest_height, $src_width, $src_height); +imageinterlace($dst_img, 1); +$white = ImageColorAllocate($dst_img, 255, 255, 255); +//Make a couple of size corrections for the auto-border feature.. +$dest_width = $dest_width-1; +$dest_height = $dest_height-1; +imagerectangle ($dst_img, 0, 0, $dest_width, $dest_height, $white); +$status = imagejpeg($dst_img, "$outputpath", $quality); +imagedestroy($src_img); +imagedestroy($dst_img); + +if ($status=="1") { +//Lets attempt to add the record to the DB. +$sql = "INSERT INTO `t_previews` (`PreviewURI`,`ID`,`caption`,`preview`) VALUES ('/$previewpath','$id','$caption','$preview');"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + +if ($sql_result=="1") { +echo"Your File $filename ($filesize bytes) has been successfully uploaded and added to the database. Click here to refresh this page to show the added entry for editing.

"; +} + +} +} else { +echo"The image you uploaded has errors and could not be processed successfully. The image may be corrupt or not in the correct format. This tool only supports jpeg and png images. Please try your operation again.

\n"; + +} + +} + +?> + +
&function=addpreview" enctype="multipart/form-data"> +Only PNG or JPG images are supported for addition to the preview screenshots page for your item. Check the "List Page Preview" box +if you'd like the image to be featured on the list and the top of the item details pages. To just have it added to your screenshots +page, leave the box unchecked
+ List Page Preview?
+ +Image Width: x Height:
+Leave Width and Height at 0 for full-size. This setting is ignored for preview images, which have strict size requirements.

+ +Image Caption:
+ + +
+ + + \ No newline at end of file diff --git a/mozilla/webtools/update/developers/usermanager.php b/mozilla/webtools/update/developers/usermanager.php new file mode 100755 index 00000000000..5661ab976a5 --- /dev/null +++ b/mozilla/webtools/update/developers/usermanager.php @@ -0,0 +1,396 @@ + + + + + + +MozUpdates :: Manage Users + + + + + + + +
+\n"; + +if ($admin=="TRUE") { $mode="A"; +} else if ($editor=="TRUE") { $mode="E"; +} else if ($disabled=="TRUE") {$mode="D"; +} else { $mode="U"; } + +if ($trusted !=="TRUE") {$trusted="FALSE"; } + +$sql = "UPDATE `t_userprofiles` SET `UserMode`= '$mode', `UserTrusted`= '$trusted' WHERE `UserID`='$i'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + +} +unset($i); + +echo"Your changes to the User List have been succesfully completed
"; + +//Do Special Disable, Delete, Enable Account Operations +if ($_POST["selected"] AND $_POST["submit"] !=="Update") { +//$selected = $_POST["selected"]; + +if ($_POST["submit"]=="Disable Selected") { +$sql = "UPDATE `t_userprofiles` SET `UserMode`= 'D' WHERE `UserID`='$_POST[selected]'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +echo"User Account for User Number $_POST[selected] Disabled
\n"; + +} else if ($_POST["submit"]=="Delete Selected") { +$sql = "DELETE FROM `t_userprofiles` WHERE `UserID`='$_POST[selected]' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +echo"User Account for User Number $_POST[selected] Deleted
\n"; + +} else if ($_POST["submit"]=="Enable Selected") { +$sql = "UPDATE `t_userprofiles` SET `UserMode`= 'U' WHERE `UserID`='$_POST[selected]'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); +echo"User Account for User Number $_POST[selected] Enabled, User Mode set to User
\n"; +} + +} + +echo"
\n"; +} +?> + + + + + + + + + + + + +$maxuserid) {$maxuserid =$userid;} + +if ($usermode=="A") {$a="TRUE"; $e="TRUE"; +} else if ($usermode=="E") {$e="TRUE"; $a="FALSE"; +} else if ($usermode=="U") {$e="FALSE"; $a="FALSE"; +} else if ($usermode=="D") {$d="TRUE";} + $i++; + echo""; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + + unset($a,$e,$t); +} + +echo""; + +?> + + + + +
Manage User List:
NameE-Mail AddressS E A T
$i  $username  $useremail"; + echo""; + echo""; + echo""; + if ($d=="TRUE") {echo"\n"; } + echo"
+ + + + +
+
+ +
+New User + E-Mail: + +
+
+ +MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + echo"
Your update to $_POST[username], has been submitted successfully...
"; + +} else if ($_POST["submit"] == "Delete User") { +if ($_SESSION["level"] !=="admin" && $_SESSION["uid"] !== $_POST["userid"]) {$_POST["userid"]=$_SESSION["uid"];} + $sql = "DELETE FROM `t_userprofiles` WHERE `UserID`='$_POST[userid]'"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + echo"
You've successfully deleted $_POST[username]...
"; +} + +if (!$userid) {$userid=$_POST["userid"];} + +//Show Edit Form + $sql = "SELECT * FROM `t_userprofiles` WHERE `UserID` = '$userid' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $userid = $row["UserID"]; + $username = $row["UserName"]; + $useremail = $row["UserEmail"]; + $userwebsite = $row["UserWebsite"]; + $userpass = $row["UserPass"]; + $usermode = $row["UserMode"]; + $trusted = $row["UserTrusted"]; + $useremailhide = $row["UserEmailHide"]; +?> + + + + +\n"; + echo"\n"; + echo"\n"; + echo"\n"; + echo"\n"; + + echo"\n"; + + echo"\n"; +?> + + + + + +
Edit Profile for :
Name:
E-Mail:
Website:
Password:Change Password
Permissions:"; +if ($_SESSION["level"]=="user" or $_SESSION[level]=="editor") { + if ($usermode=="U") {echo"User \n"; //To prevent being reset to null on submit. + } else if ($usermode=="E") { + echo"Editor \n"; + } else { + echo"Unknown \n"; + } + +if ($trusted=="TRUE") { + echo"Trusted \n"; +} + +} else if ($_SESSION["level"]=="admin") { + +if ($usermode=="A") {$a="TRUE"; $e="TRUE"; +} else if ($usermode=="E") {$e="TRUE"; $a="FALSE"; +} else if ($usermode=="U") {$e="FALSE"; $a="FALSE"; +} + + echo"Editor: \n "; + echo"Admin: \n "; + echo"Trusted: \n"; +} + echo"
E-Mail Public:"; + if ($useremailhide==="1") { + echo"Hidden: Visible: "; + } else if ($useremailhide==="0") { + echo"Hidden: Visible: "; + } else { + echo"Hidden: Visible: "; + } + echo"
    
«« Return to User Manager
+ +Your two passwords did not match, go back and try again..."; + } + + //Add User to MySQL Table +if ($errors !="true") { + $_POST["username"] = htmlspecialchars($_POST["username"]); + +$admin = $_POST["admin"]; +$editor = $_POST["editor"]; +$trusted = $_POST["trusted"]; +$disabled = $_POST["disabled"]; +//echo"$i - $admin - $editor - $trusted
\n"; + +if ($admin=="TRUE") { $mode="A"; +} else if ($editor=="TRUE") { $mode="E"; +} else if ($disabled=="TRUE") {$mode="D"; +} else { $mode="U"; } + +if ($trusted !=="TRUE") {$trusted="FALSE"; } + + + $sql = "INSERT INTO `t_userprofiles` (`UserName`, `UserEmail`, `UserWebsite`, `UserPass`, `UserMode`, `UserTrusted`, `UserEmailHide`) VALUES ('$_POST[username]', '$_POST[useremail]', '$_POST[userwebsite]', '$_POST[userpass]', '$mode', '$trusted', '$_POST[useremailhide]');"; + $result = mysql_query($sql) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + //include"mail_sendaccountdetails.php"; + echo"
The user $_POST[username] has been Successfully Added...
"; +} + +} +?> + + + + + + + + + + + + + + +
Add New User:
E-Mail:" SIZE=30 MAXLENGTH=100>
Name:
Website:
Password:
Confirm:  
Permissions:Editor: Admin: Trusted:
E-Mail Public:Hidden: Visible:
  
«« Return to User Manager
+ +"; + $sql = "SELECT `UserPass` FROM `t_userprofiles` WHERE `UserID` = '$_POST[userid]' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $userpass = $row["UserPass"]; + $oldpass = md5($_POST[oldpass]); + +if ($_SESSION["level"]=="admin") {$oldpass=$userpass; } //Bypass Old Password check for Admins only + if ($userpass==$oldpass) { + + if ($_POST[newpass]==$_POST[newpass2]) { + $userpass = md5($_POST["newpass"]); + $sql = "UPDATE `t_userprofiles` SET `UserPass`='$userpass' WHERE `UserID`='$_POST[userid]'"; + //echo"$sql\n
"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + echo"The password has been successfully reset.
"; + + } else { + echo"The two passwords did not match, please go back and try again."; + } + + + } else { + echo"Your Old password did not match the password on file, please try again."; + + } + echo"\n"; + +} + +if (!$userid) { $userid = $_POST["userid"]; } +//Get Name of User for Form + $sql = "SELECT `UserName` FROM `t_userprofiles` WHERE `UserID` = '$userid' LIMIT 1"; + $sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE); + $row = mysql_fetch_array($sql_result); + $username = $row["UserName"]; +?> + + + + "> + + + + + + + + +
Change password for :
Old Password:
New Password:
Retype New Password:   
  
«« Return to User Manager
+ + + + + \ No newline at end of file diff --git a/mozilla/webtools/update/images/body_back.gif b/mozilla/webtools/update/images/body_back.gif new file mode 100755 index 0000000000000000000000000000000000000000..72a0d3ee6aa3df255245125b5fdca9287640951c GIT binary patch literal 526 zcmV+p0`dJvNk%w1VI}}u0K@+9<3>gnm}=;-L@=jZ0;=H=z( z|Ns900000000000A^8LW000~SEC2ui044xi000I5;3ke_X`X1Ru59bRa4gSSZQppV z?|kq7z#uO}EEin3mE$jQpf%+1ct4$;!n)YaD4(GA+$+}+;a z;Njxq;tb~J=;`X~?CtLF?hEqs^!4`l`1$(#`U?L400RmfNU)&6g9Z~QT*$DY!-o(f zN}MPWfyIj$Giuz(v7^V29uJ5dNwTELlPFV*s$9vkrOT8CV#=IJv!>0PICJXES)ixS zpFo2O9ZIyQ(V_&BDqYI7sne%Wqe`7hwJOvBShH%~%C)Q4uVBN99ZUABfU{`Rs$I*r zt=qS7(BTJr4xw7TUm@{kM Q%(=7Y&!9t#P8WdKukZXhu-AX8;^(C(_w*asLcrK*qdva< znD6+#_r3Rf-=8;L!Py|ybWr)T3?&T z6C~}h**bfMUOHYVt_@Ao2`pJ+)3PiSPO$SadS)(is5(bHC>xvZ>GO2-&$xZWuYUc9 z>0tOq>yW5aSdb6zQlE_qqjAB{32&U~Se#t#z=}xJzjxD`o2OPQi6pI1C{*e+3Fbyv z^_DH$%6T42;3S5T3=qcZvFA#dG{(ZC6mb>0D7mlZlcR!ev!gTHK1D6|b-tX!8`7d5c zg{QS+cwUxYoGX#5!I;faplcAZHX}>&ueLA7ebL#uL_THWcA*E)TCFb4Xd(y_!}0sQBd1>8B_2YfRya4Lzj^wz9i@3d#o|_) zhbRb!P{g7^^%_o!@F)x=u*CA&-nsa|Rg{yY=wy=GwK|r{8;j!WRMn zusMbK(F@gXZ(w42cG5T3((Y;ewB5O};?(c{7{QqDe*cGW{i#0BUN}D&Ssk}m-@I8K3lj>-h80XuPj~ps3hYUg}tZsVcQZVi+Ks zyRdtEQQ_`T-l=D)vt`t{%bCNLXc%AFLZrfMTaGxlPay{JrvN?tzklO0<( zHC#EHo10eu&hH&XX0?=EBd=e5yJPG23Yh}Q&x8;ZLSOH$$YkTwQ?cSF5aYI^~(~)g5 z83bP7cmbq0&+!WnK)}pGFa8r}7U%VPoi#I)Va1Y7GYq&hG)?1p((NAIR-`+yZ}YO5 z6DKbo+`nC~Q!VKdwQ$S29@frt!hg&djK*}9TdW9dG>*Bw)1go_Geb*Zu~WZ1yc{%F zp#_V_+j=}&t-9DLUiekUmR(seuw;zpgai{E_RXURlx5cDSPVvkHapWnGi*n{erc%juT7_OC*DFzt4Av?{ZfFoI zP6AM%#E7+uVSxeAGc@B5hED!$*9tQZ=lV>eXV^P$$SEtN;&wB3Weh}wYyDb3qf%hMx4KJAruPd<=J-C)PkLT5BiBD1swHGhL-B)8fFgd zD{X3Ph^4DQI*HzhJ^^Mq?^MW~uATIUq*9qiXTp>0ty{PH`ub&ZIrzws%M~Qe`h9_q zuUrLTsI1yKfrKczoL=zCV*aHof)s=^zIxLsVKpLLCaPRm|Yk8^tab|$L{lQ%VHl&-) z;(bBEt&tiu(i{^4!w|3}fm01eQay}9U&|G{KmSx!w!@M872Yh$*@n+YLP*8d zjdBHoN+GQRN>f4zA}R$vA`u(lY&w7qc_Xn%!kHm+SXFtpoJSSn$Gr&Lp2@)}d^*Cw xa+&CqRANv{^=d>fm*{1@?a@mAH#7f7`8Rxl-WAjMWN`oh002ovPDHLkV1kh=YBvA? literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/download_back.gif b/mozilla/webtools/update/images/download_back.gif new file mode 100755 index 0000000000000000000000000000000000000000..edd1a15cf94d42473d0e96967cded228c254e20e GIT binary patch literal 4156 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 literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/download_br.gif b/mozilla/webtools/update/images/download_br.gif new file mode 100755 index 0000000000000000000000000000000000000000..318d0840649c548e4bcdafc4a88744644c80477f GIT binary patch literal 386 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

f+*$HW7=pKlnyo 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 Hu0mjfb@#oJ literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/front-shop.gif b/mozilla/webtools/update/images/front-shop.gif new file mode 100755 index 0000000000000000000000000000000000000000..9ceba7185a19b8407d00448fdfcf43300efa5521 GIT binary patch literal 1548 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 F0|42zn%4jT literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/header_logo.gif b/mozilla/webtools/update/images/header_logo.gif new file mode 100755 index 0000000000000000000000000000000000000000..a2a2b1da206efc5c60b3fd3a68230bfadd46c3aa GIT binary patch literal 4180 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 G*#1Apm?J&_ literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/header_tab.gif b/mozilla/webtools/update/images/header_tab.gif new file mode 100755 index 0000000000000000000000000000000000000000..3d2a2e1c92dd971f4df3aaa05341c401ebeb997d GIT binary patch literal 4296 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 aJ4#3(3rS*OZoe>pSx7My1?<|WW%FO9T*89@ literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/header_tl.gif b/mozilla/webtools/update/images/header_tl.gif new file mode 100755 index 0000000000000000000000000000000000000000..3a43c715ba8116af81c308d89d6a3f7344cf047f GIT binary patch literal 836 zcmV-K1H1f3Nk%w1VFv&S0QUd@00030|Ns9Q02Ub^EFd8R0t5W}{JOcixVN|g0Rj>d z6GKBqA|fM2MMmlA>u_*!VPRtX`~30o^6&5P?d|Tgw6%hQgRrr-<>u-P4;Ky*84nT~ z$;{Nj#LVO5=MNJdD>Oj(midhmN0?ovx#$swgy0DmGCYBQz&6OBf$63l0?; zAu$#lDKb7;DKkkPB{dx+Gb}buFF8*vG)6>FYe`jbRbY5xZG~fOfo*qZb&6_qiE(&_aCLvZ z!O6?d*LQh+$I8&%-{ZTyzO%Hp^7HlS>g>_d)C&(58zV9!EkG3;CJquA5EdW_3=x%_ zsFIhTVr6Q!xxOADC1q`Q1qKHvC@DusNqc;Kh>42gPf$=rMn;;OoBRCx@9^*K z?(O{i`@q1z1_1#79sm#m0RJ2S{~G}P902_r0QwvN`WpcE8vyki0P-6E?-~H=835!N z0O1$_-WUMd7XZ^20MHfy$`t^^6#%>x0J9VTtP=pF5&)bL0G1E{jSm2c4*-M?0DBDp zbPND&3jkyb09^_IRS5u62mnqA07?e{MhE~u2LLw)04@apC{QLX+`1ttu_xJVn z_44xa@$vER@9*yJ?(OaE>+9?4>gws~>F4L?<>lq#;^NE8%f!UQyu7@-ySuu&y12Nw zx3{;mv$L_Wv9GVMtgNi5si~%>rjnA9cXxMnb#-cLYEDj0M@L6QL_|YFLqI@4G&D3F z9UTr14*&oEA^8LW00930EC2ui00#gG000Of04E46ljO%gfgS!S{KqZf!hdBRDoi5r OpFxQ@Dr(di5CA(g`cppu literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/header_tr.gif b/mozilla/webtools/update/images/header_tr.gif new file mode 100755 index 0000000000000000000000000000000000000000..7e30f7bc6447ae9e4d765c581ea06d076db7b770 GIT binary patch literal 466 zcmZ?wbhEHbWM>d%c*Xz%|NsAg`t;epefwnGxO`CW0R-PoIh*!yxVu~tLWIP={ac_xT@+pC~8=$>pQFK zJ82txXd1d|7&vPgx#?T@>6mzG8oKD3dTANC>X>-wnR)A)dg`0|7+CnqD(T56Xvrz* z%w4!zMaNFl$W6=GU0vT%$JA3<%SzYG%fQl4&)i$z!be`!$iULq(8^C%Nmou8s7q5> z$6iI(L0QL6RnJjH*IrHENmb85!_Y;?%uCbARoC2G%h*jHsNKRx+r(Yp(pSgSLq<_s zPFXi1GFsixMa#rp8ziD7r)nsxtScq2zGwdtaY>n(vu5AEb9dkV15chl{rCX{fT08q zEh-a=KUo+V7?K%uK<0wtgn?bZ!A3}5EU7KIBRRUgvn#Q;BW^;n$Yi$30+a0~^Uj*g XGg)WO;t2~T%w9fk!rYb18yTzty|QpV literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/key-point_back.gif b/mozilla/webtools/update/images/key-point_back.gif new file mode 100755 index 0000000000000000000000000000000000000000..979a984b4e59b505d8e82de426f0e20e5f580d1a GIT binary patch literal 94 zcmZ?wbhEHb+|z`(+w1LA@wN& n&eSrsW_qf}_D`bMdc`!Sy;zy0HhY)$_fsFQU)nH@fx#L8&r%|1 literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/key-point_bl.gif b/mozilla/webtools/update/images/key-point_bl.gif new file mode 100755 index 0000000000000000000000000000000000000000..fe6f825706ff766e7bd159b13769edb3555a1228 GIT binary patch literal 102 zcmZ?wbhEHbVPCbW-zb_3!L=SmJ*v-QzQ`fAvCE#pt;e7!5RQ4DPEC2ui0MG{r000I5U?z@aX`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEE41ejE#VPCbW-zdb7@Tlsa|*g6`(@wp?ShX|r@F0-6J)Rk0B1}jd;kCd literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/key-point_tr.gif b/mozilla/webtools/update/images/key-point_tr.gif new file mode 100755 index 0000000000000000000000000000000000000000..8ce240790e8a95ae5d86b1932a75c28c059d6cfd GIT binary patch literal 107 zcmZ?wbhEHbIv|}OGZb%7 literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/menu_back.gif b/mozilla/webtools/update/images/menu_back.gif new file mode 100755 index 0000000000000000000000000000000000000000..0afde1efd3a690417b9afe239a57303f2284bed9 GIT binary patch literal 94 zcmZ?wbhEHb+|z`(+w1LA{8kD n&eSrsW_qf}_D`bMdc`!Sy;zy0HhY)$_fsFQU)nH@fx#L8yU-#W literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/menu_br.gif b/mozilla/webtools/update/images/menu_br.gif new file mode 100755 index 0000000000000000000000000000000000000000..d88a5a84fbcf53c18bdebf772c820a7daf31dd0c GIT binary patch literal 384 zcmZ?wbhEHbyui-EaD)K_{{R1f=jqey4<1~*fB*cA8|SWHfAI3<{TDAT-MV$^(xnp@ zE*w99{@A&5N6((U^W@2;n>TMgcyRUBtru_JJbn4{{l||#fBgcQ05%B=q4<-9k%2*+ zK?fuUvXg=J?*qlYl+1Y)qi41(a9XE`4?7{ zc&&|Ee`8JA>9R=VoTN8yxsRd?5OcufBXH9J$3dq4nGNRWEt>3V5)8;K(w{72{ z#KI-EbKm|02M--Sa`f2o6DKQJxJ4OHUATDZ@|COCuHU$MtB8q(jrSZQ&*LXgpFMx^ z^404%Z{NND@bS~~S4{byk2lJVHE;9xU{uvW~84GRyq3n+Wd@z}WN bXt#uM)}0d@7a#BEl=WDUpxAIyfWaC7Q*_pm literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/menu_tr.gif b/mozilla/webtools/update/images/menu_tr.gif new file mode 100755 index 0000000000000000000000000000000000000000..0ceb90eea5ffadb22fb99afefc3d6e6f12258748 GIT binary patch literal 107 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 YYYvVfr8Mc&yZ`_I07*qoM6N<$f@x2m-T(jq literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/product-front-thunderbird.png b/mozilla/webtools/update/images/product-front-thunderbird.png new file mode 100755 index 0000000000000000000000000000000000000000..85b122d130c7ebb897ac270c92338759991c2606 GIT binary patch literal 7376 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 V`kB8r3g`d;002ovPDHLkV1gtT-v|Hz literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/rss.png b/mozilla/webtools/update/images/rss.png new file mode 100755 index 0000000000000000000000000000000000000000..382946ace7b6ae1864b1c6d003e02c139245be31 GIT binary patch literal 1140 zcmV-)1dIELP)(ja3-7A8H6Vq`*8X3^5ZB%pI^tRdnjifD#w&sC9MB-7m>${$Z}lnWFC5v zgHGg0<7h7rnN~;FfV9lPP{gB1AcW%ysXnz}qZ1I3^8A93aYGpp1h#~UjX&AykV!gBy#V5XiwbZ6y zGGVbxub?<~ADW#iA>-m38X5{V4o)Q1es(5|;g7m7_+ghaHZ*^X`FIwxuLA`{c4g=y zI^R4AL1%*Y*avtNmyvwdj{+ha?tULV9e!vC6I*(aOs4aOGcLj9a*4RM<^D-l9){60 z*Nxd2aBuQBTvc97FUasvFzc8BcfUe&avB%Ta43Jufy%WE9JNi#-n~mBFhu^qa3=?& zNkU^fi{cz1;}V=sXW@);Kg>my(OKyQfBFYVg%S)74{m%NfQ$PVOVhu@QhgZ5hi+nR zVFu=3uOe}E041w&+zbxjnGo{bPuwbVz;HhM{*_aqGq? z^maGOUwRAHfm?_!QG_kTlyevtFG-SCji1dcz5UB5`VVmEtX0!QTj|4M0&w?^pt0VI z)P-jB)JgbrVjQAD!b7tMb%P^lZtx=BegyATNtmNJ5C~h|VJBzQcVt|GUa!|akxwKP z>3IEVU}-Ie`;+5v(i@Hup=9&I?)E{u62`$q6h?;w@n{rNckbYT-HQs34?=hx)n*4Q zb_Z4oi_Ou4?X##iM_jy?WHXt!CN@w)#ZFw0DpN+23Ey|ODFkJwE~3mIz~V|2!LzMs zGQ|)&--Z~&+5@nh?80m~jQ*E>a2qyj2jdb*v>SzF@4@|e&BlRp9iP+#h2&}9t4Hu4 z4s=lJ)lUcUX?+kAWP^tG95Mqf6=WDifp0R1!P+1u>ABecLnXi)6&mPl)_htpEpvgE9b`Y=9(<^%PVS>GA^aG z*$%((UFh<)7q_!`GY-bZWwTidBOIkxyv@HS=H~VP1Q-D227;!Ha)W390000RpaChvf8>dOFOZLOt&kI_T+1c%HD$j+o;%+t{2+ zsgw#snDhA*Z44X3%vpJy^XdKlFTVE=_x;25x?ZpAbzj$Y&cn^dHV7$;lwAY-Z+3Tg z#dC8~sg&E_|L^km)%j(~)bx~ia$G3-zO*tan3$cKotMs!4v+ra{<%26D3wUXEkx_^bZX6_Ve00dYfCj z>KeNmT6#OW2OHbIHn;b8_wo7%_=7ybjC5{HI6gY|i#Ybaj9bO+EdSEl($U}4*88cd zx%Vr-thTeQ>ucvP!qCXqL4HG9AGf7vfG6l59Ljm~<;}-mbpEzORFl8R_KI^n`d)G(IsV6n$*y9~IA3ckrYO%iVloMNR#eUqbmKlhS#C zNIX5aFvuTj?d%#D7Sy-4jZIGR$Ane&4P%m-57l2fdHnv-u~z<2zi9kRcXvv5cF*{D zw@B1EHr6H(H1l{(-@Y{r4Ak}YaoXDY#o~|k^=~RGGuZ4Nq3~5%Sz&1@v#5wxP%tn# z*(Va^zJ2?3VxmhR;7?6`8z1lG^T(yq$+@|XzP=HmkUu=Uyt1;iyu7fuIKQwkyRtmH zwD@Cv?cbfPrM1<$h55O;S*dhJIwM(}pZ~eDGdDZ?^XIR-v%S5&va&Mw3!a^wnVFGD zBqEXMSEBx3vi?6<#v4Ex0H7HF|DV?XbpoKY3y@cWx|gu(P)eGI0$NJg^;oq7o(%W* zxs61~@q2=n_j%39MlQ+@mvPBd$GexL9v@z*u`iq4YGZhm7IxBY9!mwSrFR;f!{6px zqM8U9rfzQndUMTMb(~MO# zqK)ZQ_I9LFeaFa=AP%G2U+2K}=KlMTVtyX3R`KDi_GmNtfLFG6#WCkA_zo-Eepl~A zeJ=q#A~@e&{n**h4%Wf9<1j}&x#=cip6LB>`QzEq&dRdIv09YM{_|Dk%M&eWu$x^~ z72l_O^1O1+S8qPP82t))alFAp_kgwM^sdN7&hwdtPqb+7X8ace%jCit_y z#ai9r#2$reTk)<@gVsUv!*~@dhxZNY=f1M!56O}J1yo=^j+HN`u%Du78z@ zlPU~RcT|B5@`A@}P?ms3`)t9;?Y`7U4zVge?{T+|d}l5N6q21z0{PXMKeNioZtE0@mx6A%RYy zEG2E>rPK!GOS4lUt~w51pJ^r*dDBBcuE;+@pSk|faK~3(t9_t1xluCGC-v~h$gPlst@P2?`(}e< zKj#wz#Ll{k$VRi1z5!y+S~WS<)m(6;5h4aC#T&qfj_6|cH<;*@?>w-w1gPBjc?mVK zy6_;SOfk+`>x)`a3B~3S$Tgo0x*sc>B6%3E8v_VejFsCLagh|%Agg0x{_v;~xz2Ml zq6{L?(^j(v?Rcy=*%bC3IMj<*xpP6O$8ZjN6pNiG_}UQWV0~NEb~*5BNdc+_7(Gm% zIOJb}SUKye!6KhEb{E|Y39Z|o%Oa)+FV%1n)?vP2?>|)myQ*d(GBA!uv*OK-uE@c? zrurg~V|g6-UwJOnK@fj>n+0jGiLgzB2Pz9?lfumtju6xpU5uPdFL#v|p4!7aYm}=Q z)gx6!7|CnKuz=5P5LZ zLd(RRI|_MrxToG?aMqyc=hnoRDYV(Io;ya0KzDXyMOfmrm*6b|HUFg%c2W{|y>7Y%gFKu+Ax>jL( zM>Oe(1_M8*c-!(=P8AdZx2W|}E?FPIFUT8UmlOO<;x(QuM1EWAnqfZ;*344^Y8O^K zboJ8EQ8ZGh#;X(kO*aABf$}B@Yl648$zs%W<wu;Jan=~ zi{dmUoCj`i11%g|pH-$j2sFD*-7F3wQ|FTU!T#zeLEXF2x@O=4!G4 zG3Ib}(D2ylHD1jlClDDw`hcrm`psq6h+IOr0uENgK^oUAlW}fv+3$7Bk^fFV4{&#n z2WT%eSmf5U{Cp6snPa8Q8&pd3`Mb&Z`437g^NJ7A2bAa&l+^>$cnQLhL6ksHx)EsU z98~FL>^|zXOL$VBa36wolfyx% zXK59bG`ost4*ay3wKN3(iL-6G)3tOrP=q@zefM*^H~+!;jr0+nj7zqtD>TwIJ>q3r z2K{qJ0PW6=jf|%{nZXsPKP(gP_!4f@GEaTZ4ATp`zmd75O^L8YKdDH3O2hw2qhx=g z#I*YUvq6c}rp8yGF&;@+J`PQz9{WTk*|Sd>q2Oh-C6?PYhKspGugzplpv_9&`Mzwb(a% zHX>U>J0h*felE#20_8aJvR7JRKYVjI5jpF4*k(lzR+3{0Vp;QYWZNu&ek?)+OG)2c znZrt!u#SP)ARbGDW2WWDJ`ur&96F%SVN)b*dr)rqH@3+T(QGsRpnkd~=cy?tSFSJj zh`y1Pe%`Ki-U&OxsaNT?n~zR%@&im`D7!+8ej#?V06$bf+~pJ`W)&ny6{L6;r0ExA zNb@P2UyshGN98j;^K>2{Q&W~Mxh~22nZkDoIIjnX9tJ9CweTdbo%<7ls3~+M35pwu`Im3r? zMwD~Lq}d`)_5>k&(l2}ZQ1*;+_NYAO*`OE zGlS6%Zc#1UsW3YAa5VL(Kh+vWJ-$Wx&u%;A6rExlO|kcVwMEN5s^}{;5x3sZY03p0%e$(^LKqO?hsg5~q@a8YW|2ld;icycd~h zKu(-ZPOeN&AttB!CuhKtDO*Xj_9Qwzi5Z%dW1qxUNy-~eEO?#xB090iEAh2K;+t90 zyGqh~BB|7$^a(~P+agw|ke=94s<&=bRub#%Nj0IA#^`{0BC$1;)J&}E3=L@aBK8t9 zx}(tpq1E5$*ZN;)@LyMt*i*-LqpuCOlSHA^N&71k!-SbF(lqhQy#4R9biy(*b8!p3 z8d|dkyZHTe=Em!q9ediY!G$gVM42#}e3iExlmH?nDw1mV6nm=(@aiPW-WZH_Se@>+ zhh{NFuei?8A#1>Lb=w46h=QgcgBT*^C(U_M{4*@aKhM$UN zBtM6qii2V?9m%K|CVtoZ1XhrcNTL%vm?`kqv~6Yv!#cT`P9e3@N!BztnHgi96OfP> zKxT(!zo^0%F|uD5A1Qz)ydyE*kdC}BW|Vrjmu+WP%)vfYkt;jeYXq=r2Bsd)taHFM zlR8=%utslYdq+oiM@}!)vJ;xpzn$}K&SHSUVYU%~-W8qeH2ELdmX(cg>? Mcc#k7$N=pB4}O{f#{d8T literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/shop_br.gif b/mozilla/webtools/update/images/shop_br.gif new file mode 100755 index 0000000000000000000000000000000000000000..37c3985472a50a986361280f081f10516abece96 GIT binary patch literal 274 zcmZ?wbhEHbj9}tmIKlt||NsBrd-LX=8#fNzxwHTF?H!jdZ#j2v)0s0HPoG|U?AV&4 zM^_y_yzuRM5g@5PI|&!0be^9E=L*f4ZL@h1x- z1A_#E4oCuICj)E0f?8in=Ddtm>vCT2E6_P#l6${m-TRvN{|_uE2yx))Ke43fWRBJR z3oA;bq%Bt5SW|ZTZPoq<1}7N=XPb(}PYq&fWEF=?WdMuGtYL8NC-Cg&|@`@)5gEasYE+~rt literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/t_featuring.gif b/mozilla/webtools/update/images/t_featuring.gif new file mode 100755 index 0000000000000000000000000000000000000000..d5edfb7309a49d82d08258b98549b346d857894c GIT binary patch literal 1464 zcmV;p1xNZvNk%w1Vd(%K0K@Q|r?I`UyTrT2%*D>s(AeDC;^gG)?EnA&000000000000000000000000000000 z000000000000000A^8LW000vJEC2ui0O*h4mro~(TnS~Tse=sz0s{@Drfg`g69!MJRLXdzwF0-8#3H=RWi^%6EWFYw z4_?jGh6|h~Y?&!G>L~0c59Ut=?Azibv-l%6B@o*a;vn2mQG*`|2UCokQ*lp3z6TDr z33QN8L=9&G7QDk}qawZqWJW-&H^JMqXDFKg#6jRO!U8yK4&=kgW`M&3aIis0pbQ&> z1Hc4|a+LsPrUgK4G7uGISP2D8=Os`8v*8MpRSW>b<{*#&1`wQuoX{XD0c0gN9T?F7 z<~*m?m?n$>?8(}+^G*tAC$esw0bYLi{d2z?6ViD5NH2-lJ<(Y61!r zco}UQo4h!8C692OXsqi3zjG%T@>l>UcgD6XUo0|_%?Zy_Wp)Jt>fz)=N`K0nP>o+9 zr^_$X8|P82kP%>n%qa-u0n2{YkOvz7g3T$mmbUgtWX~2yjp$JSN!%8rHJU2jhca5MRZizg?R6gl6)SCre(D}f+R1&trFUoDtN=icnoq`LU%#T8KVd)aVkjzlHrnU^j()xvtExU}wxSHZE_j=xutobRrA`)0!m(JyVU;t@ ziU6XxpU!FT9BVA5(R0;~d##eKY8#8J`*3K?l`Vuzu)I*TyUe|F=0WVhux=SmUL`P) z9A8}Wm9MlY%orT2){?wxz)o(1b6@(zI7Sb5Fif`Fj!N7ku`v5A!sAu zNfyLWhb*Aw3|T17L@2@p4vpnM4A}w-Fo-qSXaNPc`il@Es6P|5g$)FNiv%r*k1dcv zQ&5Y+ACd!>Dl8y5a8Zs43gQtp{7?ZSD&inG)Q&0XiW`ZF*bFA3L>RP(0ak;e7JGn^ zq}gqYU<{)e$H+c4;5fx4e$gEn*T}{;QUQmW(VQFSNXI(HfO@EqqaF9i$39wQ0e1KV S0+Qy(LK^arh@@i(0029rd3Rs{ literal 0 HcmV?d00001 diff --git a/mozilla/webtools/update/images/t_firefox.gif b/mozilla/webtools/update/images/t_firefox.gif new file mode 100755 index 0000000000000000000000000000000000000000..37cb47502cb3fee2033134e2c266bdf8fe42b6fd GIT binary patch literal 1398 zcmV-+1&R7cNk%w1VV?jY0Hr?wLQ!o)Q*K05Z$?#dLQio^T6RoZcurk&PUTJ|~YlC8Kg=KJvXL5>YbBt?tj&6C9a($L@fRcEBlX`)bc!!yQhnswhoqmm< zfsmqulB9-}sE(PZkesQLo~)Omu$iT@o2Rs#sI{J|x1p`Nq_DlGv%#yj#IU%)v%AB# zzQ(x0$-BeLzQ@nP%F@Qp*Ur<{%+%b`*4fnA+t%CN+TY^cFnR^ z?Lkj&A^8LW3IIO-Ua?*xb1&F>fSfN>r_cqVKhfdnmnjDCrDCvSH!Yzub` zH#{wSjh$VwMRWRFD9jH19!4iJ1#W0uenA7 z!a_bVArTy=5@t3-F&GF00}moOM2`eALp2==0RamgHA6lp6~PjFCU_}II3Nze2Ny0; z`SuYwU?Gi@94Ia*5D*{%21-Vh{b}}N#GL~%f(`8P!$*ij2*}Y&v|tYkW`G1l65;{R ziXS_+#hJj#NQ(lAEa-5eLL>el3gDFF_}~-J1|AdR42wwd1s)01t(lMo0j1d#6LvKn;fEs`2Qh4U_~> z__#6Q&a{zAiR?JwIERjwaRyxd(ZXc|R!Mj$xN`xAj}?elCb{90LZ%b;l=!$X@C1$@ zjPYC({3tMF0>g6P5l|wBjh%?%To@wb&H$u@C<;Lv2LbdRWaFd~qTyoM9ZBY94*CN# zfs#th7a-5!&VwbFZx5Lfn|Brqh-NgaH5I8`E z#~evia0dlMz<|dwN&YZ!hg8_;7Da(^s1{vhM<^rF4-(>6lnVP1Ark@H36UHD1rQpxAPRxO9TEu9g9K?g*A5cLVn9T#aZHQEl6OpC!!x7Z zv8xiI@Oht`{wvz|E2l*iI?zsLzNBua?kW%$52Th!)g3EHND~t7766_Q9k@pX4G#nm z!EQga2TCBD{eZB-40~zAM|b=)uc&%D2@|Ok%-}-~DtwkCusKNRK@K~pciRkz9lB*4 zw;qwQf~Kj!m%KvQ;h>qaCgK1QJ`?a@5*9G)Yo|+ZTtsINUnJj(D|~gU4-qgK(;Wpw zTtwC4EO@1$MYuo#P6uRt2c<&rHE0qdq}6nuo2L5%3licnKnZcBdr}|)tTZzL)(VjV z9?K!oQzAzd5nvq6CP7;q2axx};{-&Ggu?^~Ft?`b+WkX7!4x3D2=W124hQH2pnwJ( z!t5NE!#xyD0MAC;-~j^y0D!0Tv)off$rccNCzQ40>=DJaB;kKS;t7E+Gg2 EJIG5>>i_@% literal 0 HcmV?d00001