Compare commits
1 Commits
update_0_9
...
RJCTEST_BA
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fe48ac7c97 |
@@ -1,419 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
Script Name: Full Featured PHP Browser/OS detection
|
||||
Author: Harald Hope, Website: http://tech.ratmachines.com/
|
||||
Script Source URI: http://tech.ratmachines.com/downloads/browser_detection.php
|
||||
Version 4.2.7
|
||||
Copyright (C) 04 March 2004
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
Lesser GPL license text:
|
||||
http://www.gnu.org/licenses/lgpl.txt
|
||||
|
||||
Coding conventions:
|
||||
http://cvs.sourceforge.net/viewcvs.py/phpbb/phpBB2/docs/codingstandards.htm?rev=1.3
|
||||
*/
|
||||
|
||||
/******************************************
|
||||
this is currently set to accept 9 parameters, although you can add as many as you want:
|
||||
1. safe - returns true/false, you can determine what makes the browser be safe lower down,
|
||||
currently it's set for ns4 and pre version 1 mozillas not being safe, plus all older browsers
|
||||
2. ie_version - tests to see what general IE it is, ie5x-6, ie4, or macIE, returns these values.
|
||||
3. moz_version - returns array of moz version, version number (includes full version, + etc), rv number (for math
|
||||
comparison), rv number (for full rv, including alpha and beta versions), and release date
|
||||
4. dom - returns true/false if it is a basic dom browser, ie >= 5, opera >= 5, all new mozillas, safaris, konquerors
|
||||
5. os - returns which os is being used
|
||||
6. os_number - returns windows versions, 95, 98, me, nt 4, nt 5 [windows 2000], nt 5.1 [windows xp],
|
||||
otherwise returns false
|
||||
7. browser - returns the browser name, in shorthand: ie, ie4, ie5x, op, moz, konq, saf, ns4
|
||||
8. number - returns the browser version number, if available, otherwise returns '' [not available]
|
||||
9. full - returns this array: $browser_name, $version_number, $ie_version, $dom_browser, $safe_browser, $os, $os_number
|
||||
*******************************************/
|
||||
|
||||
// main script, uses two other functions, which_os() and browser_version() as needed
|
||||
function browser_detection( $which_test ) {
|
||||
/*
|
||||
uncomment the global variable declaration if you want the variables to be available on a global level
|
||||
throughout your php page, make sure that php is configured to support the use of globals first!
|
||||
Use of globals should be avoided however, and they are not necessary with this script
|
||||
*/
|
||||
|
||||
/*global $dom_browser, $safe_browser, $browser_user_agent, $os, $browser_name, $ie_version,
|
||||
$version_number, $os_number, $b_repeat, $moz_version, $moz_version_number, $moz_rv, $moz_rv_full, $moz_release;*/
|
||||
|
||||
static $dom_browser, $safe_browser, $browser_user_agent, $os, $browser_name, $ie_version,
|
||||
$version_number, $os_number, $b_repeat, $moz_version, $moz_version_number, $moz_rv, $moz_rv_full, $moz_release;
|
||||
|
||||
/*
|
||||
this makes the test only run once no matter how many times you call it
|
||||
since all the variables are filled on the first run through, it's only a matter of returning the
|
||||
the right ones
|
||||
*/
|
||||
if ( !$b_repeat )
|
||||
{
|
||||
//initialize all variables with default values to prevent error
|
||||
$dom_browser = false;
|
||||
$safe_browser = false;
|
||||
$os = '';
|
||||
$os_number = '';
|
||||
$a_os_data = '';
|
||||
$browser_name = '';
|
||||
$version_number = '';
|
||||
$ie_version = '';
|
||||
$moz_version = '';
|
||||
$moz_version_number = '';
|
||||
$moz_rv = '';
|
||||
$moz_rv_full = '';
|
||||
$moz_release = '';
|
||||
|
||||
//make navigator user agent string lower case to make sure all versions get caught
|
||||
$browser_user_agent = strtolower( $_SERVER['HTTP_USER_AGENT'] );
|
||||
|
||||
$a_os_data = which_os( $browser_user_agent );// get os/number array
|
||||
$os = $a_os_data[0];// os name, abbreviated
|
||||
$os_number = $a_os_data[1];// os number if windows
|
||||
|
||||
/*
|
||||
pack the browser type array, in this order
|
||||
the order is important, because opera must be tested first, and ie4 tested for before ie general
|
||||
same for konqueror, then safari, then gecko, since safari navigator user agent id's with 'gecko' in string.
|
||||
note that $dom_browser is set for all modern dom browsers, this gives you a default to use.
|
||||
|
||||
array[0] = id string for useragent, array[1] is if dom capable, array[2] is working name for browser
|
||||
|
||||
Note: all browser strings are in lower case to match the strtolower output, this avoids possible detection
|
||||
errors
|
||||
*/
|
||||
$a_browser_types[] = array( 'opera', true, 'op' );
|
||||
$a_browser_types[] = array( 'msie', true, 'ie' );
|
||||
$a_browser_types[] = array( 'konqueror', true, 'konq' );
|
||||
$a_browser_types[] = array( 'safari', true, 'saf' );
|
||||
// covers Netscape 6-7, K-Meleon, Most linux versions
|
||||
// the 3 is for the rv: number, the release date is hardcoded
|
||||
$a_browser_types[] = array( 'gecko', true, 'moz' );
|
||||
// netscape 4 test: this has to be last or else ie or opera might register true
|
||||
$a_browser_types[] = array( 'mozilla/4', false, 'ns4' );
|
||||
$a_browser_types[] = array( 'lynx', false, 'lynx' );
|
||||
$a_browser_types[] = array( 'webtv', true, 'webtv' );
|
||||
// search engine spider bots:
|
||||
$a_browser_types[] = array( 'googlebot', false, 'google' );// google
|
||||
$a_browser_types[] = array( 'fast-webcrawler', false, 'fast' );// Fast AllTheWeb
|
||||
$a_browser_types[] = array( 'msnbot', false, 'msn' );// msn search
|
||||
$a_browser_types[] = array( 'scooter', false, 'scooter' );// altavista
|
||||
//$a_browser_types[] = array( '', false ); // browser array template
|
||||
|
||||
/*
|
||||
moz types array
|
||||
note the order, netscape6 must come before netscape, which is how netscape 7 id's itself.
|
||||
rv comes last in case it is plain old mozilla
|
||||
*/
|
||||
$moz_types = array( 'firebird', 'phoenix', 'firefox', 'galeon', 'k-meleon', 'camino', 'netscape6',
|
||||
'netscape', 'rv' );
|
||||
|
||||
/*
|
||||
run through the browser_types array, break if you hit a match, if no match, assume old browser
|
||||
or non dom browser, assigns false value to $b_success.
|
||||
*/
|
||||
for ($i = 0; $i < count($a_browser_types); $i++)
|
||||
{
|
||||
//unpacks browser array, assigns to variables
|
||||
$s_browser = $a_browser_types[$i][0];// text string to id browser from array
|
||||
$b_dom = $a_browser_types[$i][1];// hardcoded dom support from array
|
||||
$browser_name = $a_browser_types[$i][2];// working name for browser
|
||||
$b_success = false;
|
||||
|
||||
if (stristr($browser_user_agent, $s_browser))
|
||||
{
|
||||
// it defaults to true, will become false below if needed
|
||||
// this keeps it easier to keep track of what is safe, only explicit false assignment will make it false.
|
||||
$safe_browser = true;
|
||||
switch ( $browser_name )
|
||||
{
|
||||
case 'ns4':
|
||||
$safe_browser = false;
|
||||
break;
|
||||
case 'moz':
|
||||
/*
|
||||
note: The 'rv' test is not absolute since the rv number is very different on
|
||||
different versions, for example Galean doesn't use the same rv version as Mozilla,
|
||||
neither do later Netscapes, like 7.x. For more on this, read the full mozilla numbering
|
||||
conventions here:
|
||||
http://www.mozilla.org/releases/cvstags.html
|
||||
*/
|
||||
|
||||
// this will return alpha and beta version numbers, if present
|
||||
$moz_rv_full = browser_version( $browser_user_agent, 'rv' );
|
||||
// this slices them back off for math comparisons
|
||||
$moz_rv = substr( $moz_rv_full, 0, 3 );
|
||||
|
||||
// this is to pull out specific mozilla versions, firebird, netscape etc..
|
||||
for ( $i = 0; $i < count( $moz_types ); $i++ )
|
||||
{
|
||||
if ( stristr( $browser_user_agent, $moz_types[$i] ) )
|
||||
{
|
||||
$moz_version = $moz_types[$i];
|
||||
$moz_version_number = browser_version( $browser_user_agent, $moz_version );
|
||||
break;
|
||||
}
|
||||
}
|
||||
// this is necesary to protect against false id'ed moz'es and new moz'es.
|
||||
// this corrects for galeon, or any other moz browser without an rv number
|
||||
if ( !$moz_rv )
|
||||
{
|
||||
$moz_rv = substr( $moz_version_number, 0, 3 );
|
||||
$moz_rv_full = $moz_version_number;
|
||||
/*
|
||||
// you can use this instead if you are running php >= 4.2
|
||||
$moz_rv = floatval( $moz_version_number );
|
||||
$moz_rv_full = $moz_version_number;
|
||||
*/
|
||||
}
|
||||
// this corrects the version name in case it went to the default 'rv' for the test
|
||||
if ( $moz_version == 'rv' )
|
||||
{
|
||||
$moz_version = 'mozilla';
|
||||
}
|
||||
|
||||
//the moz version will be taken from the rv number, see notes above for rv problems
|
||||
$version_number = $moz_rv;
|
||||
// gets the actual release date, necessary if you need to do functionality tests
|
||||
$moz_release = browser_version( $browser_user_agent, 'gecko/' );
|
||||
/*
|
||||
Test for mozilla 0.9.x / netscape 6.x
|
||||
test your javascript/CSS to see if it works in these mozilla releases, if it does, just default it to:
|
||||
$safe_browser = true;
|
||||
*/
|
||||
if ( ( $moz_release < 20020400 ) || ( $moz_rv < 1 ) )
|
||||
{
|
||||
$safe_browser = false;
|
||||
}
|
||||
break;
|
||||
case 'ie':
|
||||
//$version_number = browser_version( $browser_user_agent, $s_browser, $substring_length );
|
||||
$version_number = browser_version( $browser_user_agent, $s_browser );
|
||||
if ( $os == 'mac' )
|
||||
{
|
||||
$ie_version = 'ieMac';
|
||||
}
|
||||
// this assigns a general ie id to the $ie_version variable
|
||||
if ( $version_number >= 5 )
|
||||
{
|
||||
$ie_version = 'ie5x';
|
||||
}
|
||||
elseif ( ( $version_number > 3 ) && $version_number < 5 )
|
||||
{
|
||||
$dom_browser = false;
|
||||
$ie_version = 'ie4';
|
||||
$safe_browser = true; // this depends on what you're using the script for, make sure this fits your needs
|
||||
}
|
||||
else
|
||||
{
|
||||
$ie_version = 'old';
|
||||
$safe_browser = false;
|
||||
}
|
||||
break;
|
||||
case 'op':
|
||||
//$version_number = browser_version( $browser_user_agent, $s_browser, $substring_length );
|
||||
$version_number = browser_version( $browser_user_agent, $s_browser );
|
||||
if ( $version_number < 5 )// opera 4 wasn't very useable.
|
||||
{
|
||||
$safe_browser = false;
|
||||
}
|
||||
break;
|
||||
case 'saf':
|
||||
//$version_number = browser_version( $browser_user_agent, $s_browser, $substring_length );
|
||||
$version_number = browser_version( $browser_user_agent, $s_browser );
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
$dom_browser = $b_dom;
|
||||
$b_success = true;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
//assigns defaults if the browser was not found in the loop test
|
||||
if ( !$b_success )
|
||||
{
|
||||
$safe_browser = false;
|
||||
$dom_browser = false;
|
||||
$browser_name = '';
|
||||
}
|
||||
// this ends the run through once if clause, set the boolean
|
||||
//to true so the function won't retest everything
|
||||
$b_repeat = true;
|
||||
}
|
||||
/*
|
||||
This is where you return values based on what parameter you used to call the function
|
||||
$which_test is the passed parameter in the initial browser_detection('os') for example call
|
||||
*/
|
||||
switch ( $which_test )
|
||||
{
|
||||
case 'safe':// returns true/false if your tests determine it's a safe browser
|
||||
// you can change the tests to determine what is a safeBrowser for your scripts
|
||||
// in this case sub rv 1 Mozillas and Netscape 4x's trigger the unsafe condition
|
||||
return $safe_browser;
|
||||
break;
|
||||
case 'ie_version': // returns iemac or ie5x
|
||||
return $ie_version;
|
||||
break;
|
||||
case 'moz_version':// returns array of all relevant moz information
|
||||
$moz_array = array( $moz_version, $moz_version_number, $moz_rv, $moz_rv_full, $moz_release );
|
||||
return $moz_array;
|
||||
break;
|
||||
case 'dom':// returns true/fale if a DOM capable browser
|
||||
return $dom_browser;
|
||||
break;
|
||||
case 'os':// returns os name
|
||||
return $os;
|
||||
break;
|
||||
case 'os_number':// returns os number if windows
|
||||
return $os_number;
|
||||
break;
|
||||
case 'browser':// returns browser name
|
||||
return $browser_name;
|
||||
break;
|
||||
case 'number':// returns browser number
|
||||
return $version_number;
|
||||
break;
|
||||
case 'full':// returns all relevant browser information in an array
|
||||
$full_array = array( $browser_name, $version_number, $ie_version, $dom_browser, $safe_browser, $os, $os_number );
|
||||
return $full_array;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// gets which os from the browser string
|
||||
function which_os ( $browser_string )
|
||||
{
|
||||
// initialize variables
|
||||
$os = '';
|
||||
$os_version = '';
|
||||
/*
|
||||
packs the os array
|
||||
use this order since some navigator user agents will put 'macintosh' in the navigator user agent string
|
||||
which would make the nt test register true
|
||||
*/
|
||||
$a_os = array('lin', 'mac', 'unix', 'sunos', 'bsd', 'nt', 'win');
|
||||
|
||||
//os tester
|
||||
for ($i = 0; $i < count($a_os); $i++)
|
||||
{
|
||||
//unpacks os array, assigns to variable
|
||||
$s_os = $a_os[$i];
|
||||
|
||||
//assign os to global os variable, os flag true on success
|
||||
if (stristr( $browser_string, $s_os ))
|
||||
{
|
||||
$os = $s_os;
|
||||
|
||||
switch ( $os )
|
||||
{
|
||||
case 'win':
|
||||
if ( strstr( $browser_string, '95' ) )
|
||||
{
|
||||
$os_version = '95';
|
||||
}
|
||||
elseif ( strstr( $browser_string, '98' ) )
|
||||
{
|
||||
$os_version = '98';
|
||||
}
|
||||
elseif ( strstr( $browser_string, 'me' ) )
|
||||
{
|
||||
$os_version = 'me';
|
||||
}
|
||||
elseif ( strstr( $browser_string, '2000' ) )// windows 2000, for opera ID
|
||||
{
|
||||
$os_version = '5.0';
|
||||
$os = 'nt';
|
||||
}
|
||||
elseif ( strstr( $browser_string, 'xp' ) )// windows 2000, for opera ID
|
||||
{
|
||||
$os_version = '5.1';
|
||||
$os = 'nt';
|
||||
}
|
||||
break;
|
||||
case 'nt':
|
||||
if ( strstr( $browser_string, 'nt 5.1' || strstr( $browser_string, 'xp' )) )// windows xp
|
||||
{
|
||||
$os_version = '5.1';//
|
||||
}
|
||||
elseif ( strstr( $browser_string, 'nt 5' ) || strstr( $browser_string, '2000' ) )// windows 2000
|
||||
{
|
||||
$os_version = '5.0';
|
||||
}
|
||||
elseif ( strstr( $browser_string, 'nt 4' ) )// nt 4
|
||||
{
|
||||
$os_version = '4';
|
||||
}
|
||||
elseif ( strstr( $browser_string, 'nt 3' ) )// nt 4
|
||||
{
|
||||
$os_version = '3';
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// pack the os data array for return to main function
|
||||
$os_data = array( $os, $os_version );
|
||||
return $os_data;
|
||||
}
|
||||
|
||||
// function returns browser number, gecko rv number, or gecko release date
|
||||
//function browser_version( $browser_user_agent, $search_string, $substring_length )
|
||||
function browser_version( $browser_user_agent, $search_string )
|
||||
{
|
||||
// 8 is the longest that will be required, handles release dates: 20020323; 0.8.0+
|
||||
$substring_length = 8;
|
||||
//initialize browser number, will return '' if not found
|
||||
$browser_number = '';
|
||||
|
||||
// use the passed parameter for $search_string
|
||||
// start the substring slice right after these moz search strings
|
||||
$start_pos = strpos( $browser_user_agent, $search_string ) + strlen( $search_string );
|
||||
|
||||
// this is just to get the release date, not other moz information
|
||||
if ( ( $search_string != 'gecko/' ) )
|
||||
{
|
||||
$start_pos++;
|
||||
}
|
||||
|
||||
// Initial trimming
|
||||
$browser_number = substr( $browser_user_agent, $start_pos, $substring_length );
|
||||
|
||||
// Find the space, ;, or parentheses that ends the number
|
||||
$browser_number = substr( $browser_number, 0, strcspn($browser_number, ' );') );
|
||||
|
||||
//make sure the returned value is actually the id number and not a string
|
||||
// otherwise return ''
|
||||
if ( !is_numeric( substr( $browser_number, 0, 1 ) ) )
|
||||
{
|
||||
$browser_number = '';
|
||||
}
|
||||
|
||||
return $browser_number;
|
||||
}
|
||||
|
||||
/*
|
||||
Here are some typical navigator.userAgent strings so you can see where the data comes from
|
||||
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5) Gecko/20031007 Firebird/0.7
|
||||
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.9.4) Gecko/20011128 Netscape6/6.2.1
|
||||
*/
|
||||
?>
|
||||
@@ -1,73 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
|
||||
// Mozilla Update -- PHP Configuration File
|
||||
// All common PHP Variables/functions are defined here
|
||||
|
||||
//-- Site Timing :: Function and Start... --//
|
||||
function getmicrotime() {
|
||||
list($usec, $sec) = explode(" ", microtime());
|
||||
return ((float)$usec + (float)$sec);
|
||||
}
|
||||
$time_start = getmicrotime();
|
||||
|
||||
//-- Website Variables--//
|
||||
$websitepath = "/opt/update"; // Local Path to Site Files
|
||||
$sitehostname = "update.mozilla.org"; // DNS Hostname
|
||||
|
||||
//-- MySQL Server/Database Properties/Connection --//
|
||||
$mysqlServer="localhost";
|
||||
$mysqlData="update"; //MySQL Server Database Name
|
||||
$mysqlLogin=""; //MySQL Server UserName
|
||||
$mysqlPass=""; //MySQL Server Password
|
||||
|
||||
|
||||
$connection = mysql_connect("$mysqlServer","$mysqlLogin","$mysqlPass") or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_ERROR);
|
||||
$db = mysql_select_db("$mysqlData", $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_ERROR);
|
||||
|
||||
//-- Page Header & Footer --//
|
||||
$page_header = "$websitepath/core/inc_header.php";
|
||||
$page_footer = "$websitepath/core/inc_footer.php";
|
||||
|
||||
|
||||
//includes
|
||||
include"inc_guids.php"; // GUID Handler
|
||||
include"inc_global.php"; // Global Functions
|
||||
include"sessionconfig.php"; //Start Session
|
||||
|
||||
?>
|
||||
@@ -1,145 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
|
||||
//Various Sample User_Agents, uncomment to debug detection for one. :-)
|
||||
//$_SERVER["HTTP_USER_AGENT"] = "Mozilla/5.0 (Photon; U; QNX x86pc; en-US; rv:1.6a) Gecko/20030122";
|
||||
//$_SERVER["HTTP_USER_AGENT"] = "Mozilla/5.0 (BeOS; U; BeOS BePC; en-US; rv:1.4a) Gecko/20030305";
|
||||
//$_SERVER["HTTP_USER_AGENT"] = "Mozilla/5.0 (X11; U; SunOS i86pc; en-US; rv:1.7b) Gecko/20040302";
|
||||
//$_SERVER["HTTP_USER_AGENT"] = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.6) Gecko/20040206 Lightninglizard/0.8";
|
||||
//$_SERVER["HTTP_USER_AGENT"] = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7b) Gecko/20040322 Nuclearunicorn/0.8.0+ (Firefox/0.8.0+ rebrand)";
|
||||
//$_SERVER["HTTP_USER_AGENT"] = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040626 Firefox/0.9";
|
||||
//$_SERVER["HTTP_USER_AGENT"] = "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3";
|
||||
//$_SERVER["HTTP_USER_AGENT"] = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.2) Gecko/20040818 Firefox/0.9.1+";
|
||||
|
||||
include"browser_detection.php"; //Script that defines the browser_detection() function
|
||||
|
||||
$OS = browser_detection('os');
|
||||
$moz_array = browser_detection('moz_version');
|
||||
|
||||
//Turn $OS into something usable.
|
||||
if ( $moz_array[0] !== '' )
|
||||
{
|
||||
switch ( $OS )
|
||||
{
|
||||
case 'win':
|
||||
case 'nt':
|
||||
$OS = 'Windows';
|
||||
break;
|
||||
case 'lin':
|
||||
$OS = 'Linux';
|
||||
break;
|
||||
case 'solaris':
|
||||
case 'sunos':
|
||||
$OS = 'Solaris';
|
||||
break;
|
||||
case 'unix':
|
||||
case 'bsd':
|
||||
$OS = 'BSD';
|
||||
break;
|
||||
case 'mac':
|
||||
$OS = 'MacOSX';
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
//Print what it's found, debug item.
|
||||
//echo ( 'Your Mozilla product is ' . $moz_array[0] . ' ' . $moz_array[1] . ' running on '. $OS . ' ');
|
||||
|
||||
$application = $moz_array[0];
|
||||
$app_version = $moz_array[1];
|
||||
|
||||
// XXX hack for 10.1 security release -- we need to munge
|
||||
// versions to just check major.minor and ignore release/etc. bits
|
||||
if ($app_version == "0.10.1") {
|
||||
$app_version = "0.10";
|
||||
}
|
||||
|
||||
// XXX hack for 1.0RC1/1.0RC2 release. browser detection needs to be more customizeable per release. heh.
|
||||
// This changes the displayed UA, to the app.extensions.ver internal.
|
||||
if ($app_version == "1.0rc1" or $app_version == "1.0rc2") {
|
||||
$app_version = "1.0";
|
||||
}
|
||||
|
||||
} else {
|
||||
//If it's not a Mozilla product, then return nothing and let the default app code work..
|
||||
}
|
||||
|
||||
//----------------------------
|
||||
//Browser & OS Detection (Default Code)
|
||||
//----------------------------
|
||||
|
||||
//if (!$_GET["application"] or ($_GET["application"]==$application && $_GET["version"]==$moz_array[1])) {
|
||||
//$app_version = $moz_array[1]; //Set app_version from Detection
|
||||
//}
|
||||
|
||||
//Application
|
||||
if (!$application) { $application="firefox"; } //Default App is Firefox
|
||||
|
||||
//App_Version
|
||||
//if ($_GET["version"]) {$app_version = $_GET["version"]; }
|
||||
|
||||
if ($detection_force_version=="true") {$application=$_SESSION["application"];}
|
||||
//Get Max Version for App Specified
|
||||
$sql = "SELECT `major`,`minor`,`release`,`SubVer` FROM `t_applications` WHERE `AppName` = '$application' 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);
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
$release = "$row[major].$row[minor]";
|
||||
if ($row["release"]) {$release = ".$release$row[release]";}
|
||||
$subver = $row["SubVer"];
|
||||
if ($subver !=="final") {$release="$release$subver";}
|
||||
|
||||
if (!$app_version OR $detection_force_version=="true") { $app_version = $release; }
|
||||
unset($release, $subver);
|
||||
|
||||
//OS
|
||||
if ($_GET["os"]) {$OS = $_GET["os"];} //If Defined, set.
|
||||
|
||||
// 1.0PR support
|
||||
if ($app_version=="1.0PR") {$app_version="0.10"; }
|
||||
|
||||
// 0.9.x branch support -- All non-branch (+) builds should be 0.9.
|
||||
if (strpos($app_version, "+")=== false AND strpos($app_version, "0.9")===0) { $app_version="0.9";}
|
||||
|
||||
|
||||
|
||||
//Register Browser Detection Values with the session
|
||||
if (!$_SESSION["application"]) { $_SESSION["application"] = $application; }
|
||||
if (!$_SESSION["app_version"]) { $_SESSION["app_version"] = $app_version; }
|
||||
if (!$_SESSION["app_os"]) { $_SESSION["app_os"] = $OS; }
|
||||
?>
|
||||
@@ -1,57 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<!--Page Footer-->
|
||||
<?php
|
||||
//Site Timer Counter :: Debug-Mode Item Only
|
||||
$time_end = getmicrotime();
|
||||
//Returns in format: sss.mmmuuunnnppp ;-)
|
||||
// m = millisec, u=microsec, n=nansec, p=picosec
|
||||
$time = round($time_end - $time_start,"6");
|
||||
|
||||
echo"<DIV class=\"footer\">© 2004 <A HREF=\"http://www.mozilla.org\">The Mozilla Organization</A>"; if ($_SESSION["debug"]=="true") {echo" | Page Created in $time seconds"; } echo" | Terms of Use | Top</DIV>"; //Debug Time
|
||||
|
||||
if ($pos !== false) {
|
||||
echo"</div>\n";
|
||||
}
|
||||
if ($_SESSION["debug"]=="true") {
|
||||
print(session_id());
|
||||
echo"<PRE>";print_r($_SESSION); echo"</PRE><Br>\n";
|
||||
echo"Current application data: $application - $app_version - $OS ";
|
||||
}
|
||||
?>
|
||||
@@ -1,102 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
|
||||
//inc_global.php -- Stuff that needs to be done globally to all of Mozilla Update
|
||||
|
||||
//Cache Control Headers
|
||||
$expstr = gmdate("D, d M Y H:i:s", time() + 1800) . " GMT";
|
||||
header("Expires: $expstr");
|
||||
header("Cache-Control: public, pre-check=0, post-check=0, max-age=1800");
|
||||
|
||||
|
||||
//Attempt to fix Bug 246743 (strip_tags) and Bug 248242 (htmlentities)
|
||||
foreach ($_GET as $key => $val) {
|
||||
$_GET["$key"] = htmlentities(str_replace("\\","",strip_tags($_GET["$key"])));
|
||||
}
|
||||
|
||||
//Set Debug Mode session Variable
|
||||
if ($_GET["debug"]=="true") {$_SESSION["debug"]=$_GET["debug"]; } else if ($_GET["debug"]=="false") {unset($_SESSION["debug"]);}
|
||||
|
||||
// Bug 250596 Fixes for incoming $_GET variables.
|
||||
if ($_GET["application"]) {
|
||||
$_GET["application"] = strtolower($_GET["application"]);
|
||||
$sql = "SELECT AppID FROM `t_applications` WHERE `AppName` = '".ucwords(strtolower($_GET["application"]))."' 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)===0) {unset($_GET["application"]);}
|
||||
}
|
||||
|
||||
//if ($_GET["version"]) {
|
||||
//$sql = "SELECT AppID FROM `t_applications` WHERE `Release` = '$_GET[version]' 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)===0) {unset($_GET["application"]);}
|
||||
//}
|
||||
|
||||
if ($_GET["category"] AND $_GET["category"] !=="All"
|
||||
AND $_GET["category"] !=="Editors Pick" AND $_GET["category"] !=="Popular"
|
||||
AND $_GET["category"] !=="Top Rated" AND $_GET["category"] !=="Newest") {
|
||||
$sql = "SELECT CatName FROM `t_categories` WHERE `CatName` = '".ucwords(strtolower($_GET["category"]))."' 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)===0) {unset($_GET["category"]);}
|
||||
}
|
||||
|
||||
if (!is_numeric($_GET["id"])) { unset($_GET["id"]); }
|
||||
if (!is_numeric($_GET["vid"])) { unset($_GET["vid"]); }
|
||||
if (!is_numeric($_GET["pageid"])) { unset($_GET["pageid"]); }
|
||||
if (!is_numeric($_GET["numpg"])) { unset($_GET["numpg"]); }
|
||||
|
||||
// page_error() function
|
||||
|
||||
function page_error($reason, $custom_message) {
|
||||
global $page_header, $page_footer;
|
||||
echo"<TITLE>Mozilla Update :: Error</TITLE>\n";
|
||||
echo"<LINK REL=\"STYLESHEET\" TYPE=\"text/css\" HREF=\"/core/update.css\">\n";
|
||||
include"$page_header";
|
||||
|
||||
echo"<DIV class=\"contentbox\" style=\"border-color: #F00; width: 90%; margin: auto; min-height: 250px; margin-bottom: 5px\">\n";
|
||||
echo"<DIV class=\"boxheader\">Mozilla Update :: Error</DIV>\n";
|
||||
echo"<SPAN style=\"font-size: 12pt\">\n";
|
||||
echo"Mozilla Update has encountered an error and is unable to fulfill your request. Please try your request again later. If the
|
||||
problem continues, please contact the Mozilla Update staff. More information about the error may be found at the end of this
|
||||
message.<BR><BR>
|
||||
Error $reason: $custom_message<BR><BR>
|
||||
<A HREF=\"javascript:history.back()\">«« Go Back to Previous Page</A>";
|
||||
echo"</SPAN></DIV>\n";
|
||||
include"$page_footer";
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
@@ -1,49 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
|
||||
//Reset GUIDs to something human-readable
|
||||
if ($_GET["application"]=="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}") {
|
||||
$_GET["application"]="firefox";
|
||||
|
||||
} else if ($_GET["application"]=="{3550f703-e582-4d05-9a08-453d09bdfdc6}") {
|
||||
$_GET["application"]="thunderbird";
|
||||
|
||||
} else if ($_GET["application"]=="{86c18b42-e466-45a9-ae7a-9b95ba6f5640}") {
|
||||
$_GET["application"]="mozilla";
|
||||
}
|
||||
?>
|
||||
@@ -1,82 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
|
||||
$pos = strpos($_SERVER["REQUEST_URI"], "/admin");
|
||||
if ($pos !== false) {
|
||||
echo'<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/mozupdates.bak.css">';
|
||||
$application="login";
|
||||
}
|
||||
?>
|
||||
<DIV class="header">
|
||||
<?php //if ($_GET["application"]) {$application=$_GET["application"]; } else {$application="firefox"; } ?>
|
||||
<DIV class="logo"><IMG SRC="/images/<?php echo"$application"; ?>-cornerlogo.png" BORDER=0 ALT=""></DIV>
|
||||
<DIV class="header-top"><A HREF="/"><IMG SRC="/images/updatelogo.png" BORDER=0 HEIGHT=55 WIDTH=270 ALT="Mozilla Update"></A></DIV>
|
||||
<DIV class="tabbar">
|
||||
<A HREF="/?application=mozilla"><IMG SRC="/images/tab-mozilla<?php if ($application=="mozilla") {echo"-selected"; } ?>.png" BORDER=0 HEIGHT=20 WIDTH=98 ALT="[Mozilla] "></A><A HREF="/?application=firefox"><IMG SRC="/images/tab-firefox<?php if ($application=="firefox") {echo"-selected"; } ?>.png" BORDER=0 HEIGHT=20 WIDTH=98 ALT="[Firefox] "></A><A HREF="/?application=thunderbird"><IMG SRC="/images/tab-thunderbird<?php if ($application=="thunderbird") {echo"-selected"; } ?>.png" BORDER=0 HEIGHT=20 WIDTH=105 ALT="[Thunderbird] "></A><A HREF="/developercp.php"><IMG SRC="/images/tab-login<?php if ($application=="login") {echo"-selected"; } ?>.png" BORDER=0 HEIGHT=20 WIDTH=98 ALT="[Login]"></A>
|
||||
</DIV>
|
||||
</DIV>
|
||||
<DIV class="bar"></DIV>
|
||||
<DIV class="nav">
|
||||
<?php if ($application !=="login") { ?>
|
||||
<A HREF="/?application=<?php echo"$application"; ?>">Home</A>
|
||||
| <A HREF="/faq/?application=<?php echo"$application"; ?>">FAQ</A>
|
||||
<?php
|
||||
// Types
|
||||
$types = array("E"=>"Extensions","T"=>"Themes");
|
||||
foreach($types as $typeid => $typename) {
|
||||
echo" | <A HREF=\"/".strtolower($typename)."/?application=$application\">$typename</A>";
|
||||
}
|
||||
//echo"<BR>\n";
|
||||
|
||||
} else { echo" "; }
|
||||
?>
|
||||
</DIV>
|
||||
|
||||
<?php
|
||||
if ($pos !== false) {
|
||||
?>
|
||||
<?php if ($_SESSION["logoncheck"] =="YES" && $headerline !="none") { ?>
|
||||
<DIV class="adminheading">
|
||||
Welcome<?php echo" $_SESSION[name]"; ?>!
|
||||
<a href="usermanager.php?function=edituser&userid=<?php echo"$_SESSION[uid]"; ?>">Your Profile</a> | <A HREF="main.php">Home</A> |<A HREF="logout.php">Logout</A>
|
||||
<?php } ?>
|
||||
</DIV>
|
||||
<div id="mainContent">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
@@ -1,103 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
|
||||
//Submit Review/Rating Feedback to Table
|
||||
require"../core/config.php";
|
||||
if (!$_POST[rating] && $_POST[rating] !=="0") {
|
||||
//No Rating Defined, send user back...
|
||||
$return_path="extensions/moreinfo.php?id=$_POST[id]&vid=$_POST[vid]&page=opinion&error=norating";
|
||||
header("Location: http://$_SERVER[HTTP_HOST]/$return_path");
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$_POST[comments]) {
|
||||
$_POST[comments]="NULL";
|
||||
} else {
|
||||
//Comments is not null, format comments and get default name/title.. if needed.
|
||||
$_POST["comments"]="'$_POST[comments]'";
|
||||
if (!$_POST[name]) {$_POST[name]=="Anonymous"; }
|
||||
if (!$_POST[title]) {$_POST[title]=="My Comments..."; }
|
||||
}
|
||||
|
||||
$_POST["name"] = strip_tags($_POST["name"]);
|
||||
$_POST["title"] = strip_tags($_POST["title"]);
|
||||
$_POST["comments"] = strip_tags($_POST["comments"]);
|
||||
|
||||
//Are we behind a proxy and given the IP via an alternate enviroment variable? If so, use it.
|
||||
if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
|
||||
$remote_addr = $_SERVER["HTTP_X_FORWARDED_FOR"];
|
||||
} else {
|
||||
$remote_addr = $_SERVER["REMOTE_ADDR"];
|
||||
}
|
||||
|
||||
$sql = "INSERT INTO `t_feedback` (`ID`, `CommentName`, `CommentVote`, `CommentTitle`, `CommentNote`, `CommentDate`, `commentip`) VALUES ('$_POST[id]', '$_POST[name]', '$_POST[rating]', '$_POST[title]', $_POST[comments], NOW(NULL), '$remote_addr');";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
|
||||
//Get Rating Data and Create $ratingarray
|
||||
$sql = "SELECT ID, CommentVote FROM `t_feedback` WHERE `ID` = '$_POST[id]' AND `CommentVote` IS NOT NULL AND `CommentNote` IS NOT NULL ORDER BY `CommentDate` 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)) {
|
||||
$ratingarray[$row[ID]][] = $row["CommentVote"];
|
||||
}
|
||||
|
||||
//Compile Rating Average
|
||||
$id = $_POST[id];
|
||||
if (!$ratingarray[$id]) {$ratingarray[$id] = array(); }
|
||||
$numratings = count($ratingarray[$id]);
|
||||
$sumratings = array_sum($ratingarray[$id]);
|
||||
if ($numratings>0) {
|
||||
$rating = round($sumratings/$numratings, 1);
|
||||
} else {
|
||||
$rating="0"; } //Default Rating
|
||||
|
||||
|
||||
$sql = "UPDATE `t_main` SET `Rating`='$rating' WHERE `ID`='$id' LIMIT 1";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
|
||||
if ($_POST["type"]=="E") {
|
||||
$type="extensions";
|
||||
} else if ($_POST["type"]=="T") {
|
||||
$type="themes";
|
||||
}
|
||||
|
||||
$return_path="$type/moreinfo.php?id=$_POST[id]&vid=$_POST[vid]&page=comments&action=postsuccessfull";
|
||||
header("Location: http://$sitehostname/$return_path");
|
||||
exit;
|
||||
?>
|
||||
@@ -1,94 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
|
||||
//session_name('sid');
|
||||
//session_name();
|
||||
//session_start();
|
||||
|
||||
if ($_GET["version"]=="auto-detect") {$_GET["version"]=""; unset($_SESSION["app_version"]);}//Clear Versioning in Session For AutoDetect
|
||||
if ($_GET["application"] AND $_GET["application"] != $_SESSION["application"]) {
|
||||
$_SESSION["application"] = $_GET["application"]; //Put the selected app into session. skip detection. ;-)
|
||||
unset($_SESSION["app_version"]);
|
||||
$detection_force_version = "true"; //Skip application checking, just fill in the version.
|
||||
}
|
||||
|
||||
//Get Browser Detection Data if it's not in the Session vars already
|
||||
if (!$_SESSION["application"] OR !$_SESSION["app_version"]) {
|
||||
include"inc_browserdetection.php";
|
||||
}
|
||||
|
||||
//Change OS Support for showlist.php
|
||||
switch ( $_GET["os"] )
|
||||
{
|
||||
case 'windows':
|
||||
$_GET["os"] = 'Windows';
|
||||
break;
|
||||
case 'linux':
|
||||
$_GET["os"] = 'Linux';
|
||||
break;
|
||||
case 'solaris':
|
||||
$_GET["os"] = 'Solaris';
|
||||
break;
|
||||
case 'bsd':
|
||||
$_GET["os"] = 'BSD';
|
||||
break;
|
||||
case 'macosx':
|
||||
$_GET["os"] = 'MacOSX';
|
||||
break;
|
||||
case 'all':
|
||||
$_GET["os"] = 'ALL';
|
||||
break;
|
||||
default:
|
||||
unset($_GET["os"]);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (($_GET["os"] and $_SESSION["app_os"]) AND $_GET["os"] !== $_SESSION["app_os"]) {
|
||||
$_SESSION["app_os"]=$_GET["os"];
|
||||
|
||||
}
|
||||
|
||||
//Got session data for browser/app detection, populate the variables
|
||||
$application = $_SESSION["application"];
|
||||
$app_version = $_SESSION["app_version"];
|
||||
$OS = $_SESSION["app_os"];
|
||||
|
||||
|
||||
if ($_GET["debug"]=="killappdata") { unset($_SESSION["application"],$_SESSION["app_version"]); }
|
||||
?>
|
||||
@@ -1,226 +0,0 @@
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Mozilla Update.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Chris "Wolf" Crews.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2004
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
BODY {
|
||||
MARGIN: 0px 0px 5px; FONT-FAMILY: Arial; BACKGROUND-COLOR: #fff
|
||||
}
|
||||
A {
|
||||
COLOR: #00129c; TEXT-DECORATION: none
|
||||
}
|
||||
A:visited {
|
||||
COLOR: #00129c; TEXT-DECORATION: none
|
||||
}
|
||||
A:hover {
|
||||
COLOR: #fc5900
|
||||
}
|
||||
DIV.header {
|
||||
BACKGROUND-IMAGE: url(/images/header.png); BACKGROUND-REPEAT: repeat-x; HEIGHT: 77px
|
||||
}
|
||||
DIV.header-top {
|
||||
HEIGHT: 57px
|
||||
}
|
||||
DIV.logo {
|
||||
z-index: 1; position: absolute; right: 0px
|
||||
}
|
||||
DIV.tabbar {
|
||||
PADDING-LEFT: 26px; HEIGHT: 20px
|
||||
}
|
||||
|
||||
DIV.nav {
|
||||
BACKGROUND-IMAGE: url(/images/orangebar.png); background-repeat: repeat-x; PADDING-TOP: 3px; PADDING-LEFT: 10px; FONT-WEIGHT: bold; MARGIN-BOTTOM: 10px; COLOR: #fff; BACKGROUND-COLOR: #0F67C1; a:VISITED: #fff
|
||||
}
|
||||
DIV.nav A:visited {
|
||||
COLOR: #FFF;
|
||||
}
|
||||
DIV.nav A {
|
||||
COLOR: #fff
|
||||
}
|
||||
DIV.adminheading {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN-RIGHT: 10px; HEIGHT: 25px; TEXT-ALIGN: right
|
||||
}
|
||||
.box {
|
||||
BORDER-RIGHT: #ccc 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 2px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN-BOTTOM: 15px; PADDING-BOTTOM: 5px; POSITION: relative; LEFT: 150px; BORDER-LEFT: #ccc 2px solid; WIDTH: 78%; PADDING-TOP: 5px; BORDER-BOTTOM: #ccc 2px solid; -moz-border-radius: 10px
|
||||
}
|
||||
.boxheader {
|
||||
MARGIN-BOTTOM: 6px; BORDER-BOTTOM: #000 1px solid
|
||||
}
|
||||
.boxcolumns {
|
||||
BORDER-RIGHT: #ccc 2px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ccc 2px solid; PADDING-LEFT: 2px; FONT-SIZE: 12pt; MIN-HEIGHT: 200px; FLOAT: left; PADDING-BOTTOM: 2px; MARGIN-LEFT: 2px; BORDER-LEFT: #ccc 2px solid; WIDTH: 31%; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 2px solid; -moz-border-radius: 10px
|
||||
}
|
||||
DIV.sidelinks {
|
||||
BORDER-RIGHT: #ccc 2px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ccc 2px solid; MARGIN-TOP: 10px; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN-LEFT: 3px; BORDER-LEFT: #ccc 2px solid; WIDTH: 135px; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 2px solid; POSITION: absolute; -moz-border-radius: 10px
|
||||
}
|
||||
.sidebartitle {
|
||||
FONT-WEIGHT: bold
|
||||
}
|
||||
.sidebartext {
|
||||
MARGIN-LEFT: 4px
|
||||
}
|
||||
.updatebox {
|
||||
BORDER-RIGHT: #ccc 2px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 2px solid; MARGIN-TOP: 3px; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 14pt; MIN-HEIGHT: 200px; MARGIN-BOTTOM: 15px; PADDING-BOTTOM: 5px; MARGIN-LEFT: 1px; BORDER-LEFT: #ccc 2px solid; WIDTH: 230px; PADDING-TOP: 5px; BORDER-BOTTOM: #ccc 2px solid; POSITION: absolute; -moz-border-radius: 10px
|
||||
}
|
||||
.frontpagecontainer {
|
||||
MIN-HEIGHT: 150px; WIDTH: 100%
|
||||
}
|
||||
.contentbox {
|
||||
BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 14pt; PADDING-BOTTOM: 5px; MARGIN: 0px 5px 15px 0px; BORDER-LEFT: #ccc 1px solid; PADDING-TOP: 5px; BORDER-BOTTOM: #ccc 1px solid; -moz-border-radius: 10px
|
||||
}
|
||||
.contentcolumns {
|
||||
FLOAT: left; WIDTH: 48%
|
||||
}
|
||||
|
||||
#content {
|
||||
PADDING-LEFT: 5px; POSITION: relative; LEFT: 145px; WIDTH: 85%;
|
||||
}
|
||||
|
||||
DIV.item {
|
||||
BORDER-RIGHT: #ccc 2px solid; PADDING-RIGHT: 8px; BORDER-TOP: #ccc 2px solid; PADDING-LEFT: 8px; PADDING-BOTTOM: 0px; MARGIN: 0px auto 15px; BORDER-LEFT: #ccc 2px solid; WIDTH: 95%; PADDING-TOP: 8px; BORDER-BOTTOM: #ccc 2px solid; -moz-border-radius: 10px
|
||||
}
|
||||
#listnav {
|
||||
BORDER-RIGHT: #ccc 2px solid; PADDING-RIGHT: 6px; BORDER-TOP: #ccc 2px solid; PADDING-LEFT: 6px; FONT-WEIGHT: bold; FONT-SIZE: 10pt; PADDING-BOTTOM: 6px; MARGIN: 3px auto; BORDER-LEFT: #ccc 2px solid; WIDTH: 95%; PADDING-TOP: 6px; BORDER-BOTTOM: #ccc 2px solid; TEXT-ALIGN: left; -moz-border-radius: 10px
|
||||
}
|
||||
.listform {
|
||||
BORDER-RIGHT: #3d97c0 1px dotted; PADDING-RIGHT: 2px; BORDER-TOP: #3d97c0 1px dotted; PADDING-LEFT: 2px; PADDING-BOTTOM: 2px; MARGIN: 10px auto auto; BORDER-LEFT: #3d97c0 1px dotted; WIDTH: 90%; PADDING-TOP: 2px; BORDER-BOTTOM: #3d97c0 1px dotted; HEIGHT: 25px; BACKGROUND-COLOR: #d4e9f2; TEXT-ALIGN: center
|
||||
}
|
||||
.title A {
|
||||
COLOR: #fc5900
|
||||
}
|
||||
.title A:visited {
|
||||
COLOR: #fc5900
|
||||
}
|
||||
.liststars {
|
||||
FLOAT: right; WIDTH: 80px; HEIGHT: 20px
|
||||
}
|
||||
.listtitle {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 11pt
|
||||
}
|
||||
.itemtitle {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN-BOTTOM: 10px; MARGIN-LEFT: 30px
|
||||
}
|
||||
.authorline {
|
||||
FONT-SIZE: 10pt; MARGIN-LEFT: 15px
|
||||
}
|
||||
.itemdescription {
|
||||
FONT-SIZE: 10pt
|
||||
}
|
||||
.iconbar {
|
||||
PADDING-RIGHT: 5px; FONT-WEIGHT: normal; FONT-SIZE: 9pt; FLOAT: right; WIDTH: 125px; HEIGHT: 34px; TEXT-ALIGN: left
|
||||
}
|
||||
.filesize {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 8pt
|
||||
}
|
||||
.smallfont {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 8pt
|
||||
}
|
||||
.baseline {
|
||||
BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 10px; FONT-WEIGHT: bold; FONT-SIZE: 8pt; COLOR: #333
|
||||
}
|
||||
.noitems {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 12pt; HEIGHT: 60px; TEXT-ALIGN: center
|
||||
}
|
||||
.pagenum {
|
||||
FONT-SIZE: 9pt; FLOAT: right
|
||||
}
|
||||
DIV.tabbar {
|
||||
PADDING-RIGHT: 8px; PADDING-LEFT: 8px; PADDING-BOTTOM: 0px; MARGIN: 0px auto auto; WIDTH: 85%; PADDING-TOP: 0px; HEIGHT: 20px
|
||||
}
|
||||
DIV.tab {
|
||||
BORDER-RIGHT: #ccc 2px solid; PADDING-RIGHT: 3px; BORDER-TOP: #ccc 2px solid; PADDING-LEFT: 3px; FONT-SIZE: 11pt; FLOAT: left; MARGIN: 0px 3px; VERTICAL-ALIGN: middle; BORDER-LEFT: #ccc 2px solid; BORDER-BOTTOM: #ccc 2px solid; HEIGHT: 20px; BACKGROUND-COLOR: #ddd; TEXT-ALIGN: center; -moz-border-radius: 10px
|
||||
}
|
||||
.downloadbox {
|
||||
BORDER-RIGHT: #ccc 1px dotted; BORDER-TOP: #ccc 1px dotted; FONT-WEIGHT: bold; FLOAT: left; BORDER-LEFT: #ccc 1px dotted; BORDER-BOTTOM: #ccc 1px dotted; max-width: 395px;
|
||||
}
|
||||
.moreinfoinstall {
|
||||
MARGIN-LEFT: 18px; WIDTH: 250px; HEIGHT: 34px
|
||||
}
|
||||
.commentbox {
|
||||
BORDER-RIGHT: #ccc 1px solid; PADDING-RIGHT: 2px; BORDER-TOP: #ccc 1px solid; PADDING-LEFT: 5px; FONT-WEIGHT: bold; FONT-SIZE: 10pt; MIN-HEIGHT: 260px; PADDING-BOTTOM: 6px; MARGIN: auto 0px 5px auto; BORDER-LEFT: #ccc 1px solid; WIDTH: 50%; PADDING-TOP: 2px; BORDER-BOTTOM: #ccc 1px solid
|
||||
}
|
||||
.commenttitlebar {
|
||||
PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11pt; HEIGHT: 20px; BACKGROUND-COLOR: #eee
|
||||
}
|
||||
.commenttitle {
|
||||
PADDING-LEFT: 0px; FONT-WEIGHT: bold; FONT-SIZE: 11pt; POSITION: absolute
|
||||
}
|
||||
.commentfooter {
|
||||
PADDING-RIGHT: 5px; FONT-SIZE: 8pt; TEXT-ALIGN: right
|
||||
}
|
||||
.nocomment {
|
||||
MARGIN-LEFT: 30px
|
||||
}
|
||||
.mipageheading {
|
||||
BORDER-TOP: #ccc 1px solid; MARGIN-TOP: 5px; PADDING-LEFT: 4px; FONT-WEIGHT: bold; FONT-SIZE: 11pt; MARGIN-BOTTOM: 5px; COLOR: #333
|
||||
}
|
||||
.reviewbox {
|
||||
BORDER-RIGHT: #bbb 1px dotted; BORDER-TOP: #bbb 1px dotted; FONT-WEIGHT: bold; MARGIN: auto auto 10px; BORDER-LEFT: #bbb 1px dotted; WIDTH: 70%; BORDER-BOTTOM: #bbb 1px dotted
|
||||
};
|
||||
.opinionform {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN: auto 30px; WIDTH: 80%; LINE-HEIGHT: 30px
|
||||
}
|
||||
.errorbox {
|
||||
BORDER-RIGHT: #f00 1px solid; PADDING-RIGHT: 3px; BORDER-TOP: #f00 1px solid; PADDING-LEFT: 3px; PADDING-BOTTOM: 3px; MARGIN: auto auto 20px; BORDER-LEFT: #f00 1px solid; WIDTH: 80%; PADDING-TOP: 3px; BORDER-BOTTOM: #f00 1px solid
|
||||
}
|
||||
.boxheader2 {
|
||||
BORDER-TOP: #2e64ff 4px solid; HEIGHT: 4px
|
||||
}
|
||||
.boldfont {
|
||||
FONT-WEIGHT: bold
|
||||
}
|
||||
.disabled {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #ccc; FONT-STYLE: italic
|
||||
}
|
||||
.emailactive {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-STYLE: italic
|
||||
}
|
||||
.profileitemdesc {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN-BOTTOM: 4px; MARGIN-LEFT: 20px
|
||||
}
|
||||
.mailresult {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 14pt; MARGIN: auto; WIDTH: 650px; HEIGHT: 30px; TEXT-ALIGN: center
|
||||
}
|
||||
.faqtitle {
|
||||
FONT-WEIGHT: normal; FONT-SIZE: 24pt; COLOR: #0065CA; TEXT-ALIGN: center
|
||||
}
|
||||
.faqitemtitle {
|
||||
FONT-WEIGHT: bold; FONT-SIZE: 12pt
|
||||
}
|
||||
.faqitemtext {
|
||||
MARGIN-LEFT: 5px
|
||||
}
|
||||
.footer {
|
||||
PADDING-RIGHT: 30px; FONT-WEIGHT: bold; FONT-SIZE: 10pt; MARGIN-LEFT: 200px; TEXT-ALIGN: right
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
The files contained in this directory are schema for the Mozilla Update MySQL Database.
|
||||
This directory does not have to be on the webserver for the site to function, in fact, it should not be.
|
||||
|
||||
Mozilla Update requires MySQL 4.0 or higher w/ InnoDB support.
|
||||
@@ -1,348 +0,0 @@
|
||||
# ***** BEGIN LICENSE BLOCK *****
|
||||
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
#
|
||||
# The contents of this file are subject to the Mozilla Public License Version
|
||||
# 1.1 (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
# http:#www.mozilla.org/MPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS IS" basis,
|
||||
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
# for the specific language governing rights and limitations under the
|
||||
# License.
|
||||
#
|
||||
# The Original Code is Mozilla Update.
|
||||
#
|
||||
# The Initial Developer of the Original Code is
|
||||
# Chris "Wolf" Crews.
|
||||
# Portions created by the Initial Developer are Copyright (C) 2004
|
||||
# the Initial Developer. All Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
# Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
# Alan Starr <alanjstarr@yahoo.com>
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
# in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
# of those above. If you wish to allow use of your version of this file only
|
||||
# under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
# use your version of this file under the terms of the MPL, indicate your
|
||||
# decision by deleting the provisions above and replace them with the notice
|
||||
# and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
# the provisions above, a recipient may use your version of this file under
|
||||
# the terms of any one of the MPL, the GPL or the LGPL.
|
||||
#
|
||||
# ***** END LICENSE BLOCK *****
|
||||
|
||||
|
||||
-- phpMyAdmin SQL Dump
|
||||
-- version 2.6.0-rc1
|
||||
-- http://www.phpmyadmin.net
|
||||
--
|
||||
-- Host: localhost
|
||||
-- Generation Time: Sep 12, 2004 at 05:07 AM
|
||||
-- Server version: 4.0.18
|
||||
-- PHP Version: 4.3.8
|
||||
--
|
||||
-- Database: `mozillaupdate`
|
||||
--
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_applications`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_applications` (
|
||||
`AppID` int(11) NOT NULL auto_increment,
|
||||
`AppName` varchar(30) NOT NULL default '',
|
||||
`Version` varchar(10) NOT NULL default '',
|
||||
`major` int(3) NOT NULL default '0',
|
||||
`minor` int(3) NOT NULL default '0',
|
||||
`release` int(3) NOT NULL default '0',
|
||||
`build` int(14) NOT NULL default '0',
|
||||
`SubVer` enum('a','b','final','','+') NOT NULL default 'final',
|
||||
`GUID` varchar(50) NOT NULL default '',
|
||||
PRIMARY KEY (`AppID`),
|
||||
KEY `AppName` (`AppName`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=25 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_approvallog`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_approvallog` (
|
||||
`LogID` int(5) NOT NULL auto_increment,
|
||||
`ID` varchar(11) NOT NULL default '',
|
||||
`vID` varchar(11) NOT NULL default '',
|
||||
`UserID` varchar(11) NOT NULL default '',
|
||||
`action` varchar(255) NOT NULL default '',
|
||||
`date` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`comments` text NOT NULL,
|
||||
PRIMARY KEY (`LogID`),
|
||||
KEY `ID` (`ID`),
|
||||
KEY `vID` (`vID`),
|
||||
KEY `UserID` (`UserID`),
|
||||
KEY `UserID_2` (`UserID`)
|
||||
) TYPE=InnoDB AUTO_INCREMENT=430 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_authorxref`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_authorxref` (
|
||||
`ID` int(11) NOT NULL default '0',
|
||||
`UserID` int(11) NOT NULL default '0',
|
||||
KEY `ID` (`ID`),
|
||||
KEY `UserID` (`UserID`)
|
||||
) TYPE=InnoDB;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_categories`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_categories` (
|
||||
`CategoryID` int(11) NOT NULL auto_increment,
|
||||
`CatName` varchar(30) NOT NULL default '',
|
||||
`CatDesc` varchar(100) NOT NULL default '',
|
||||
`CatType` enum('E','T','P') NOT NULL default 'E',
|
||||
PRIMARY KEY (`CategoryID`)
|
||||
) TYPE=InnoDB AUTO_INCREMENT=28 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_categoryxref`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_categoryxref` (
|
||||
`ID` int(11) NOT NULL default '0',
|
||||
`CategoryID` int(11) NOT NULL default '0',
|
||||
KEY `IDIndex` (`ID`,`CategoryID`),
|
||||
KEY `CategoryID` (`CategoryID`)
|
||||
) TYPE=InnoDB;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_downloads`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_downloads` (
|
||||
`dID` int(11) NOT NULL auto_increment,
|
||||
`ID` varchar(5) NOT NULL default '',
|
||||
`date` varchar(14) default NULL,
|
||||
`downloadcount` int(15) NOT NULL default '0',
|
||||
`vID` varchar(5) NOT NULL default '',
|
||||
`user_ip` varchar(15) NOT NULL default '',
|
||||
`user_agent` text NOT NULL,
|
||||
`type` enum('count','download') NOT NULL default 'download',
|
||||
PRIMARY KEY (`dID`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=3 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_faq`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_faq` (
|
||||
`id` int(3) NOT NULL auto_increment,
|
||||
`index` varchar(5) NOT NULL default '1',
|
||||
`alias` varchar(12) NOT NULL default '',
|
||||
`title` varchar(150) NOT NULL default '',
|
||||
`text` text NOT NULL,
|
||||
`lastupdated` timestamp(14) NOT NULL,
|
||||
`active` enum('YES','NO') NOT NULL default 'YES',
|
||||
PRIMARY KEY (`id`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=7 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_feedback`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_feedback` (
|
||||
`CommentID` int(11) NOT NULL auto_increment,
|
||||
`ID` int(11) NOT NULL default '0',
|
||||
`CommentName` varchar(100) default NULL,
|
||||
`CommentVote` enum('0','1','2','3','4','5') default NULL,
|
||||
`CommentTitle` varchar(75) NOT NULL default '',
|
||||
`CommentNote` text,
|
||||
`CommentDate` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`commentip` varchar(15) NOT NULL default '',
|
||||
PRIMARY KEY (`CommentID`),
|
||||
KEY `ID` (`ID`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=15487 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_main`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_main` (
|
||||
`ID` int(11) NOT NULL auto_increment,
|
||||
`GUID` varchar(50) NOT NULL default '',
|
||||
`Name` varchar(100) NOT NULL default '',
|
||||
`Type` enum('T','E','P') NOT NULL default 'T',
|
||||
`DateAdded` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`DateUpdated` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`Homepage` varchar(200) default NULL,
|
||||
`Description` varchar(255) NOT NULL default '',
|
||||
`Rating` varchar(4) NOT NULL default '0',
|
||||
`downloadcount` int(15) NOT NULL default '0',
|
||||
`TotalDownloads` int(18) NOT NULL default '0',
|
||||
PRIMARY KEY (`ID`),
|
||||
KEY `Type` (`Type`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=218 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_os`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_os` (
|
||||
`OSID` int(11) NOT NULL auto_increment,
|
||||
`OSName` varchar(20) NOT NULL default '',
|
||||
PRIMARY KEY (`OSID`),
|
||||
UNIQUE KEY `OSName` (`OSName`)
|
||||
) TYPE=InnoDB AUTO_INCREMENT=7 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_previews`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_previews` (
|
||||
`PreviewID` int(11) NOT NULL auto_increment,
|
||||
`PreviewURI` varchar(200) NOT NULL default '',
|
||||
`vID` int(11) NOT NULL default '0',
|
||||
PRIMARY KEY (`PreviewID`),
|
||||
KEY `vID` (`vID`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=24 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_reviews`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_reviews` (
|
||||
`rID` int(11) NOT NULL auto_increment,
|
||||
`ID` int(11) NOT NULL default '0',
|
||||
`AppID` int(11) NOT NULL default '0',
|
||||
`DateAdded` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`AuthorID` int(11) NOT NULL default '0',
|
||||
`Title` varchar(60) NOT NULL default '',
|
||||
`Body` text,
|
||||
`pick` enum('YES','NO') NOT NULL default 'NO',
|
||||
`featured` enum('YES','NO') NOT NULL default 'NO',
|
||||
PRIMARY KEY (`rID`),
|
||||
KEY `ID` (`ID`),
|
||||
KEY `AppID` (`AppID`),
|
||||
KEY `AuthorID` (`AuthorID`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=3 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_userprofiles`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_userprofiles` (
|
||||
`UserID` int(11) NOT NULL auto_increment,
|
||||
`UserName` varchar(100) NOT NULL default '',
|
||||
`UserEmail` varchar(100) NOT NULL default '',
|
||||
`UserWebsite` varchar(100) default NULL,
|
||||
`UserPass` varchar(200) NOT NULL default '',
|
||||
`UserMode` enum('A','E','U','D') NOT NULL default 'U',
|
||||
`UserTrusted` enum('TRUE','FALSE') NOT NULL default 'FALSE',
|
||||
`UserEmailHide` tinyint(1) NOT NULL default '1',
|
||||
PRIMARY KEY (`UserID`),
|
||||
UNIQUE KEY `UserEmail` (`UserEmail`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=142 ;
|
||||
|
||||
-- --------------------------------------------------------
|
||||
|
||||
--
|
||||
-- Table structure for table `t_version`
|
||||
--
|
||||
|
||||
CREATE TABLE `t_version` (
|
||||
`vID` int(11) NOT NULL auto_increment,
|
||||
`ID` int(11) NOT NULL default '0',
|
||||
`Version` varchar(30) NOT NULL default '0',
|
||||
`OSID` int(11) NOT NULL default '0',
|
||||
`AppID` int(11) NOT NULL default '0',
|
||||
`MinAppVer` varchar(10) NOT NULL default '',
|
||||
`MinAppVer_int` varchar(10) NOT NULL default '',
|
||||
`MaxAppVer` varchar(10) NOT NULL default '',
|
||||
`MaxAppVer_int` varchar(10) NOT NULL default '',
|
||||
`Size` int(11) NOT NULL default '0',
|
||||
`DateAdded` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`DateUpdated` datetime NOT NULL default '0000-00-00 00:00:00',
|
||||
`URI` varchar(255) NOT NULL default '',
|
||||
`Notes` text,
|
||||
`approved` enum('YES','NO','?') NOT NULL default '?',
|
||||
PRIMARY KEY (`vID`),
|
||||
KEY `ID` (`ID`),
|
||||
KEY `AppID` (`AppID`),
|
||||
KEY `OSID` (`OSID`),
|
||||
KEY `Version` (`Version`)
|
||||
) TYPE=InnoDB PACK_KEYS=0 AUTO_INCREMENT=558 ;
|
||||
|
||||
--
|
||||
-- Constraints for dumped tables
|
||||
--
|
||||
|
||||
--
|
||||
-- Constraints for table `t_authorxref`
|
||||
--
|
||||
ALTER TABLE `t_authorxref`
|
||||
ADD CONSTRAINT `0_125` FOREIGN KEY (`ID`) REFERENCES `t_main` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT `0_126` FOREIGN KEY (`UserID`) REFERENCES `t_userprofiles` (`UserID`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `t_categoryxref`
|
||||
--
|
||||
ALTER TABLE `t_categoryxref`
|
||||
ADD CONSTRAINT `0_128` FOREIGN KEY (`ID`) REFERENCES `t_main` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT `0_129` FOREIGN KEY (`CategoryID`) REFERENCES `t_categories` (`CategoryID`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `t_feedback`
|
||||
--
|
||||
ALTER TABLE `t_feedback`
|
||||
ADD CONSTRAINT `0_131` FOREIGN KEY (`ID`) REFERENCES `t_main` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `t_previews`
|
||||
--
|
||||
ALTER TABLE `t_previews`
|
||||
ADD CONSTRAINT `0_133` FOREIGN KEY (`vID`) REFERENCES `t_version` (`vID`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `t_reviews`
|
||||
--
|
||||
ALTER TABLE `t_reviews`
|
||||
ADD CONSTRAINT `0_135` FOREIGN KEY (`ID`) REFERENCES `t_main` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT `0_136` FOREIGN KEY (`AppID`) REFERENCES `t_applications` (`AppID`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
--
|
||||
-- Constraints for table `t_version`
|
||||
--
|
||||
ALTER TABLE `t_version`
|
||||
ADD CONSTRAINT `0_139` FOREIGN KEY (`ID`) REFERENCES `t_main` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT `0_140` FOREIGN KEY (`AppID`) REFERENCES `t_applications` (`AppID`) ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@@ -1,77 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<TITLE>Mozilla Update :: Developer Control Panel - Coming Soon</TITLE>
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
$application="login";
|
||||
include"$page_header";
|
||||
?>
|
||||
<DIV class="faqtitle">Developer Control Panel - Coming Soon</DIV>
|
||||
|
||||
<DIV style="width: 75%; margin: auto; margin-top: 20px; border: 1px dotted #0065CA; padding: 5px">
|
||||
In the next version of Mozilla Update, Mozilla Update will have a new section for Extension/Theme authors to login to. This new section
|
||||
will give them the ability to manage their extensions and themes that're hosted on Mozilla Update themselves.<BR>
|
||||
<BR>
|
||||
Authors will have the ability to add a new extension or theme themselves, as well as adding new versions of that extension or theme,
|
||||
updating an existing listing (including being able to change the application-compatibility settings w/o needing a new file), and if
|
||||
they so desire, the ability to remove entirely an old version of an extension or theme or the entire listing.<BR>
|
||||
<BR>
|
||||
Other features that will be available include the capability of adding and managing preview images of their extension or theme,
|
||||
a developer comments feature, so they can easily communicate to end-users known problems with the extension/theme.
|
||||
<BR>
|
||||
</DIV>
|
||||
|
||||
<P>
|
||||
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,194 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
|
||||
<?php
|
||||
//Bookmarking-Friendly Page Title
|
||||
$sql = "SELECT UserName FROM `t_userprofiles` WHERE UserID = '$_GET[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)===0) {
|
||||
$return = page_error("2","Author ID is Invalid or Missing.");
|
||||
exit;
|
||||
|
||||
}
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
?>
|
||||
|
||||
<TITLE>Mozilla Update :: Extensions - Author Profile: <?php echo"$row[UserName]"; ?></TITLE>
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
include"$page_header";
|
||||
|
||||
$type = "E";
|
||||
$category = $_GET["category"];
|
||||
include"inc_sidebar.php";
|
||||
?>
|
||||
<DIV id="content">
|
||||
<?php
|
||||
$userid = $_GET["id"];
|
||||
$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"];
|
||||
$userrole = $row["UserRole"];
|
||||
$useremailhide = $row["UserEmailHide"];
|
||||
?>
|
||||
<DIV class="item">
|
||||
<SPAN class="boldfont">Profile for <?php echo"$username"; ?></SPAN><BR>
|
||||
<DIV class="boxheader2"></DIV>
|
||||
<SPAN class="boldfont">Homepage:</SPAN> <?php
|
||||
if ($userwebsite) {echo"<A HREF=\"$userwebsite\" target=\"_blank\">$userwebsite</A>";
|
||||
} else {
|
||||
echo"<SPAN CLASS=\"disabled\">Not Available for this Author</SPAN>";
|
||||
}
|
||||
?><BR>
|
||||
<SPAN class="boldfont">E-Mail:</SPAN> <?php if ($useremailhide=="1") {
|
||||
echo"<SPAN class=\"disabled\">Not Disclosed by Author</SPAN>";
|
||||
} else {
|
||||
echo"<SPAN class=\"emailactive\">Contact this Author via the <A HREF=\"#email\">E-Mail form</A> below</SPAN>";
|
||||
}
|
||||
?>
|
||||
</DIV>
|
||||
<BR>
|
||||
<DIV class="item">
|
||||
<SPAN class="boldfont">All Extensions and Themes by <?php echo"$username"; ?></SPAN><BR>
|
||||
<DIV class="boxheader2"></DIV>
|
||||
<?php
|
||||
$sql = "SELECT TM.ID, TM.Type, TM.Name, TM.Description, TM.DateUpdated, TM.TotalDownloads, 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 TU.UserID = '$userid' AND TM.Type !='P'
|
||||
ORDER BY `Type` , `Name` ";
|
||||
$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)) {
|
||||
|
||||
|
||||
$sql2 = "SELECT `vID`, `Version` FROM `t_version` WHERE `ID` = '$row[ID]' AND `approved` = 'YES' ORDER BY `Version` ASC LIMIT 1";
|
||||
$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)) {
|
||||
$vid = $row2["vID"];
|
||||
$version = $row2["Version"];
|
||||
|
||||
$v++;
|
||||
$id = $row["ID"];
|
||||
$type = $row["Type"];
|
||||
$name = $row["Name"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$dateupdated = $row["DateUpdated"];
|
||||
$homepage = $row["Homepage"];
|
||||
$description = $row["Description"];
|
||||
$authors = $row["UserEmail"];
|
||||
$downloadcount = $row["TotalDownloads"];
|
||||
|
||||
$day=substr($dateupdated,8,2); //get the day
|
||||
$month=substr($dateupdated,5,2); //get the month
|
||||
$year=substr($dateupdated,0,4); //get the year
|
||||
$hour=substr($dateupdated,11,2); //get the hour
|
||||
$minute=substr($dateupdated,14,2); //get the minute
|
||||
$second=substr($dateupdated,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$dateupdated = gmdate("F d, Y g:i:sa", $timestamp); //gmdate("F d, Y", $dutimestamp);
|
||||
|
||||
echo"<DIV CLASS=\"item\">";
|
||||
echo"<SPAN class=\"title itemtitle\" style=\"margin-left: 0px\"><A HREF=\"moreinfo.php?application=$application&id=$id\">$name</A></SPAN><BR>";
|
||||
echo"<DIV class=\"profileitemdesc\">$description</DIV>\n";
|
||||
echo"<DIV class=\"baseline\">Updated: $dateupdated | Downloads: $downloadcount</DIV>\n";
|
||||
|
||||
echo"</DIV>\n";
|
||||
echo"<BR>\n";
|
||||
}
|
||||
}
|
||||
if ($numresults=="0") {
|
||||
echo"<DIV class=\"noitems\">No Extensions or Themes in the Database for $username yet...</DIV>";
|
||||
}
|
||||
?>
|
||||
</DIV>
|
||||
<BR>
|
||||
<?php if ($useremailhide !=="1") { ?>
|
||||
<A NAME="email"></A>
|
||||
<DIV class="item">
|
||||
<SPAN class="boldfont">Send an E-Mail to <?php echo"$username"; ?></SPAN><BR>
|
||||
<DIV class="boxheader2"></DIV>
|
||||
<?php
|
||||
//SendMail Returned Message Section
|
||||
if ($_GET["mail"]) {
|
||||
$mail = $_GET["mail"];
|
||||
echo"<DIV class=\"mailresult\">";
|
||||
if ($mail=="successful") {
|
||||
echo"Your message has been sent successfully...";
|
||||
} else if ($mail=="unsuccessful") {
|
||||
echo"An error occured, your message was not sent... Please try again...";
|
||||
}
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
?>
|
||||
<FORM NAME="sendmail" METHOD="POST" ACTION="sendmail.php">
|
||||
<INPUT NAME="senduserid" TYPE="HIDDEN" VALUE="<?php echo"$userid"; ?>">
|
||||
Your Name: <INPUT NAME="fromname" TYPE="TEXT" SIZE=40 MAXLENGTH=100> Email: <INPUT NAME="fromemail" TYPE="TEXT" SIZE=40 MAXLENGTH=100><BR>
|
||||
Subject: <INPUT NAME="subject" TYPE="TEXT" SIZE=40 MAXLENGTH=100><BR>
|
||||
Message:<BR>
|
||||
<CENTER><TEXTAREA NAME="body" ROWS=20 COLS=65></TEXTAREA><BR>
|
||||
<INPUT NAME="submit" TYPE="SUBMIT" VALUE="Send Message"> <INPUT NAME="reset" TYPE="RESET" VALUE="Reset Form"><BR>
|
||||
</CENTER>
|
||||
</FORM>
|
||||
</DIV>
|
||||
<BR>
|
||||
<?php } ?>
|
||||
</DIV>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,88 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<DIV class="sidelinks">
|
||||
<?php
|
||||
unset($typename);
|
||||
$types = array("E"=>"Extensions","T"=>"Themes","U"=>"Updates");
|
||||
$typename = $types["$type"];
|
||||
echo"<DIV CLASS=\"sidebartitle\">Categories:</DIV>\n";
|
||||
echo"<DIV class=\"sidebartext\">";
|
||||
if (!$category AND $index !="yes") {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<SPAN class=\"sidebartitle\"><A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=All\" TITLE=\"Show All ".ucwords($typename)." Alphabetically\">All</A></SPAN><BR>\n";
|
||||
if (!$category AND $index !="yes") {echo"</SPAN>"; }
|
||||
|
||||
// Object Categories
|
||||
$sql = "SELECT `CatName`,`CatDesc` FROM `t_categories` WHERE `CatType` = '$type' ORDER BY `CatName`";
|
||||
$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)) {
|
||||
$catname = $row["CatName"];
|
||||
$catdesc = $row["CatDesc"];
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">$catname</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
}
|
||||
?>
|
||||
<BR>
|
||||
<?php
|
||||
$catname = "Editors Pick";
|
||||
$catdesc = ucwords($typename)." picked by the Mozilla Update Editors";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">Editor's Pick</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
|
||||
$catname = "Popular";
|
||||
$catdesc = ucwords($typename)." downloaded the most";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">$catname</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
|
||||
$catname = "Top Rated";
|
||||
$catdesc = ucwords($typename)." rated the highest";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">$catname</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
|
||||
$catname = "Newest";
|
||||
$catdesc = "Most recent ".ucwords($typename);
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">$catname</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
?>
|
||||
</DIV>
|
||||
</DIV>
|
||||
@@ -1,229 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
|
||||
<TITLE>Mozilla Update :: Extensions - Add Features to Mozilla Software</TITLE>
|
||||
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
$type = "E";
|
||||
if ($_GET["application"]) {$application=$_GET["application"]; }
|
||||
include"$page_header";
|
||||
$index="yes";
|
||||
include"inc_sidebar.php";
|
||||
?>
|
||||
<DIV class="box">
|
||||
<DIV class="boxheader" style="width: 100%">What is an Extension?</DIV>
|
||||
<SPAN class="itemdescription">Extensions are small add-ons that add new functionality to <?php print(ucwords($application)); ?>.
|
||||
They can add anything from a toolbar button to a completely new feature. They allow the browser to be customized to fit the
|
||||
personal needs of each user if they need additional features<?php if ($application !=="mozilla") { ?>, while keeping <?php print(ucwords($application)); ?> small
|
||||
to download <?php } ?>.</SPAN>
|
||||
</DIV>
|
||||
|
||||
<DIV class="box">
|
||||
<DIV class="boxheader" style="width: 100%">Featured <?php print(ucwords($application)); ?> Extension</DIV>
|
||||
<?php
|
||||
$sql = "SELECT TR.ID, TM.Name, `Title`, TR.DateAdded, `Body`, `Type`, `pick` FROM `t_reviews` TR
|
||||
INNER JOIN t_main TM ON TR.ID = TM.ID
|
||||
INNER JOIN t_version TV ON TV.ID = TM.ID
|
||||
INNER JOIN t_applications TA ON TA.AppID = TV.AppID
|
||||
WHERE `Type` = '$type' AND `AppName` = '$application' AND `featured`='YES' ORDER BY `rID` DESC 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)) {
|
||||
$id = $row["ID"];
|
||||
$name = $row["Name"];
|
||||
$title = $row["Title"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$pick = $row["pick"];
|
||||
$body = $row["Body"];
|
||||
$bodylength = strlen($body);
|
||||
if ($bodylength>"250") {
|
||||
$body = substr($body,0,250);
|
||||
$body .= " <a href=\"moreinfo.php?id=$id&application=$application&page=staffreview\">[More...]</a>";
|
||||
|
||||
}
|
||||
|
||||
//Create Customizeable Timestamp
|
||||
$day=substr($dateadded,8,2); //get the day
|
||||
$month=substr($dateadded,5,2); //get the month
|
||||
$year=substr($dateadded,0,4); //get the year
|
||||
$hour=substr($dateadded,11,2); //get the hour
|
||||
$minute=substr($dateadded,14,2); //get the minute
|
||||
$second=substr($dateadded,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$date = gmdate("F, Y", $timestamp);
|
||||
|
||||
echo"<a href=\"moreinfo.php?id=$id\">$name</A> -- $title";
|
||||
if ($pick=="YES") {echo" - $date Editors Pick"; }
|
||||
echo"<BR>\n";
|
||||
echo"<SPAN class=\"itemdescription\">$body</SPAN><BR>\n";
|
||||
}
|
||||
?>
|
||||
</DIV>
|
||||
<?php
|
||||
//Temporary!! Current Version Array Code
|
||||
$currentver_array = array("firefox"=>"1.0", "thunderbird"=>"1.0", "mozilla"=>"1.7");
|
||||
$currentver_display_array = array("firefox"=>"1.0", "thunderbird"=>"1.0", "mozilla"=>"1.7.x");
|
||||
$currentver = $currentver_array[$application];
|
||||
$currentver_display = $currentver_display_array[$application];
|
||||
?>
|
||||
<DIV class="box" style="width: 80%; min-height: 200px; border: 0px">
|
||||
<DIV class="boxcolumns">
|
||||
<DIV class="boxheader"><A HREF="showlist.php?application=<?php echo"$application"; ?>&category=Popular">Most Popular</A>:</DIV>
|
||||
<?php
|
||||
$i=0;
|
||||
$sql = "SELECT TM.ID, TV.vID,TM.Name, TV.Version, TM.TotalDownloads, TM.downloadcount
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
WHERE `Type` = '$type' AND `AppName` = '$application' AND `minAppVer_int` <='$currentver' AND `maxAppVer_int` >= '$currentver' AND `downloadcount` > '0' AND `approved` = 'YES' ORDER BY `downloadcount` 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++;
|
||||
$id = $row["ID"];
|
||||
$vid = $row["vID"];
|
||||
$name = $row["Name"];
|
||||
$version = $row["Version"];
|
||||
$downloadcount = $row["downloadcount"];
|
||||
$totaldownloads = $row["TotalDownloads"];
|
||||
if ($lastname == $name) {$i--; continue; }
|
||||
echo"$i - <a href=\"moreinfo.php?application=$application&id=$id\">$name</a><br>\n";
|
||||
echo"<SPAN class=\"smallfont nocomment\">($downloadcount downloads)</SPAN><BR>\n";
|
||||
|
||||
$lastname = $name;
|
||||
if ($i >= "5") {break;}
|
||||
}
|
||||
?>
|
||||
<BR>
|
||||
</DIV>
|
||||
<DIV class="boxcolumns">
|
||||
<DIV class="boxheader"><A HREF="showlist.php?category=Top Rated">Top Rated</A>:</DIV>
|
||||
<?php
|
||||
$r=0;
|
||||
$usednames = array();
|
||||
$sql = "SELECT TM.ID, TV.vID, TM.Name, TV.Version, TM.Rating, TU.UserName
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_authorxref TAX ON TAX.ID = TM.ID
|
||||
INNER JOIN t_userprofiles TU ON TU.UserID = TAX.UserID
|
||||
WHERE `Type` = '$type' AND `AppName` = '$application' AND `minAppVer_int` <='$currentver' AND `maxAppVer_int` >= '$currentver' AND `Rating` > '0' AND `approved` = 'YES' ORDER BY `Rating` DESC, `Name` ASC, `Version` 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)) {
|
||||
$r++; $s++;
|
||||
$id = $row["ID"];
|
||||
$vid = $row["vID"];
|
||||
$name = $row["Name"];
|
||||
$version = $row["Version"];
|
||||
$rating = $row["Rating"];
|
||||
$arraysearch = array_search("$name", $usednames);
|
||||
if ($arraysearch !== false AND $usedversions[$arraysearch]['version']<$version) {$r--; continue; } //
|
||||
echo"$r - <a href=\"moreinfo.php?application=$application&id=$id\">$name</a> ";
|
||||
|
||||
//$rating = round($rating);
|
||||
echo"<SPAN title=\"Rated: $rating of 5\" style=\"font-size: 8pt\">";
|
||||
for ($i = 1; $i <= floor($rating); $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
if ($rating>floor($rating)) {
|
||||
$val = ($rating-floor($rating))*10;
|
||||
echo"<IMG SRC=\"/images/stars/star_0$val.png\" BORDER=0 ALT=\"\">";
|
||||
$i++;
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
echo"</SPAN><br>\n";
|
||||
//echo"<SPAN class=\"smallfont nocomment\">By $author</SPAN><BR>\n";
|
||||
$usednames[$s] = $name;
|
||||
$usedversions[$s] = $version;
|
||||
if ($r >= "5") {break;}
|
||||
}
|
||||
unset($usednames, $usedversions, $r, $s, $i);
|
||||
?>
|
||||
</DIV>
|
||||
<DIV class="boxcolumns">
|
||||
<DIV class="boxheader"><A HREF="showlist.php?category=Newest">Most Recent</A>:</DIV>
|
||||
<?php
|
||||
$i=0;
|
||||
$sql = "SELECT TM.ID, TV.vID, TM.Name, TV.Version, TV.DateAdded
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID
|
||||
WHERE `Type` = '$type' AND `AppName` = '$application' AND `minAppVer_int` <='$currentver' AND `maxAppVer_int` >= '$currentver' AND (`OSName` = '$_SESSION[app_os]' OR `OSName` = 'ALL') AND `approved` = 'YES' ORDER BY `DateAdded` 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++;
|
||||
$id = $row["ID"];
|
||||
$vid = $row["vID"];
|
||||
$name = $row["Name"];
|
||||
$version = $row["Version"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
//Create Customizeable Datestamp
|
||||
$timestamp = strtotime("$dateadded");
|
||||
$dateadded = gmdate("F d, Y g:i:sa", $timestamp); // $dateupdated = gmdate("F d, Y g:i:sa T", $timestamp);
|
||||
|
||||
if ($lastname == $name) {$i--; continue; }
|
||||
echo"$i - <a href=\"moreinfo.php?application=$application&id=$id&vid=$vid\">$name $version</a><BR>\n";
|
||||
echo"<SPAN class=\"smallfont nocomment\">($dateadded)</SPAN><BR>\n";
|
||||
|
||||
$lastname = $name;
|
||||
if ($i >= "5") {break;}
|
||||
}
|
||||
?>
|
||||
</DIV>
|
||||
</DIV>
|
||||
<BR>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,106 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
//Get Full Information for the file requested.
|
||||
$sql = "SELECT `URI` FROM `t_version` WHERE `ID`='$_GET[id]' AND `vID`='$_GET[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"];
|
||||
|
||||
header("Location: $uri");
|
||||
exit;
|
||||
|
||||
//XXX This codepath sucks performance wise and has been disabled. See Bug 267822.
|
||||
|
||||
// New DownloadCount management Code..
|
||||
//Check for user, to see if they recently accessed this file (filters duplicate/triplicate+ requests in a short period).
|
||||
$maxlife = date("YmdHis", mktime(date("H"), date("i")-10, date("s"), date("m"), date("d"), date("Y")));
|
||||
$sql = "SELECT `dID` FROM `t_downloads` WHERE `ID`='$_GET[id]' AND `vID`='$_GET[vid]' AND `user_ip`='$_SERVER[REMOTE_ADDR]' AND `user_agent` = '$_SERVER[HTTP_USER_AGENT]' AND `date`>'$maxlife' AND `type`='download' 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)=="0") {
|
||||
//Insert a record of this download for the next 10 minutes anyway. :-)
|
||||
$today=date("YmdHis");
|
||||
$sql = "INSERT INTO `t_downloads` (`ID`,`date`,`vID`, `user_ip`, `user_agent`, `type`) VALUES ('$_GET[id]','$today','$_GET[vid]', '$_SERVER[REMOTE_ADDR]', '$_SERVER[HTTP_USER_AGENT]', 'download');";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
//Cleanup the Individual Downloads part of the table for old records
|
||||
$sql = "DELETE FROM `t_downloads` WHERE `date`<'$maxlife' AND `type`='download'";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
$today=date("Ymd")."000000";
|
||||
//Per day download tracking -- Record hits for this day in the record (if it doesn't exist create it)
|
||||
$sql = "SELECT `dID` FROM `t_downloads` WHERE `ID`='$_GET[id]' AND `date`='$today' AND `type`='count' 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)=="0") {
|
||||
$sql = "INSERT INTO `t_downloads` (`ID`,`date`,`downloadcount`,`type`) VALUES ('$_GET[id]','$today','1','count');";
|
||||
} else {
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
$sql = "UPDATE `t_downloads` SET `downloadcount`=downloadcount+1 WHERE `dID`='$row[dID]' LIMIT 1";
|
||||
}
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
|
||||
//Download Statistic Management Code
|
||||
// Maintain the last 7 days record count
|
||||
// This is also where the weekly w/e code would go. if that feature is ever created.
|
||||
$mindate = date("Ymd", mktime(0, 0, 0, date("m"), date("d")-7, date("Y")))."000000";
|
||||
$downloadcount="0";
|
||||
$sql = "SELECT `downloadcount` FROM `t_downloads` WHERE `ID`='$_GET[id]' AND `date`>='$mindate' AND `type`='count' ORDER BY `date` 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)) {
|
||||
$downloadcount = $downloadcount+$row["downloadcount"];
|
||||
}
|
||||
//Update the 7 day count in the main record.
|
||||
$sql = "UPDATE `t_main` SET `downloadcount`='$downloadcount' WHERE `ID`='$_GET[id]' LIMIT 1";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
//Update the total downloadcount in the main record.
|
||||
$sql = "UPDATE `t_main` SET `TotalDownloads`=TotalDownloads+1 WHERE `ID`='$_GET[id]' LIMIT 1";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
//Clean up the Counts per day for >8 days. (and in the future, compile the week/ending records for this data)
|
||||
$sql = "DELETE FROM `t_downloads` WHERE `ID`='$_GET[id]' AND `date`<'$mindate' AND `type`='count'";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
}
|
||||
|
||||
//Send User on their way to the file...
|
||||
header("Location: $uri")
|
||||
?>
|
||||
@@ -1,550 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
|
||||
<?php
|
||||
//Bookmarking-Friendly Page Title
|
||||
$sql = "SELECT Name FROM `t_main` WHERE ID = '$_GET[id]' AND Type = 'E' 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)===0) {
|
||||
$return = page_error("1","Extension ID is Invalid or Missing.");
|
||||
exit;
|
||||
|
||||
}
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
|
||||
//Page Titles
|
||||
$pagetitles = array("releases"=>"All Releases", "comments"=>"User Comments", "staffreview"=>"Editor Review", "opinion"=>" My Opinion");
|
||||
$pagetitle = $pagetitles[$_GET["page"]];
|
||||
?>
|
||||
|
||||
<TITLE>Mozilla Update :: Extensions -- More Info: <?php echo"$row[Name]"; if ($pagetitle) {echo" - $pagetitle"; } ?></TITLE>
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
include"$page_header";
|
||||
$type = "E";
|
||||
$category=$_GET["category"];
|
||||
include"inc_sidebar.php";
|
||||
?>
|
||||
<DIV id="content">
|
||||
<?php
|
||||
//Get Author Data
|
||||
$sql2 = "SELECT TM.Name, TU.UserName, TU.UserID, 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 = '$_GET[id]'
|
||||
ORDER BY `Type` , `Name` 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)) {
|
||||
$authorarray[$row2[Name]][] = $row2["UserName"];
|
||||
$authorids[$row2[UserName]] = $row2["UserID"];
|
||||
}
|
||||
|
||||
|
||||
//Run Query and Create List
|
||||
$s = "0";
|
||||
$sql = "SELECT TM.ID, TM.Name, TM.DateAdded, TM.DateUpdated, TM.Homepage, TM.Description, TM.Rating, TV.vID, TV.Version, TV.MinAppVer, TV.MaxAppVer, TV.Size, TV.DateAdded AS VerDateAdded, TV.DateUpdated AS VerDateUpdated, TV.URI, TV.Notes, TM.TotalDownloads, TA.AppName, TOS.OSName, TP.PreviewURI
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID
|
||||
LEFT JOIN t_previews TP ON TV.vID = TP.vID
|
||||
WHERE TM.ID = '$_GET[id]' AND `approved` = 'YES' ";
|
||||
if ($_GET["vid"]) { $sql .=" AND TV.vID = '$_GET[vid]' "; }
|
||||
$sql .= "ORDER BY `Name` , `Version` 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);
|
||||
|
||||
|
||||
$v++;
|
||||
$id = $row["ID"];
|
||||
$type = $row["Type"];
|
||||
$name = $row["Name"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$dateupdated = $row["DateUpdated"];
|
||||
$homepage = $row["Homepage"];
|
||||
$description = $row["Description"];
|
||||
$rating = $row["Rating"];
|
||||
$authors = $authorarray[$name];
|
||||
$osname = $row["OSName"];
|
||||
|
||||
$vid = $row["vID"];
|
||||
if (!$_GET['vid']) {$_GET['vid']=$vid;}
|
||||
$appname = $row["AppName"];
|
||||
$minappver = $row["MinAppVer"];
|
||||
$maxappver = $row["MaxAppVer"];
|
||||
$verdateadded = $row["VerDateAdded"];
|
||||
$verdateupdated = $row["VerDateUpdated"];
|
||||
$filesize = $row["Size"];
|
||||
$notes = $row["Notes"];
|
||||
$version = $row["Version"];
|
||||
$uri = $row["URI"];
|
||||
$previewuri = $row["PreviewURI"];
|
||||
$downloadcount = $row["TotalDownloads"];
|
||||
|
||||
if ($VerDateAdded > $dateadded) {$dateadded = $VerDateAdded; }
|
||||
if ($VerDateUpdated > $dateupdated) {$dateupdated = $VerDateUpdated; }
|
||||
|
||||
|
||||
|
||||
//Turn Authors Array into readable string...
|
||||
$authorcount = count($authors);
|
||||
foreach ($authors as $author) {
|
||||
$userid = $authorids[$author];
|
||||
$n++;
|
||||
$authorstring .= "<A HREF=\"authorprofiles.php?application=$application&id=$userid\">$author</A>";
|
||||
if ($authorcount != $n) {$authorstring .=", "; }
|
||||
|
||||
}
|
||||
$authors = $authorstring;
|
||||
unset($authorstring, $n); // Clear used Vars..
|
||||
|
||||
//Create Customizeable Timestamp for DateAdded/DateUpdated
|
||||
$day=substr($dateadded,8,2); //get the day
|
||||
$month=substr($dateadded,5,2); //get the month
|
||||
$year=substr($dateadded,0,4); //get the year
|
||||
$hour=substr($dateadded,11,2); //get the hour
|
||||
$minute=substr($dateadded,14,2); //get the minute
|
||||
$second=substr($dateadded,17,2); //get the sec
|
||||
$datimestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
|
||||
$day=substr($dateupdated,8,2); //get the day
|
||||
$month=substr($dateupdated,5,2); //get the month
|
||||
$year=substr($dateupdated,0,4); //get the year
|
||||
$hour=substr($dateupdated,11,2); //get the hour
|
||||
$minute=substr($dateupdated,14,2); //get the minute
|
||||
$second=substr($dateupdated,17,2); //get the sec
|
||||
$dutimestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
|
||||
$dateadded = gmdate("F d, Y g:i:sa", $datimestamp); //gmdate("F d, Y", $datimestamp);
|
||||
$dateupdated = gmdate("F d, Y g:i:sa", $dutimestamp); //gmdate("F d, Y", $dutimestamp);
|
||||
|
||||
//Rating
|
||||
if (!$rating) { $rating="0"; }
|
||||
?>
|
||||
|
||||
|
||||
<DIV class="tabbar">
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid"; ?>">More Info</A></DIV>
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid&page=releases"; ?>">All Releases</A></DIV>
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid&page=comments"; ?>">Comments</A></DIV>
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid&page=staffreview"; ?>">Editor Review</A></DIV>
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid&page=opinion"; ?>">My Opinion</A></DIV>
|
||||
</DIV>
|
||||
<?php
|
||||
echo"<DIV class=\"item\">\n";
|
||||
//echo"<DIV style=\"height: 100px\">"; //Why?!?
|
||||
if ($previewuri) {
|
||||
list($width, $height, $imagetype, $attr) = getimagesize("$websitepath"."$previewuri");
|
||||
|
||||
echo"<IMG SRC=\"$previewuri\" BORDER=0 HEIGHT=$height WIDTH=$width STYLE=\"float: right; padding-right: 5px\" ALT=\"$name preview\">";
|
||||
}
|
||||
|
||||
//Upper-Right Side Box
|
||||
echo"<DIV class=\"liststars\" title=\"$rating of 5 stars\" style=\"font-size: 8pt\"><A HREF=\"moreinfo.php?application=$application&id=$id&page=comments\">";
|
||||
for ($i = 1; $i <= floor($rating); $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
if ($rating>floor($rating)) {
|
||||
$val = ($rating-floor($rating))*10;
|
||||
echo"<IMG SRC=\"/images/stars/star_0$val.png\" BORDER=0 ALT=\"\">";
|
||||
$i++;
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
echo"</A></DIV>\n";
|
||||
|
||||
echo"<DIV class=\"itemtitle\">";
|
||||
echo"<SPAN class=\"title\"><A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid\">$name $version</A></SPAN><BR>";
|
||||
echo"<SPAN class=\"authorline\">By $authors</SPAN><br>";
|
||||
echo"</DIV>";
|
||||
|
||||
//Description & Version Notes
|
||||
echo"<SPAN class=\"itemdescription\">";
|
||||
echo"$description<BR>";
|
||||
if ($notes) {echo"$notes"; }
|
||||
echo"</SPAN>\n";
|
||||
|
||||
//echo"</DIV>\n";
|
||||
echo"<BR>\n\n";
|
||||
|
||||
$page = $_GET["page"];
|
||||
if (!$page or $page=="general") {
|
||||
?>
|
||||
<DIV class="downloadbox">
|
||||
<?php
|
||||
//Create DateStamp for Version Release Date ($verdateadded)
|
||||
$day=substr($verdateadded,8,2); //get the day
|
||||
$month=substr($verdateadded,5,2); //get the month
|
||||
$year=substr($verdateadded,0,4); //get the year
|
||||
$hour=substr($verdateadded,11,2); //get the hour
|
||||
$minute=substr($verdateadded,14,2); //get the minute
|
||||
$second=substr($verdateadded,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$verdateadded = gmdate("F d, Y", $timestamp);
|
||||
|
||||
//Calculate Download Time
|
||||
$speed = "56"; //In Kbit/s
|
||||
$speedinkb = "5.5"; //$speedinkb = $speed/8; //In KB/s
|
||||
$timeinsecs = round($filesize/$speedinkb);
|
||||
$time_minutes = floor($timeinsecs/60);
|
||||
$time_seconds = round($timeinsecs-($time_minutes*60),-1);
|
||||
$time_seconds = $time_seconds+2; //Compensate for mirror overhead
|
||||
|
||||
$time = "About ";
|
||||
if ($time_minutes>0) {
|
||||
$time .= "$time_minutes minutes ";
|
||||
}
|
||||
$time .="$time_seconds seconds";
|
||||
|
||||
$filename = basename($uri);
|
||||
|
||||
echo"
|
||||
<SPAN style=\"itemdescription\">Released on $verdateadded</SPAN><BR>
|
||||
|
||||
|
||||
<DIV class=\"moreinfoinstall\">";
|
||||
if ($appname=="Thunderbird") {
|
||||
echo"<A HREF=\"install.php/$filename?id=$id&vid=$vid\" TITLE=\"Download $name $version (Right-Click to Download)\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" ALT=\"\"> ( Download Now )</A><BR>";
|
||||
} else {
|
||||
echo"<A HREF=\"javascript:void(InstallTrigger.install({'$name $version':'$uri'}))\" TITLE=\"Install $name $version\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" ALT=\"\"> ( Install Now )</A><BR>";
|
||||
//echo"<A HREF=\"install.php/$filename?id=$id&vid=$vid\" TITLE=\"Install $name $version (Right-Click to Download)\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" ALT=\"\"> ( Install Now )</A><BR>";
|
||||
}
|
||||
echo"
|
||||
<SPAN class=\"filesize\"> $filesize KB, ($time @ $speed"."k)</SPAN></DIV>
|
||||
<BR>";
|
||||
if ($application=="thunderbird") {
|
||||
echo"<SPAN style=\"font-size: 10pt; color: #00F\">Extension Install Instructions for Thunderbird Users:</SPAN><BR>
|
||||
<SPAN style=\"font-size: 8pt;\">(1) Right-Click the link above and choose \"Save Link As...\" to Download and save the file to your hard disk.<BR>
|
||||
(2) In Mozilla Thunderbird, open the extension manager (Tools Menu/Extensions)<BR>
|
||||
(3) Click the Install button, and locate/select the file you downloaded and click \"OK\"</SPAN><BR>
|
||||
";
|
||||
}
|
||||
if ($homepage) {echo"<SPAN style=\"font-size:10pt\">Having a problem with this Extension? For Help and Technical Support, visit the <A HREF=\"$homepage\">Extension's Homepage</A>.</SPAN>";}
|
||||
|
||||
echo"<UL style=\"font-size:10pt\">";
|
||||
if ($homepage) {echo"<LI> <A HREF=\"$homepage\">Extension Home Page</A>"; }
|
||||
if ($appname !="Thunderbird") {echo"<LI> <a href=\"install.php/$filename?id=$id&vid=$vid\" TITLE=\"Right-click to Save\">Download Extension</A>"; }
|
||||
echo"<LI> <A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&page=releases\">Other Versions</A>";
|
||||
?>
|
||||
</UL>
|
||||
</DIV>
|
||||
|
||||
<DIV class="commentbox">
|
||||
<DIV class="boxheader">User Comments:</DIV>
|
||||
<BR>
|
||||
<?php
|
||||
$sql = "SELECT CommentName, CommentTitle, CommentNote, CommentDate, CommentVote FROM `t_feedback` WHERE ID = '$_GET[id]' AND CommentNote IS NOT NULL ORDER BY `CommentDate` DESC LIMIT 1";
|
||||
$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);
|
||||
while ($row = mysql_fetch_array($sql_result)) {
|
||||
$commentname = $row["CommentName"];
|
||||
$commenttitle = $row["CommentTitle"];
|
||||
$commentnotes = $row["CommentNote"];
|
||||
$commentdate = $row["CommentDate"];
|
||||
$rating = $row["CommentVote"];
|
||||
|
||||
//Create Customizeable Datestamp
|
||||
$day=substr($commentdate,8,2); //get the day
|
||||
$month=substr($commentdate,5,2); //get the month
|
||||
$year=substr($commentdate,0,4); //get the year
|
||||
$hour=substr($commentdate,11,2); //get the hour
|
||||
$minute=substr($commentdate,14,2); //get the minute
|
||||
$second=substr($commentdate,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$commentdate = gmdate("F d, Y g:ia", $timestamp);
|
||||
|
||||
echo"<DIV class=\"commenttitlebar\">";
|
||||
echo"<SPAN class=\"commenttitle\">$commenttitle</SPAN>";
|
||||
echo"<SPAN class=\"liststars\">";
|
||||
|
||||
for ($i = 1; $i <= $rating; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"*\">";
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"\">";
|
||||
}
|
||||
echo"</SPAN>";
|
||||
echo"</DIV>";
|
||||
echo" By $commentname<BR>\n";
|
||||
echo" <BR>\n";
|
||||
echo"$commentnotes<BR>\n\n";
|
||||
echo" <BR>\n";
|
||||
echo"<DIV class=\"commentfooter\">\n";
|
||||
echo"$commentdate | <A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&page=comments\">More Comments...</A> | <A HREF=\"moreinfo.php?id=$id&vid=$vid&category=$category&vid=$vid&page=opinion\">Rate It!</A>\n";
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
|
||||
if ($num_results=="0") {
|
||||
echo"<DIV class=\"nocomment\">";
|
||||
echo"Nobody's Commented on this Extension Yet<BR>";
|
||||
echo"Be the First! <A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&page=opinion\">Rate It!</A>";
|
||||
echo"</DIV>";
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
</DIV>
|
||||
|
||||
<?php
|
||||
} else if ($page=="releases") {
|
||||
|
||||
echo"<DIV class=\"mipageheading\">";
|
||||
echo"Recent Releases:<BR>";
|
||||
echo"</DIV>";
|
||||
|
||||
$sql = "SELECT TV.vID, TV.Version, TV.MinAppVer, TV.MaxAppVer, TV.Size, TV.URI, TV.Notes, TA.AppName, TOS.OSName
|
||||
FROM `t_version` TV
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID
|
||||
WHERE TV.ID = '$_GET[id]' AND `approved` = 'YES'
|
||||
ORDER BY `Version` DESC, `OSName` ASC
|
||||
LIMIT 0, 10";
|
||||
|
||||
$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"];
|
||||
$minappver = $row["MinAppVer"];
|
||||
$maxappver = $row["MaxAppVer"];
|
||||
$filesize = $row["Size"];
|
||||
$notes = $row["Notes"];
|
||||
$version = $row["Version"];
|
||||
$uri = $row["URI"];
|
||||
$osname = $row["OSName"];
|
||||
$appname = $row["AppName"];
|
||||
$filename = basename($uri);
|
||||
|
||||
echo"<DIV>"; //Open Version DIV
|
||||
|
||||
//Description & Version Notes
|
||||
echo"<SPAN class=\"itemdescription\">";
|
||||
echo"<SPAN class=\"listtitle\"><A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid\">Version $version</A></SPAN><br>\n";
|
||||
if ($notes) {echo"$notes"; }
|
||||
echo"</SPAN>\n";
|
||||
|
||||
//Icon Bar Modules
|
||||
echo"<DIV style=\"height: 34px\">";
|
||||
echo"<DIV class=\"iconbar\" style=\"width: 100px;\">";
|
||||
|
||||
if ($appname=="Thunderbird") {
|
||||
echo"<A HREF=\"install.php/$filename?id=$id&vid=$vid\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"Install $name (Right-Click to Download)\" ALT=\"\">Download</A>";
|
||||
} else {
|
||||
echo"<A HREF=\"javascript:void(InstallTrigger.install({'$name $version':'$uri'}))\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"Install $name (Right-Click to Download)\" ALT=\"\">Install</A>";
|
||||
}
|
||||
|
||||
echo"<BR><SPAN class=\"filesize\">Size: $filesize kb</SPAN></DIV>";
|
||||
//echo"<DIV class=\"iconbar\" style=\"width: 100px;\"><A HREF=\"install.php/$filename?id=$id&vid=$vid\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"Install $name (Right-Click to Download)\" ALT=\"\">Install</A><BR><SPAN class=\"filesize\">Size: $filesize kb</SPAN></DIV>";
|
||||
echo"<DIV class=\"iconbar\"><IMG SRC=\"/images/".strtolower($appname)."_icon.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float: left\" ALT=\"$appname\"> Works with:<BR> $minappver - $maxappver</DIV>";
|
||||
echo"<DIV class=\"iconbar\" style=\"width: 90px;\"><IMG SRC=\"/images/".strtolower($osname)."_icon.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float: left\" ALT=\"\">OS:<BR>"; if($osname=="ALL") {echo"All OSes";} else {echo"$osname";} echo"</DIV>";
|
||||
echo"</DIV>";
|
||||
|
||||
echo"</DIV>";
|
||||
}
|
||||
|
||||
//End General Page
|
||||
} else if ($page=="comments") {
|
||||
//Comments/Ratings Page
|
||||
echo"<DIV class=\"mipageheading\">";
|
||||
echo"User Comments:<BR>";
|
||||
echo"</DIV>";
|
||||
$sql = "SELECT CommentName, CommentTitle, CommentNote, CommentDate, CommentVote FROM `t_feedback` WHERE ID = '$_GET[id]' AND CommentNote IS NOT NULL ORDER BY `CommentDate` ASC";
|
||||
$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);
|
||||
while ($row = mysql_fetch_array($sql_result)) {
|
||||
$name = $row["CommentName"];
|
||||
$title = $row["CommentTitle"];
|
||||
$notes = $row["CommentNote"];
|
||||
$date = $row["CommentDate"];
|
||||
$rating = $row["CommentVote"];
|
||||
|
||||
echo"<DIV class=\"commenttitlebar\">";
|
||||
echo"<SPAN class=\"commenttitle\">$title</SPAN>";
|
||||
echo"<SPAN class=\"liststars\">";
|
||||
|
||||
for ($i = 1; $i <= $rating; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"*\">";
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"\">";
|
||||
}
|
||||
echo"</SPAN>";
|
||||
echo"</DIV>";
|
||||
echo"$notes<BR>\n\n";
|
||||
|
||||
echo"<DIV class=\"commentfooter\">\n";
|
||||
echo"<SPAN style=\"padding-left: 30px; font-size: 8pt; font-weight: bold\">Posted on $date by $name</SPAN><br>";
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
|
||||
if ($num_results=="0") {
|
||||
echo"<DIV class=\"nocomment\">";
|
||||
echo"Nobody has commented on this extension yet...<BR>
|
||||
Be the First!
|
||||
<A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&page=opinion\">Leave your comments</A>...";
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
|
||||
|
||||
echo"<DIV style=\"height: 5px;\"></DIV>";
|
||||
|
||||
} else if ($page=="staffreview") {
|
||||
//Staff/Editor Review Tab
|
||||
echo"<DIV class=\"mipageheading\">";
|
||||
echo"Editor Review:<BR>";
|
||||
echo"</DIV>";
|
||||
|
||||
echo"<DIV class=\"reviewbox\">\n";
|
||||
$sql = "SELECT TR.ID, `Title`, TR.DateAdded, `Body`, `Type`, `Pick`, TU.UserName FROM `t_reviews` TR
|
||||
INNER JOIN t_main TM ON TR.ID = TM.ID
|
||||
INNER JOIN t_userprofiles TU ON TR.AuthorID = TU.UserID
|
||||
WHERE `Type` = 'E' AND TR.ID = '$_GET[id]' ORDER BY `rID` DESC LIMIT 1";
|
||||
$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);
|
||||
while ($row = mysql_fetch_array($sql_result)) {
|
||||
$id = $row["ID"];
|
||||
$title = $row["Title"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$body = $row["Body"];
|
||||
$pick = $row["Pick"];
|
||||
$username = $row["UserName"];
|
||||
|
||||
//Create Customizeable Timestamp
|
||||
// $day=substr($dateadded,8,2); //get the day
|
||||
// $month=substr($dateadded,5,2); //get the month
|
||||
// $year=substr($dateadded,0,4); //get the year
|
||||
// $hour=substr($dateadded,11,2); //get the hour
|
||||
// $minute=substr($dateadded,14,2); //get the minute
|
||||
// $second=substr($dateadded,17,2); //get the sec
|
||||
// $timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$timestamp = strtotime("$dateadded");
|
||||
$date = gmdate("F, Y", $timestamp);
|
||||
$posteddate = date("F j Y, g:i:sa", $timestamp);
|
||||
|
||||
|
||||
echo"$title<br>\n";
|
||||
if ($pick=="YES") {echo"<SPAN class=\"itemdescription\"> $date Editors Pick<BR>\n"; }
|
||||
echo"<BR>\n";
|
||||
echo"$body</SPAN><BR>\n";
|
||||
echo"<DIV class=\"commentfooter\">Posted on $posteddate by $username</DIV>\n";
|
||||
}
|
||||
$typename = "extension";
|
||||
if ($num_results=="0") {
|
||||
echo"
|
||||
<SPAN style=\"font-weight: bold\">
|
||||
This $typename has not yet been reviewed.<BR><BR>
|
||||
|
||||
To see what other users think of this extension, view the <A HREF=\"moreinfo.php?application=$application&id=$id&page=comments\">User Comments...</A>
|
||||
</SPAN>
|
||||
";
|
||||
|
||||
|
||||
}
|
||||
echo"</DIV>\n";
|
||||
|
||||
} else if ($page=="opinion") {
|
||||
//My Opinion Tab
|
||||
echo"<DIV class=\"mipageheading\">";
|
||||
echo"Your Rating / Feedback:<BR>";
|
||||
echo"</DIV>";
|
||||
?>
|
||||
<?php
|
||||
if ($_GET["error"]=="norating") {
|
||||
echo"<DIV class=\"errorbox\">\n
|
||||
Your comment submission had the following error(s), please fix these errors and try again.<br>\n
|
||||
Rating field cannot be left blank.<br>\n
|
||||
</DIV>\n";
|
||||
}
|
||||
?>
|
||||
<DIV class="opinionform">
|
||||
<FORM NAME="opinon" METHOD="POST" ACTION="../core/postfeedback.php">
|
||||
<INPUT NAME="id" TYPE="HIDDEN" VALUE="<?php echo"$id"; ?>">
|
||||
<INPUT NAME="vid" TYPE="HIDDEN" VALUE="<?php echo"$vid"; ?>">
|
||||
<INPUT NAME="type" TYPE="HIDDEN" value="E">
|
||||
Your Name:<BR>
|
||||
<INPUT NAME="name" TYPE="TEXT" SIZE=30 MAXLENGTH=30><BR>
|
||||
|
||||
Rating:*<BR>
|
||||
<SELECT NAME="rating">
|
||||
<OPTION value="">Rating:
|
||||
<OPTION value="5">5 Stars
|
||||
<OPTION value="4">4 Stars
|
||||
<OPTION value="3">3 Stars
|
||||
<OPTION value="2">2 Stars
|
||||
<OPTION value="1">1 Star
|
||||
<OPTION value="0">0 Stars
|
||||
</SELECT><BR>
|
||||
|
||||
Title:<BR>
|
||||
<INPUT NAME="title" TYPE="TEXT" SIZE=30 MAXLENGTH=50><BR>
|
||||
|
||||
Review/Comments:<BR>
|
||||
<TEXTAREA NAME="comments" ROWS=5 COLS=55></TEXTAREA><BR>
|
||||
<SPAN class="smallfont">No Comment?<INPUT NAME="commententered" TYPE="CHECKBOX" VALUE="FALSE"></SPAN><BR>
|
||||
<INPUT NAME="submit" TYPE="SUBMIT" VALUE="Post"> <INPUT NAME="reset" TYPE="RESET" VALUE="Reset"><BR>
|
||||
<SPAN class="smallfont">* Required Fields</SPAN>
|
||||
</FORM>
|
||||
|
||||
</DIV>
|
||||
<?php
|
||||
} // End Pages
|
||||
echo"<DIV class=\"baseline\">";
|
||||
echo"Date Added: $dateadded | Last Updated: $dateupdated | ";
|
||||
echo"Total Downloads: $downloadcount<BR>";
|
||||
echo"</DIV>\n";
|
||||
echo"</DIV>\n";
|
||||
echo"<BR>\n";
|
||||
?>
|
||||
</DIV>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
//Mozilla Update Message System
|
||||
//Send Mail script...
|
||||
exit;
|
||||
require"../core/config.php";
|
||||
|
||||
if (!$_POST["senduserid"]) {
|
||||
exit("<B>Error: no valid user to e-mail, possible attempt to spam detected...</B>");
|
||||
}
|
||||
|
||||
//Get E-Mail Address from DB based on passed data..
|
||||
$sql = "SELECT `UserEmail` FROM `t_userprofiles` WHERE `UserID` = '$_POST[senduserid]' AND `UserEmailHide`='0' LIMIT 1";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("<FONT COLOR=\"#FF0000\"><B>MySQL Error ".mysql_errno().": ".mysql_error()."</B></FONT>", E_USER_NOTICE);
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
$to_address=$row["UserEmail"];
|
||||
|
||||
|
||||
//All From_, To_, and subject variables are passed from the form
|
||||
// and do not need to be defined here.. unless debugging..
|
||||
|
||||
$from_name = $_POST["fromname"];
|
||||
$from_address = $_POST["fromemail"];
|
||||
$subject = $_POST["subject"];
|
||||
|
||||
//Anti-Abuse
|
||||
$findme = '@';
|
||||
$pos = strpos($to_address, $findme);
|
||||
|
||||
if ($pos === false) {
|
||||
//This isn't a valid e-mail address being passed...
|
||||
//Send the e-mail message to the $from_address, just for fun..
|
||||
$to_address = $from_address;
|
||||
}
|
||||
|
||||
$message = $_POST["body"];
|
||||
|
||||
//Message Footer (Auto-Appended to Messages sent using this form.
|
||||
$message .= "\n\n";
|
||||
$message .= "____________________________________\n";
|
||||
$message .= "Message sent through the Mozilla Update Message system.\n
|
||||
The system allows visitors to send you e-mail without revealing your e-mail address to them.
|
||||
If you no longer wish to receive e-mail from visitors, you may change your preferences online at http;//update.mozilla.org.\n";
|
||||
|
||||
|
||||
$headers .= "MIME-Version: 1.0\r\n";
|
||||
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
|
||||
$headers .= "From: ".$from_name." <".$from_address.">\r\n";
|
||||
$headers .= "Reply-To: ".$from_name." <".$from_address.">\r\n";
|
||||
$headers .= "X-Priority: 3\r\n";
|
||||
$headers .= "X-MSMail-Priority: Normal\r\n";
|
||||
$headers .= "X-Mailer: Mozilla Update Message System 1.0";
|
||||
|
||||
$mailstatus = mail($to_address, $subject, $message, $headers);
|
||||
|
||||
|
||||
|
||||
if ($mailstatus===FALSE) {
|
||||
//Message Unsuccessful
|
||||
$return_path="extensions/authorprofiles.php?id=$_POST[senduserid]&mail=unsuccessful";
|
||||
|
||||
} else if ($mailstatus===TRUE) {
|
||||
//Message Successful
|
||||
$return_path="extensions/authorprofiles.php?id=$_POST[senduserid]&mail=successful";
|
||||
|
||||
}
|
||||
header("Location: http://$_SERVER[HTTP_HOST]/$return_path#email");
|
||||
exit;
|
||||
|
||||
?>
|
||||
@@ -1,484 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
|
||||
<?php
|
||||
//----------------------------
|
||||
//Global General $_GET variables
|
||||
//----------------------------
|
||||
//Detection Override
|
||||
if ($_GET["version"]) {$app_version=$_GET["version"]; $_SESSION["app_version"]=$_GET["version"];}
|
||||
|
||||
if ($_GET["numpg"]) {$_SESSION["items_per_page"]=$_GET["numpg"]; }
|
||||
if ($_SESSION["items_per_page"]) {$items_per_page = $_SESSION["items_per_page"];} else {$items_per_page="10";}//Default Num per Page is 10
|
||||
|
||||
if ($_GET["category"]) { $_SESSION["category"] = $_GET["category"]; }
|
||||
if ($_SESSION["category"]) {$category = $_SESSION["category"];}
|
||||
if ($category=="All") {$category="";}
|
||||
|
||||
|
||||
if (!$_GET["pageid"]) {$pageid="1"; } else { $pageid = $_GET["pageid"]; } //Default PageID is 1
|
||||
$type="E"; //Default Type is E
|
||||
|
||||
unset($typename);
|
||||
$types = array("E"=>"Extensions","T"=>"Themes","U"=>"Updates");
|
||||
$typename = $types["$type"];
|
||||
|
||||
//RSS Autodiscovery Link Stuff
|
||||
switch ($_SESSION["category"]) {
|
||||
case "Newest":
|
||||
$rsslist = "newest";
|
||||
break;
|
||||
case "Popular":
|
||||
$rsslist = "popular";
|
||||
break;
|
||||
case "Top Rated":
|
||||
$rsslist = "rated";
|
||||
break;
|
||||
}
|
||||
|
||||
$rssfeed = "rss/?application=" . $application . "&type=" . $type . "&list=" . $rsslist;
|
||||
|
||||
if (!$category) {$categoryname = "All $typename"; } else {$categoryname = $category; }
|
||||
?>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
|
||||
<TITLE>Mozilla Update :: Extensions - List - <?php echo"$categoryname"; if ($pageid) {echo" - Page $pageid"; } ?></TITLE>
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
<?php
|
||||
if ($rsslist) {
|
||||
echo"<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"http://$_SERVER[HTTP_HOST]/$rssfeed\">";
|
||||
}
|
||||
?>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
include"$page_header";
|
||||
|
||||
// -----------------------------------------------
|
||||
// Begin Content of the Page Here
|
||||
// -----------------------------------------------
|
||||
|
||||
include"inc_sidebar.php";
|
||||
|
||||
echo"<DIV id=\"content\">\n"; // Begin Content Area
|
||||
//Query for List Creation
|
||||
$s = "0";
|
||||
$startpoint = ($pageid-1)*$items_per_page;
|
||||
if ($category=="Editors Pick" or $category=="Newest" or $category=="Popular" or $category=="Top Rated") {
|
||||
if ($category =="Editors Pick") {
|
||||
$editorpick="true";
|
||||
} else if ($category =="Newest") {
|
||||
$orderby = "TV.DateAdded DESC, `Name` ASC";
|
||||
} else if ($category =="Popular") {
|
||||
$orderby = "TM.TotalDownloads DESC, `Name` ASC";
|
||||
} else if ($category =="Top Rated") {
|
||||
$orderby = "TM.Rating DESC, `Name` ASC";
|
||||
}
|
||||
$catname = $category;
|
||||
$category = "%";
|
||||
}
|
||||
if ($app_version=="0.10") {$app_version="0.95"; }
|
||||
$sql = "SELECT TM.ID, TM.Name, TM.DateAdded, TM.DateUpdated, TM.Homepage, TM.Description, TM.Rating, TM.TotalDownloads, TV.vID,
|
||||
SUBSTRING(MAX(CONCAT(LPAD(TV.Version, 6, '0'), TV.vID)), 7) AS MAXvID,
|
||||
MAX(TV.Version) AS Version,
|
||||
TA.AppName, TOS.OSName
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID ";
|
||||
if ($category && $category !=="%") { $sql .="INNER JOIN t_categoryxref TCX ON TM.ID = TCX.ID
|
||||
INNER JOIN t_categories TC ON TCX.CategoryID = TC.CategoryID "; }
|
||||
if ($editorpick=="true") { $sql .="INNER JOIN t_reviews TR ON TM.ID = TR.ID "; }
|
||||
$sql .="WHERE Type = '$type' AND AppName = '$application' AND `approved` = 'YES' ";
|
||||
if ($editorpick=="true") { $sql .="AND TR.Pick = 'YES' "; }
|
||||
if ($category && $category !=="%") {$sql .="AND CatName LIKE '$category' ";}
|
||||
if ($app_version) { $sql .=" AND TV.MinAppVer_int <= '".strtolower($app_version)."' AND TV.MaxAppVer_int >= '".strtolower($app_version)."' ";}
|
||||
if ($OS) { $sql .=" AND (TOS.OSName = '$OS' OR TOS.OSName = 'All') "; }
|
||||
$sql .="GROUP BY `Name` ";
|
||||
if ($orderby) {
|
||||
$sql .="ORDER BY $orderby";
|
||||
} else {
|
||||
$sql .="ORDER BY `Name` , `Version` DESC ";
|
||||
}
|
||||
|
||||
$resultsquery = $sql;
|
||||
unset($sql);
|
||||
|
||||
//Get Total Results from Result Query & Populate Page Control Vars.
|
||||
$sql_result = mysql_query($resultsquery, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
$totalresults = mysql_num_rows($sql_result);
|
||||
|
||||
$num_pages = ceil($totalresults/$items_per_page); //Total # of Pages
|
||||
if ($pageid>$num_pages) {$pageid=$num_pages;} //Check PageId for Validity
|
||||
$startpoint = ($pageid-1)*$items_per_page;
|
||||
if ($startpoint<0) {$startpoint=0; $startitem=0;}
|
||||
$startitem = $startpoint+1;
|
||||
$enditem = $startpoint+$items_per_page;
|
||||
if ($totalresults=="0") {$startitem = "0"; }
|
||||
if ($enditem>$totalresults) {$enditem=$totalresults;} //Verify EndItem
|
||||
|
||||
|
||||
if ($_GET[nextnum]) {$startpoint = $_GET["nextnum"]; }
|
||||
//$resultsquery = str_replace("GROUP BY `Name` ", "", $resultsquery);
|
||||
$resultsquery .= " LIMIT $startpoint , $items_per_page"; //Append LIMIT clause to result query
|
||||
|
||||
if ($category=="%") {$category = $catname; unset($catname); }
|
||||
|
||||
//Now Showing Box
|
||||
echo"<DIV id=\"listnav\">";
|
||||
if (!$OS) {$OS="all";}
|
||||
if (!$category) {$categoryname="All"; } else {$categoryname = $category;}
|
||||
echo"<DIV class=\"pagenum\" "; if ($application!="mozilla") {echo" style=\"margin-right: 58%;\""; } echo">";
|
||||
$previd=$pageid-1;
|
||||
if ($previd >"0") {
|
||||
echo"<a href=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$previd\">« Previous</A> • ";
|
||||
}
|
||||
echo"Page $pageid of $num_pages";
|
||||
|
||||
$nextid=$pageid+1;
|
||||
if ($pageid <$num_pages) {
|
||||
echo" • <a href=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$nextid\">Next »</a>";
|
||||
}
|
||||
|
||||
echo"</DIV>\n";
|
||||
|
||||
echo"<SPAN class=\"listtitle\">".ucwords("$application $typename » $categoryname ")."</SPAN><br>";
|
||||
echo"".ucwords("$typename")." $startitem - $enditem of $totalresults";
|
||||
|
||||
|
||||
// Modify List Form
|
||||
|
||||
echo"<DIV class=\"listform\">";
|
||||
echo"<FORM NAME=\"listviews\" METHOD=\"GET\" ACTION=\"showlist.php\">\n";
|
||||
echo"<INPUT NAME=\"application\" TYPE=\"hidden\" VALUE=\"$application\">\n";
|
||||
//Items-Per-Page
|
||||
echo"Show/Page: ";
|
||||
$perpage = array("5","10","20","50");
|
||||
echo"<SELECT name=\"numpg\">";
|
||||
foreach ($perpage as $value) {
|
||||
echo"<OPTION value=\"$value\"";
|
||||
if ($items_per_page==$value) {echo" SELECTED"; }
|
||||
echo">$value</OPTION>";
|
||||
}
|
||||
echo"</SELECT>\n";
|
||||
|
||||
|
||||
// Operating Systems
|
||||
echo" OS: ";
|
||||
echo"<SELECT name=\"os\">\n";
|
||||
$sql = "SELECT `OSName` FROM `t_os` ORDER BY `OSName`";
|
||||
$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)) {
|
||||
$osname = $row["OSName"];
|
||||
echo"<OPTION value=\"".strtolower($osname)."\"";
|
||||
if (strtolower($OS) == strtolower($osname)) {echo" SELECTED";}
|
||||
echo">$osname</OPTION>";
|
||||
}
|
||||
echo"</SELECT>\n";
|
||||
|
||||
|
||||
//Versions of Application
|
||||
echo"Versions: ";
|
||||
echo"<SELECT name=\"version\">";
|
||||
if ($application != "thunderbird") {echo"<OPTION value=\"auto-detect\">Auto-Detect</OPTION>";}
|
||||
$app_orig = $application; //Store original to protect against possible corruption
|
||||
$sql = "SELECT `Version`, `major`, `minor`, `release`, `SubVer` FROM `t_applications` WHERE `AppName` = '$application' 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)) {
|
||||
$version = $row["Version"];
|
||||
$subver = $row["SubVer"];
|
||||
$release = "$row[major].$row[minor]";
|
||||
if ($row["release"]) {$release = ".$release$row[release]";}
|
||||
if ($app_version=="0.95") {$app_version="0.10"; }
|
||||
//Firesomething Support
|
||||
if ($application=="firefox") { if ($release == "0.7") {$application="firebird";} else {$application="firefox";} }
|
||||
|
||||
if ($subver !=="final") {$release="$release$subver";}
|
||||
echo"<OPTION value=\"$release\"";
|
||||
if ($app_version == $release) {echo" SELECTED"; }
|
||||
echo">".ucwords($application)." $version</OPTION>";
|
||||
|
||||
if ($app_version=="0.10") {$app_version="0.95"; }
|
||||
}
|
||||
$application = $app_orig; unset($app_orig);
|
||||
|
||||
|
||||
echo"</SELECT>\n";
|
||||
echo"<INPUT NAME=\"submit\" TYPE=\"SUBMIT\" VALUE=\"Update\">";
|
||||
echo"</FORM>";
|
||||
echo"</DIV>";
|
||||
|
||||
echo"</DIV>\n";
|
||||
|
||||
|
||||
//---------------------------------
|
||||
// Begin List
|
||||
//---------------------------------
|
||||
//Get Author Data and Create $authorarray and $authorids
|
||||
$sql = "SELECT TM.Name, TU.UserName, TU.UserID, 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
|
||||
ORDER BY `Type` , `Name` ASC "; // TM.Type = 'E'
|
||||
$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)) {
|
||||
$authorarray[$row[Name]][] = $row["UserName"];
|
||||
$authorids[$row[UserName]] = $row["UserID"];
|
||||
}
|
||||
|
||||
//Assemble a display application version array
|
||||
$sql = "SELECT `Version`, `major`, `minor`, `release`, `SubVer` FROM `t_applications` WHERE `AppName`='$application' ORDER BY `major`,`minor`";
|
||||
$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"];
|
||||
$subver = $row["SubVer"];
|
||||
$release = "$row[major].$row[minor]";
|
||||
if ($row["release"]) {$release = ".$release$row[release]";}
|
||||
if ($subver !=="final") {$release="$release$subver";}
|
||||
|
||||
$appvernames[$release] = $version;
|
||||
}
|
||||
|
||||
//Query to Generate List..
|
||||
$sql = "$resultsquery";
|
||||
$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)) {
|
||||
|
||||
$id = $row["ID"];
|
||||
$type = $row["Type"];
|
||||
$name = $row["Name"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$dateupdated = $row["DateUpdated"];
|
||||
$homepage = $row["Homepage"];
|
||||
$description = $row["Description"];
|
||||
$rating = $row["Rating"];
|
||||
$authors = $authorarray[$name];
|
||||
$osname = $row["OSName"];
|
||||
$appname = $row["AppName"];
|
||||
$downloadcount = $row["TotalDownloads"];
|
||||
|
||||
//Get Version Record for Referenced MAXvID from list query
|
||||
$sql2 = "SELECT TV.vID, TV.Version, TV.MinAppVer, TV.MaxAppVer, TV.Size, TV.DateAdded AS VerDateAdded, TV.DateUpdated AS VerDateUpdated, TV.URI, TV.Notes, TP.PreviewURI FROM `t_version` TV
|
||||
LEFT JOIN t_previews TP ON TV.vID = TP.vID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID
|
||||
WHERE TV.ID = '$id' AND TV.Version = '$row[Version]' AND TA.AppName = '$appname' AND TOS.OSName = '$osname' LIMIT 1";
|
||||
$sql_result2 = mysql_query($sql2, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
$vid = $row[MAXvID];
|
||||
$row = mysql_fetch_array($sql_result2);
|
||||
|
||||
$vid = $row["vID"];
|
||||
if ($appvernames[$row["MinAppVer"]]) {$minappver = $appvernames[$row["MinAppVer"]]; } else { $minappver = $row["MinAppVer"]; }
|
||||
if ($appvernames[$row["MaxAppVer"]]) {$maxappver = $appvernames[$row["MaxAppVer"]]; } else { $maxappver = $row["MaxAppVer"]; }
|
||||
$VerDateAdded = $row["VerDateAdded"];
|
||||
$VerDateUpdated = $row["VerDateUpdated"];
|
||||
$filesize = $row["Size"];
|
||||
$notes = $row["Notes"];
|
||||
$version = $row["Version"];
|
||||
$uri = $row["URI"];
|
||||
$previewuri = $row["PreviewURI"];
|
||||
|
||||
$filename = basename($uri);
|
||||
|
||||
if ($VerDateAdded > $dateadded) {$dateadded = $VerDateAdded; }
|
||||
if ($VerDateUpdated > $dateupdated) {$dateupdated = $VerDateUpdated; }
|
||||
|
||||
//Turn Authors Array into readable string...
|
||||
$authorcount = count($authors);
|
||||
foreach ($authors as $author) {
|
||||
$userid = $authorids[$author];
|
||||
$n++;
|
||||
$authorstring .= "<A HREF=\"authorprofiles.php?application=$application&id=$userid\">$author</A>";
|
||||
if ($authorcount != $n) {$authorstring .=", "; }
|
||||
|
||||
}
|
||||
$authors = $authorstring;
|
||||
unset($authorstring, $n); // Clear used Vars..
|
||||
|
||||
//Create Customizeable Timestamp
|
||||
$day=substr($dateupdated,8,2); //get the day
|
||||
$month=substr($dateupdated,5,2); //get the month
|
||||
$year=substr($dateupdated,0,4); //get the year
|
||||
$hour=substr($dateupdated,11,2); //get the hour
|
||||
$minute=substr($dateupdated,14,2); //get the minute
|
||||
$second=substr($dateupdated,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$dateupdated = gmdate("F d, Y g:i:sa", $timestamp); //gmdate("F d, Y g:i:sa T", $timestamp);
|
||||
|
||||
|
||||
echo"<DIV class=\"item\">\n";
|
||||
//echo"<DIV style=\"height: 100px\">"; //Not sure why this is here, it caused text to flood out of the box though.
|
||||
|
||||
if ($previewuri) {
|
||||
list($width, $height, $type, $attr) = getimagesize("$websitepath"."$previewuri");
|
||||
|
||||
echo"<IMG SRC=\"$previewuri\" BORDER=0 HEIGHT=$height WIDTH=$width STYLE=\"float: right; padding-right: 5px\" ALT=\"$name preview\">";
|
||||
}
|
||||
|
||||
|
||||
//Upper-Right Side Box
|
||||
echo"<DIV class=\"liststars\" title=\"$rating of 5 stars\" style=\"font-size: 8pt\"><A HREF=\"moreinfo.php?application=$application&id=$id&page=comments\">";
|
||||
for ($i = 1; $i <= floor($rating); $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
if ($rating>floor($rating)) {
|
||||
$val = ($rating-floor($rating))*10;
|
||||
echo"<IMG SRC=\"/images/stars/star_0$val.png\" BORDER=0 ALT=\"\">";
|
||||
$i++;
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
echo"</A></DIV>\n";
|
||||
|
||||
|
||||
echo"<DIV class=\"itemtitle\">";
|
||||
echo"<SPAN class=\"title\"><A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid\">$name $version</A></SPAN><BR>";
|
||||
echo"<SPAN class=\"authorline\">By $authors</SPAN><br>";
|
||||
echo"</DIV>";
|
||||
|
||||
//Description & Version Notes
|
||||
echo"<SPAN class=\"itemdescription\">";
|
||||
echo"$description<BR>";
|
||||
if ($notes) {echo"$notes"; }
|
||||
echo"</SPAN>\n";
|
||||
echo"<BR>";
|
||||
//echo"</DIV>";
|
||||
|
||||
//Icon Bar Modules
|
||||
echo"<DIV style=\"height: 34px\">";
|
||||
echo"<DIV class=\"iconbar\" style=\"width: 104px;\">";
|
||||
if ($appname=="Thunderbird") {
|
||||
echo"<A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"More Info about $name\" ALT=\"\">More Info</A>";
|
||||
} else {
|
||||
//echo"<A HREF=\"install.php/$filename?id=$id&vid=$vid\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"Install $name\" ALT=\"\">Install</A>";
|
||||
echo"<A HREF=\"javascript:void(InstallTrigger.install({'$name $version':'$uri'}))\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"Install $name\" ALT=\"\">Install</A>";
|
||||
}
|
||||
echo"<BR><SPAN class=\"filesize\">Size: $filesize kb</SPAN></DIV>";
|
||||
if ($homepage) {echo"<DIV class=\"iconbar\" style=\"width: 98px;\"><A HREF=\"$homepage\"><IMG SRC=\"/images/home.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"$name Homepage\" ALT=\"\">Homepage</A></DIV>";}
|
||||
echo"<DIV class=\"iconbar\"><IMG SRC=\"/images/".strtolower($appname)."_icon.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float: left\" ALT=\"$appname\"> Works with:<BR> $minappver - $maxappver</DIV>";
|
||||
if($osname !=="ALL") { echo"<DIV class=\"iconbar\" style=\"width: 85px;\"><IMG SRC=\"/images/".strtolower($osname)."_icon.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float: left\" ALT=\"\">OS:<BR>$osname</DIV>"; }
|
||||
echo"</DIV>";
|
||||
|
||||
echo"<DIV class=\"baseline\">Updated: $dateupdated | Total Downloads: $downloadcount<BR></DIV>\n";
|
||||
echo"</DIV>\n";
|
||||
|
||||
} //End While Loop
|
||||
if ($totalresults=="0") {
|
||||
echo"<DIV class=\"item noitems\">\n";
|
||||
echo"No extensions found in this category for ".ucwords($application).".\n";
|
||||
echo"</DIV>\n";
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
// Begin PHP Code for Dynamic Navbars
|
||||
if ($pageid <=$num_pages) {
|
||||
echo"<DIV id=\"listnav\">";
|
||||
|
||||
|
||||
echo"<DIV class=\"pagenum\">";
|
||||
$previd=$pageid-1;
|
||||
if ($previd >"0") {
|
||||
echo"<a href=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$previd\">« Previous</A> • ";
|
||||
}
|
||||
echo"Page $pageid of $num_pages";
|
||||
|
||||
|
||||
$nextid=$pageid+1;
|
||||
if ($pageid <$num_pages) {
|
||||
echo" • <a href=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$nextid\">Next »</a>";
|
||||
}
|
||||
echo"<BR>\n";
|
||||
|
||||
|
||||
//Skip to Page...
|
||||
if ($num_pages>1) {
|
||||
echo"Jump to: ";
|
||||
$pagesperpage=9; //Plus 1 by default..
|
||||
$i = 01;
|
||||
//Dynamic Starting Point
|
||||
if ($pageid>11) {
|
||||
$nextpage=$pageid-10;
|
||||
}
|
||||
$i=$nextpage;
|
||||
|
||||
//Dynamic Ending Point
|
||||
$maxpagesonpage=$pageid+$pagesperpage;
|
||||
//Page #s
|
||||
while ($i <= $maxpagesonpage && $i <= $num_pages) {
|
||||
|
||||
if ($i==$pageid) {
|
||||
echo"<SPAN style=\"color: #FF0000\">$i</SPAN> ";
|
||||
} else {
|
||||
echo"<A HREF=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$i\">$i</A> ";
|
||||
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
echo"</DIV>\n";
|
||||
|
||||
echo"<SPAN class=\"listtitle\">".ucwords("$application $typename » $categoryname ")."</SPAN><br>";
|
||||
echo"".ucwords("$typename")." $startitem - $enditem of $totalresults";
|
||||
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
|
||||
echo"</DIV>\n"; //End Content
|
||||
?>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,75 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<TITLE>Mozilla Update :: Frequently Asked Questions</TITLE>
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
include"$page_header";
|
||||
?>
|
||||
<DIV class="faqtitle">Frequently Asked Questions</DIV>
|
||||
|
||||
<?php
|
||||
$sql = "SELECT `title`, `text` FROM `t_faq` WHERE `active` = 'YES' ORDER BY `index` ASC, `title` 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)) {
|
||||
$title = $row["title"];
|
||||
$text = nl2br($row["text"]);
|
||||
|
||||
echo"<DIV class=\"item\">\n";
|
||||
echo"<DIV class=\"boxheader faqitemtitle\">$title</DIV>\n";
|
||||
echo"<DIV class=\"faqitemtext\">$text</DIV>\n";
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
Before Width: | Height: | Size: 181 B |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 913 B |
|
Before Width: | Height: | Size: 242 B |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 484 B |
|
Before Width: | Height: | Size: 820 B |
|
Before Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 628 B |
|
Before Width: | Height: | Size: 654 B |
|
Before Width: | Height: | Size: 666 B |
|
Before Width: | Height: | Size: 692 B |
|
Before Width: | Height: | Size: 702 B |
|
Before Width: | Height: | Size: 706 B |
|
Before Width: | Height: | Size: 712 B |
|
Before Width: | Height: | Size: 726 B |
|
Before Width: | Height: | Size: 837 B |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
@@ -1,76 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
|
||||
<DIV class="contentbox" style="margin-left: 2px; border-color: #00E;">
|
||||
<DIV class="boxheader">Thunderbird 1.0 Released!</DIV>
|
||||
<SPAN class="itemdescription">
|
||||
<P><IMG SRC="images/product-front-thunderbird.png" width="96" height="105" alt="" align=left border=0>Thunderbird 1.0 is now available for download! New features include Saved Search Folders (aka Virtual Folders)
|
||||
which allow you to display messages based on previously set search criteria across multiple folders. Message Grouping
|
||||
allows you to organize e-mail in a folder by grouping them based on various attributes like Date, Sender, Label, etc.
|
||||
Thunderbird 1.0 also includes numerous bug fixes and other improvements.</P>
|
||||
|
||||
<SPAN style="font-size: 16pt; text-align: center;">
|
||||
<a href="http://www.mozilla.org/products/thunderbird/">Get Thunderbird 1.0!</a></SPAN><BR>
|
||||
|
||||
<a href="http://www.mozilla.org/products/thunderbird/releases/">Thunderbird Release Notes</a> | <a href="http://www.mozilla.org/press/mozilla-2004-12-7.html">Press Release</a><BR>
|
||||
|
||||
|
||||
</SPAN>
|
||||
</DIV>
|
||||
|
||||
<DIV class="contentbox" style="margin-left: 2px; border-color: #E00;">
|
||||
<DIV class="boxheader">Firefox 1.0 Released!</DIV>
|
||||
<SPAN class="itemdescription">
|
||||
<P><IMG SRC="images/product-front-firefox.png" width="112" height="112" alt="" align=left border=0>
|
||||
The wait is over. Get Firefox 1.0, the most standards compliant, flexible, and user-centric web-browsing platform on Earth.
|
||||
Firefox 1.0 is the culmination of almost 7 years of work by thousands of independent hackers and companies through Mozilla.org,
|
||||
and over two years of intense focus on a streamlined browser made for the masses hungry for a better web experience.
|
||||
Firefox 1.0 Features include Tabbed Browsing, Smarter Search and FastFind, Hassle-Free Downloading, Live Bookmarks,
|
||||
Extension and Theme Support, and more.
|
||||
|
||||
</P>
|
||||
|
||||
<SPAN style="font-size: 16pt; text-align: center;">
|
||||
<a href="http://www.mozilla.org/products/firefox/">Get Firefox 1.0!</a></SPAN><BR>
|
||||
|
||||
<a href="http://www.mozilla.org/products/firefox/releases/1.0.html">Firefox Release Notes</a> | <a href="http://www.mozilla.org/press/mozilla-2004-11-09.html">Press Release</a><BR>
|
||||
|
||||
|
||||
</SPAN>
|
||||
</DIV>
|
||||
@@ -1,192 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
|
||||
<TITLE>Mozilla Update</TITLE>
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
include"$page_header";
|
||||
?>
|
||||
|
||||
<DIV class="contentbox" style="margin-left: 2px;">
|
||||
<DIV class="boxheader">Welcome to Mozilla Update</DIV>
|
||||
<SPAN class="itemdescription">
|
||||
Mozilla Update hosts Extensions and Themes for Mozilla software. On this site you can find Extensions and Themes for Mozilla Firefox,
|
||||
Mozilla Thunderbird and the Mozilla 1.x suite, with more to come. The site is broken up into sections for each product, with the
|
||||
extensions and themes categorized to be easy to find. They're also sorted by what version of the product you're using, so you can
|
||||
browse only for Firefox 0.9 compatible extensions, for example. For more information about Mozilla Update, please read our <A HREF="/faq/">Frequently Asked Questions...</A>
|
||||
|
||||
</SPAN>
|
||||
</DIV>
|
||||
<?php include"inc_featuredupdate.php"; ?>
|
||||
|
||||
<?php
|
||||
//include"inc_softwareupdate.php";
|
||||
if ($_GET["application"]) {$application=$_GET["application"]; }
|
||||
?>
|
||||
<?php
|
||||
//Temporary!! Current Version Array Code
|
||||
$currentver_array = array("firefox"=>"1.0", "thunderbird"=>"1.0", "mozilla"=>"1.7");
|
||||
$currentver_display_array = array("firefox"=>"1.0", "thunderbird"=>"1.0", "mozilla"=>"1.7.x");
|
||||
$currentver = $currentver_array[$application];
|
||||
$currentver_display = $currentver_display_array[$application];
|
||||
?>
|
||||
|
||||
|
||||
<DIV class="frontpagecontainer">
|
||||
<DIV class="contentbox contentcolumns">
|
||||
<DIV class="boxheader"><?php print(ucwords($application)); echo" $currentver_display"; ?> Extensions</DIV>
|
||||
|
||||
<?php
|
||||
$sql = "SELECT TM.ID
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
WHERE `Type` = 'E' AND `AppName` = '$application' AND `minAppVer_int`<='$currentver' AND `maxAppVer_int` >='$currentver' AND `approved` = 'YES' GROUP BY TM.ID";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
$numextensions = mysql_num_rows($sql_result);
|
||||
?>
|
||||
<a href="/extensions/?application=<?php echo"$application"; ?>">Browse extensions</a> (<?php echo"$numextensions"; ?> available)<BR>
|
||||
<BR>
|
||||
<?php
|
||||
$sql = "SELECT TR.ID, `Title`, TR.DateAdded, `Body`, `Type`, `pick` FROM `t_reviews` TR
|
||||
INNER JOIN t_main TM ON TR.ID = TM.ID
|
||||
INNER JOIN t_version TV ON TV.ID = TM.ID
|
||||
INNER JOIN t_applications TA ON TA.AppID = TV.AppID
|
||||
WHERE `Type` = 'E' AND `AppName` = '$application' AND `pick`='YES' ORDER BY `rID` DESC 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)) {
|
||||
$id = $row["ID"];
|
||||
$title = $row["Title"];
|
||||
$pick = $row["pick"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$body = $row["Body"];
|
||||
$bodylength = strlen($body);
|
||||
if ($bodylength>"250") {
|
||||
$body = substr($body,0,250);
|
||||
$body .= " <a href=\"/extensions/moreinfo.php?id=$id&application=$application&page=staffreview\">[More...]</a>";
|
||||
|
||||
}
|
||||
|
||||
//Create Customizeable Timestamp
|
||||
$day=substr($dateadded,8,2); //get the day
|
||||
$month=substr($dateadded,5,2); //get the month
|
||||
$year=substr($dateadded,0,4); //get the year
|
||||
$hour=substr($dateadded,11,2); //get the hour
|
||||
$minute=substr($dateadded,14,2); //get the minute
|
||||
$second=substr($dateadded,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$date = gmdate("F, Y", $timestamp);
|
||||
|
||||
|
||||
echo"$title<br> $date";
|
||||
if ($pick=="YES") {echo" Editors Pick";}
|
||||
echo"<BR><BR>\n";
|
||||
echo"<SPAN class=\"itemdescription\">$body</SPAN><BR>\n";
|
||||
}
|
||||
?>
|
||||
<BR>
|
||||
</DIV>
|
||||
|
||||
<DIV class="contentbox contentcolumns">
|
||||
<DIV class="boxheader"><?php print(ucwords($application)); echo" $currentver_display"; ?> Themes</DIV>
|
||||
<?php
|
||||
$sql = "SELECT TM.ID FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
WHERE `Type` = 'T' AND `AppName` = '$application' AND `minAppVer_int` <='$currentver' AND `maxAppVer_int` >= '$currentver' AND `approved` = 'YES' GROUP BY TM.ID";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
$numthemes = mysql_num_rows($sql_result);
|
||||
?>
|
||||
<a href="/themes/?application=<?php echo"$application"; ?>">Browse themes</a> (<?php echo"$numthemes"; ?> available)<BR>
|
||||
<BR>
|
||||
<?php
|
||||
$sql = "SELECT TR.ID, `Title`, TR.DateAdded, `Body`, `Type`, `pick` FROM `t_reviews` TR
|
||||
INNER JOIN t_main TM ON TR.ID = TM.ID
|
||||
INNER JOIN t_version TV ON TV.ID = TM.ID
|
||||
INNER JOIN t_applications TA ON TA.AppID = TV.AppID
|
||||
WHERE `Type` = 'T' AND `AppName` = '$application' AND `pick`='YES' ORDER BY `rID` DESC 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)) {
|
||||
$id = $row["ID"];
|
||||
$title = $row["Title"];
|
||||
$pick = $row["pick"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$body = $row["Body"];
|
||||
$bodylength = strlen($body);
|
||||
if ($bodylength>"250") {
|
||||
$body = substr($body,0,250);
|
||||
$body .= " <a href=\"/moreinfo.php?id=$id&application=$application&page=staffreview\">[More...]</a>";
|
||||
|
||||
}
|
||||
|
||||
//Create Customizeable Timestamp
|
||||
$day=substr($dateadded,8,2); //get the day
|
||||
$month=substr($dateadded,5,2); //get the month
|
||||
$year=substr($dateadded,0,4); //get the year
|
||||
$hour=substr($dateadded,11,2); //get the hour
|
||||
$minute=substr($dateadded,14,2); //get the minute
|
||||
$second=substr($dateadded,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$date = gmdate("F, Y", $timestamp);
|
||||
|
||||
echo"$title - $date";
|
||||
if ($pick=="YES") {echo" Editors Pick<BR><BR>\n";}
|
||||
echo"<BR><BR>\n";
|
||||
echo"$body<BR>\n";
|
||||
}
|
||||
?>
|
||||
<BR>
|
||||
</DIV>
|
||||
</DIV>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,95 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
// Alan Starr <alanjstarr@yahoo.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
// http://blogs.law.harvard.edu/tech/rss
|
||||
|
||||
switch ($type) {
|
||||
case "E":
|
||||
$listType = "Extensions";
|
||||
break;
|
||||
case "P":
|
||||
$listType = "Plugins";
|
||||
break;
|
||||
case "T":
|
||||
$listType = "Themes";
|
||||
break;
|
||||
}
|
||||
|
||||
echo "<rss version=\"2.0\">\n";
|
||||
echo "<channel>\n";
|
||||
|
||||
echo " <title>" . htmlentities($sitetitle) . "::" . htmlentities($list) . " " . $listType . "</title>\n";
|
||||
echo " <link>" . htmlentities($siteurl) . "</link>\n";
|
||||
echo " <description>" . htmlentities($description) . "</description>\n";
|
||||
echo " <language>" . htmlentities($sitelanguage) . "</language>\n";
|
||||
echo " <copyright>" . htmlentities($sitecopyright) . "</copyright>\n";
|
||||
echo " <lastBuildDate>" . $currenttime . "</lastBuildDate>\n";
|
||||
echo " <ttl>" . $rssttl . "</ttl>\n";
|
||||
echo " <image>\n";
|
||||
echo " <title>" . htmlentities($sitetitle) . "</title>\n";
|
||||
echo " <link>" . htmlentities($siteurl) . "</link>\n";
|
||||
echo " <url>" . htmlentities($siteicon) . "</url>\n";
|
||||
echo " <width>16</width>\n";
|
||||
echo " <height>16</height>\n";
|
||||
echo " </image>\n";
|
||||
|
||||
$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)) {
|
||||
$id = $row["ID"];
|
||||
$title = htmlentities($row["Title"]);
|
||||
$description = htmlentities($row["Description"]);
|
||||
$dateupdated = gmdate("r", strtotime($row["DateStamp"]));
|
||||
$version = $row["Version"];
|
||||
$vid = $row["vID"];
|
||||
$appname = $row["AppName"];
|
||||
|
||||
echo " <item>\n";
|
||||
echo " <pubDate>" . $dateupdated . "</pubDate>\n";
|
||||
echo " <title>" . $title . " " . $version . " for " . $appname . "</title>\n";
|
||||
echo " <link>http://$sitehostname/" . strtolower($listType) . "/moreinfo.php?id=" . $id . "&vid=" . $vid . "</link>\n";
|
||||
echo " <description>" . $description . "</description>\n";
|
||||
echo " </item>\n";
|
||||
|
||||
}
|
||||
|
||||
echo "</channel>\n";
|
||||
echo "</rss>\n";
|
||||
|
||||
?>
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
// Alan Starr <alanjstarr@yahoo.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
|
||||
$app = strtolower($_GET["application"]); // Firefox, Thunderbird, Mozilla
|
||||
$type = $_GET["type"]; //E, T, [P]
|
||||
$list = ucwords(strtolower($_GET["list"])); // Newest, Updated, [Editors], Popular
|
||||
|
||||
$sitetitle = "Mozilla Update";
|
||||
$siteicon = "http://www.mozilla.org/images/mozilla-16.png";
|
||||
$siteurl = "http://update.mozilla.org";
|
||||
$sitedescription = "the way to keep your mozilla software up-to-date";
|
||||
$sitelanguage = "en-us";
|
||||
$sitecopyright = "Creative Commons?";
|
||||
$currenttime = gmdate(r);// GMT
|
||||
$rssttl = "120"; //Life of feed in minutes
|
||||
|
||||
//header("Content-Type: application/octet-stream");
|
||||
header("Content-Type: text/xml");
|
||||
|
||||
// Firefox, extensions, by date added
|
||||
|
||||
$select = "SELECT DISTINCT
|
||||
t_main.ID,
|
||||
t_main.Name AS Title,
|
||||
t_main.Description,
|
||||
t_version.Version,
|
||||
t_version.vID,
|
||||
t_version.DateUpdated AS DateStamp,
|
||||
t_applications.AppName";
|
||||
|
||||
$from = "FROM t_main
|
||||
INNER JOIN t_version ON t_main.ID = t_version.ID
|
||||
INNER JOIN t_applications ON t_version.AppID = t_applications.AppID";
|
||||
|
||||
$where = "`approved` = 'YES'"; // Always have a WHERE
|
||||
|
||||
if ($app == 'firefox' || $app == 'thunderbird' || $app == 'mozilla') {
|
||||
$where .= " AND t_applications.AppName = '$app'";
|
||||
}
|
||||
|
||||
if ($type == 'E' || $type == 'T' || $type == 'P') {
|
||||
$where .= " AND t_main.Type = '$type'";
|
||||
}
|
||||
|
||||
switch ($list) {
|
||||
case "Popular":
|
||||
$orderby = "t_main.DownloadCount DESC";
|
||||
break;
|
||||
case "Updated":
|
||||
$orderby = "t_main.DateUpdated DESC";
|
||||
break;
|
||||
case "Rated":
|
||||
$orderby = "t_main.Rating DESC";
|
||||
break;
|
||||
case "Newest":
|
||||
default:
|
||||
$orderby = "t_main.DateAdded DESC";
|
||||
break;
|
||||
}
|
||||
|
||||
$sql = $select . " " . $from . " WHERE " . $where . " ORDER BY " . $orderby . " LIMIT 0, 10";
|
||||
|
||||
//echo $sql;
|
||||
|
||||
include"inc_rssfeed.php";
|
||||
|
||||
|
||||
?>
|
||||
@@ -1,195 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
|
||||
<?php
|
||||
//Bookmarking-Friendly Page Title
|
||||
$sql = "SELECT UserName FROM `t_userprofiles` WHERE UserID = '$_GET[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)===0) {
|
||||
$return = page_error("2","Author ID is Invalid or Missing.");
|
||||
exit;
|
||||
|
||||
}
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
?>
|
||||
|
||||
<TITLE>Mozilla Update :: Themes - Author Profile: <?php echo"$row[UserName]"; ?></TITLE>
|
||||
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
include"$page_header";
|
||||
|
||||
$type = "T";
|
||||
$category = $_GET["category"];
|
||||
include"inc_sidebar.php";
|
||||
?>
|
||||
<DIV id="content">
|
||||
<?php
|
||||
$userid = $_GET["id"];
|
||||
$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"];
|
||||
$userrole = $row["UserRole"];
|
||||
$useremailhide = $row["UserEmailHide"];
|
||||
?>
|
||||
<DIV class="item">
|
||||
<SPAN class="boldfont">Profile for <?php echo"$username"; ?></SPAN><BR>
|
||||
<DIV class="boxheader2"></DIV>
|
||||
<SPAN class="boldfont">Homepage:</SPAN> <?php
|
||||
if ($userwebsite) {echo"<A HREF=\"$userwebsite\" target=\"_blank\">$userwebsite</A>";
|
||||
} else {
|
||||
echo"<SPAN CLASS=\"disabled\">Not Available for this Author</SPAN>";
|
||||
}
|
||||
?><BR>
|
||||
<SPAN class="boldfont">E-Mail:</SPAN> <?php if ($useremailhide=="1") {
|
||||
echo"<SPAN class=\"disabled\">Not Disclosed by Author</SPAN>";
|
||||
} else {
|
||||
echo"<SPAN class=\"emailactive\">Contact this Author via the <A HREF=\"#email\">E-Mail form</A> below</SPAN>";
|
||||
}
|
||||
?>
|
||||
</DIV>
|
||||
<BR>
|
||||
<DIV class="item">
|
||||
<SPAN class="boldfont">All Extensions and Themes by <?php echo"$username"; ?></SPAN><BR>
|
||||
<DIV class="boxheader2"></DIV>
|
||||
<?php
|
||||
$sql = "SELECT TM.ID, TM.Type, TM.Name, TM.Description, TM.DateUpdated, TM.TotalDownloads, 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 TU.UserID = '$userid' AND TM.Type !='P'
|
||||
ORDER BY `Type` , `Name` ";
|
||||
$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)) {
|
||||
unset($downloadcount);
|
||||
|
||||
$sql2 = "SELECT `vID`, `Version` FROM `t_version` WHERE `ID` = '$row[ID]' AND `approved` = 'YES' ORDER BY `Version` ASC LIMIT 1";
|
||||
$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)) {
|
||||
$vid = $row2["vID"];
|
||||
$version = $row2["Version"];
|
||||
|
||||
$v++;
|
||||
$id = $row["ID"];
|
||||
$type = $row["Type"];
|
||||
$name = $row["Name"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$dateupdated = $row["DateUpdated"];
|
||||
$homepage = $row["Homepage"];
|
||||
$description = $row["Description"];
|
||||
$authors = $row["UserEmail"];
|
||||
$downloadcount = $row["TotalDownloads"];
|
||||
|
||||
$day=substr($dateupdated,8,2); //get the day
|
||||
$month=substr($dateupdated,5,2); //get the month
|
||||
$year=substr($dateupdated,0,4); //get the year
|
||||
$hour=substr($dateupdated,11,2); //get the hour
|
||||
$minute=substr($dateupdated,14,2); //get the minute
|
||||
$second=substr($dateupdated,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$dateupdated = gmdate("F d, Y g:i:sa", $timestamp); //gmdate("F d, Y", $dutimestamp);
|
||||
|
||||
echo"<DIV CLASS=\"item\">";
|
||||
echo"<SPAN class=\"title itemtitle\" style=\"margin-left: 0px\"><A HREF=\"moreinfo.php?application=$application&id=$id\">$name</A></SPAN><BR>";
|
||||
echo"<DIV class=\"profileitemdesc\">$description</DIV>\n";
|
||||
echo"<DIV class=\"baseline\">Updated: $dateupdated | Downloads: $downloadcount</DIV>\n";
|
||||
|
||||
echo"</DIV>\n";
|
||||
echo"<BR>\n";
|
||||
}
|
||||
}
|
||||
if ($numresults=="0") {
|
||||
echo"<DIV class=\"noitems\">No Extensions or Themes in the Database for $username yet...</DIV>";
|
||||
}
|
||||
?>
|
||||
</DIV>
|
||||
<BR>
|
||||
<?php if ($useremailhide !=="1") { ?>
|
||||
<A NAME="email"></A>
|
||||
<DIV class="item">
|
||||
<SPAN class="boldfont">Send an E-Mail to <?php echo"$username"; ?></SPAN><BR>
|
||||
<DIV class="boxheader2"></DIV>
|
||||
<?php
|
||||
//SendMail Returned Message Section
|
||||
if ($_GET["mail"]) {
|
||||
$mail = $_GET["mail"];
|
||||
echo"<DIV class=\"mailresult\">";
|
||||
if ($mail=="successful") {
|
||||
echo"Your message has been sent successfully...";
|
||||
} else if ($mail=="unsuccessful") {
|
||||
echo"An error occured, your message was not sent... Please try again...";
|
||||
}
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
?>
|
||||
<FORM NAME="sendmail" METHOD="POST" ACTION="sendmail.php">
|
||||
<INPUT NAME="senduserid" TYPE="HIDDEN" VALUE="<?php echo"$userid"; ?>">
|
||||
Your Name: <INPUT NAME="fromname" TYPE="TEXT" SIZE=40 MAXLENGTH=100> Email: <INPUT NAME="fromemail" TYPE="TEXT" SIZE=40 MAXLENGTH=100><BR>
|
||||
Subject: <INPUT NAME="subject" TYPE="TEXT" SIZE=40 MAXLENGTH=100><BR>
|
||||
Message:<BR>
|
||||
<CENTER><TEXTAREA NAME="body" ROWS=20 COLS=65></TEXTAREA><BR>
|
||||
<INPUT NAME="submit" TYPE="SUBMIT" VALUE="Send Message"> <INPUT NAME="reset" TYPE="RESET" VALUE="Reset Form"><BR>
|
||||
</CENTER>
|
||||
</FORM>
|
||||
</DIV>
|
||||
<BR>
|
||||
<?php } ?>
|
||||
</DIV>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,85 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<DIV class="sidelinks">
|
||||
<?php
|
||||
echo"<DIV CLASS=\"sidebartitle\">Categories:</DIV>\n";
|
||||
echo"<DIV class=\"sidebartext\">";
|
||||
if (!$category AND $index !="yes") {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<SPAN class=\"sidebartitle\"><A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=All\" TITLE=\"Show All ".ucwords($typename)." Alphabetically\">All</A></SPAN><BR>\n";
|
||||
if (!$category AND $index !="yes") {echo"</SPAN>"; }
|
||||
|
||||
// Object Categories
|
||||
$sql = "SELECT `CatName`,`CatDesc` FROM `t_categories` WHERE `CatType` = '$type' ORDER BY `CatName`";
|
||||
$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)) {
|
||||
$catname = $row["CatName"];
|
||||
$catdesc = $row["CatDesc"];
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">$catname</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
}
|
||||
?>
|
||||
<BR>
|
||||
<?php
|
||||
$catname = "Editors Pick";
|
||||
$catdesc = ucwords($typename)." picked by the Mozilla Update Editors";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">Editor's Pick</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
|
||||
$catname = "Popular";
|
||||
$catdesc = ucwords($typename)." downloaded the most";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">$catname</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
|
||||
$catname = "Top Rated";
|
||||
$catdesc = ucwords($typename)." rated the highest";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">$catname</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
|
||||
$catname = "Newest";
|
||||
$catdesc = "Most recent ".ucwords($typename);
|
||||
if (strtolower($category) == strtolower($catname)) {echo"<SPAN CLASS=\"title\">"; }
|
||||
echo"<A HREF=\"showlist.php?application=$application&version=$app_version&numpg=$items_per_page&category=$catname\" TITLE=\"$catdesc\">$catname</A><BR>\n";
|
||||
if (strtolower($category) == strtolower($catname)) {echo"</SPAN>"; }
|
||||
?>
|
||||
</DIV>
|
||||
</DIV>
|
||||
@@ -1,232 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
|
||||
<TITLE>Mozilla Update :: Themes - Change the Look of Mozilla Software</TITLE>
|
||||
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
$type = "T";
|
||||
if ($_GET["application"]) {$application=$_GET["application"]; }
|
||||
include"$page_header";
|
||||
$index="yes";
|
||||
include"inc_sidebar.php";
|
||||
?>
|
||||
<DIV class="box">
|
||||
<DIV class="boxheader" style="width: 100%">What is a Theme?</DIV>
|
||||
<SPAN class="itemdescription">Themes are skins for <?php print(ucwords($application)); ?>, they allow you to change the look and
|
||||
feel of the browser and personalize it to your tastes. A theme can simply change the colors of <?php print(ucwords($application)); ?>
|
||||
or it can change every piece of the browser appearance.</SPAN>
|
||||
</DIV>
|
||||
|
||||
<DIV class="box">
|
||||
<DIV class="boxheader" style="width: 100%">Featured <?php print(ucwords($application)); ?> Theme</DIV>
|
||||
<?php
|
||||
$sql = "SELECT TR.ID, TM.Name, `Title`, TR.DateAdded, `Body`, `Type`, `pick` FROM `t_reviews` TR
|
||||
INNER JOIN t_main TM ON TR.ID = TM.ID
|
||||
INNER JOIN t_version TV ON TV.ID = TM.ID
|
||||
INNER JOIN t_applications TA ON TA.AppID = TV.AppID
|
||||
WHERE `Type` = '$type' AND `AppName` = '$application' AND `featured`='YES' ORDER BY `rID` DESC 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)) {
|
||||
$id = $row["ID"];
|
||||
$name = $row["Name"];
|
||||
$title = $row["Title"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$pick = $row["pick"];
|
||||
$body = $row["Body"];
|
||||
$bodylength = strlen($body);
|
||||
if ($bodylength>"250") {
|
||||
$body = substr($body,0,250);
|
||||
$body .= " <a href=\"moreinfo.php?application=$application&id=$id&page=staffreview\">[More...]</a>";
|
||||
|
||||
}
|
||||
|
||||
//Create Customizeable Timestamp
|
||||
$day=substr($dateadded,8,2); //get the day
|
||||
$month=substr($dateadded,5,2); //get the month
|
||||
$year=substr($dateadded,0,4); //get the year
|
||||
$hour=substr($dateadded,11,2); //get the hour
|
||||
$minute=substr($dateadded,14,2); //get the minute
|
||||
$second=substr($dateadded,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$date = gmdate("F, Y", $timestamp);
|
||||
|
||||
echo"<a href=\"moreinfo.php?application=$application&id=$id\">$name</A> -- $title";
|
||||
if ($pick=="YES") {echo" - $date Editors Pick"; }
|
||||
echo"<BR>\n";
|
||||
echo"<SPAN class=\"itemdescription\">$body</SPAN><BR>\n";
|
||||
}
|
||||
?>
|
||||
</DIV>
|
||||
<?php
|
||||
//Temporary!! Current Version Array Code
|
||||
$currentver_array = array("firefox"=>"1.0", "thunderbird"=>"1.0", "mozilla"=>"1.7");
|
||||
$currentver_display_array = array("firefox"=>"1.0", "thunderbird"=>"1.0", "mozilla"=>"1.7.x");
|
||||
$currentver = $currentver_array[$application];
|
||||
$currentver_display = $currentver_display_array[$application];
|
||||
?>
|
||||
<DIV class="box" style="width: 80%; min-height: 200px; border: 0px">
|
||||
<DIV class="boxcolumns">
|
||||
<DIV class="boxheader"><A HREF="showlist.php?application=<?php echo"$application"; ?>&category=Popular">Most Popular</A>:</DIV>
|
||||
<?php
|
||||
$i=0;
|
||||
$sql = "SELECT TM.ID, TV.vID,TM.Name, TV.Version, TM.TotalDownloads, TM.downloadcount
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
WHERE `Type` = '$type' AND `AppName` = '$application' AND `minAppVer_int` <='$currentver' AND `maxAppVer_int` >= '$currentver' AND `DownloadCount` > '0' AND `approved` = 'YES' ORDER BY `DownloadCount` 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++;
|
||||
$id = $row["ID"];
|
||||
$vid = $row["vID"];
|
||||
$name = $row["Name"];
|
||||
$version = $row["Version"];
|
||||
$downloadcount = $row["downloadcount"];
|
||||
$totaldownloads = $row["TotalDownloads"];
|
||||
if ($lastname == $name) {$i--; continue; }
|
||||
echo"$i - <a href=\"moreinfo.php?application=$application&id=$id\">$name</a><br>\n";
|
||||
echo"<SPAN class=\"smallfont nocomment\">($downloadcount downloads)</SPAN><BR>\n";
|
||||
|
||||
$lastname = $name;
|
||||
if ($i >= "5") {break;}
|
||||
}
|
||||
?>
|
||||
<BR>
|
||||
</DIV>
|
||||
<DIV class="boxcolumns">
|
||||
<DIV class="boxheader"><A HREF="showlist.php?application=<?php echo"$application"; ?>&category=Top Rated">Top Rated</A>:</DIV>
|
||||
<?php
|
||||
$r=0;
|
||||
$usednames = array();
|
||||
$sql = "SELECT TM.ID, TV.vID, TM.Name, TV.Version, TM.Rating, TU.UserName
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_authorxref TAX ON TAX.ID = TM.ID
|
||||
INNER JOIN t_userprofiles TU ON TU.UserID = TAX.UserID
|
||||
WHERE `Type` = '$type' AND `AppName` = '$application' AND `minAppVer_int` <='$currentver' AND `maxAppVer_int` >= '$currentver' AND `Rating` > '0' AND `approved` = 'YES' ORDER BY `Rating` DESC, `Name` ASC, `Version` 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)) {
|
||||
$r++; $s++;
|
||||
$id = $row["ID"];
|
||||
$vid = $row["vID"];
|
||||
$name = $row["Name"];
|
||||
$version = $row["Version"];
|
||||
$rating = $row["Rating"];
|
||||
$arraysearch = array_search("$name", $usednames);
|
||||
if ($arraysearch !== false AND $usedversions[$arraysearch]['version']<$version) {$r--; continue; } //
|
||||
echo"$r - <a href=\"moreinfo.php?application=$application&id=$id&vid=$vid\">$name</a> ";
|
||||
|
||||
//$rating = round($rating);
|
||||
|
||||
echo"<SPAN title=\"Rated: $rating of 5\" style=\"font-size: 8pt\">";
|
||||
for ($i = 1; $i <= floor($rating); $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
if ($rating>floor($rating)) {
|
||||
$val = ($rating-floor($rating))*10;
|
||||
echo"<IMG SRC=\"/images/stars/star_0$val.png\" BORDER=0 ALT=\"\">";
|
||||
$i++;
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
echo"</SPAN><br>\n";
|
||||
//echo"<SPAN class=\"smallfont nocomment\">By $author</SPAN><BR>\n";
|
||||
$usednames[$s] = $name;
|
||||
$usedversions[$s] = $version;
|
||||
if ($r >= "5") {break;}
|
||||
}
|
||||
unset($usednames, $usedversions, $r, $s, $i);
|
||||
?>
|
||||
</DIV>
|
||||
<DIV class="boxcolumns">
|
||||
<DIV class="boxheader"><A HREF="showlist.php?application=<?php echo"$application"; ?>&category=Newest">Most Recent</A>:</DIV>
|
||||
<?php
|
||||
$i=0;
|
||||
//MacOSX Specific override for All+Mac themes. Bug 252294
|
||||
if ($_SESSION["app_os"]=="MacOSX") { $app_os = $_SESSION["app_os"]; } else { $app_os = "ALL"; }
|
||||
|
||||
$sql = "SELECT TM.ID, TV.vID, TM.Name, TV.Version, TV.DateAdded
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID
|
||||
WHERE `Type` = '$type' AND `AppName` = '$application' AND `minAppVer_int` <='$currentver' AND `maxAppVer_int` >= '$currentver' AND (`OSName` = '$_SESSION[app_os]' OR `OSName` = '$app_os') AND `approved` = 'YES' ORDER BY `DateAdded` 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++;
|
||||
$id = $row["ID"];
|
||||
$vid = $row["vID"];
|
||||
$name = $row["Name"];
|
||||
$version = $row["Version"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
//Create Customizeable Datestamp
|
||||
$timestamp = strtotime("$dateadded");
|
||||
$dateadded = gmdate("F d, Y g:i:sa", $timestamp); // $dateupdated = gmdate("F d, Y g:i:sa T", $timestamp);
|
||||
|
||||
if ($lastname == $name) {$i--; continue; }
|
||||
echo"$i - <a href=\"moreinfo.php?application=$application&id=$id&vid=$vid\">$name $version</a><BR>\n";
|
||||
echo"<SPAN class=\"smallfont nocomment\">($dateadded)</SPAN><BR>\n";
|
||||
|
||||
$lastname = $name;
|
||||
if ($i >= "5") {break;}
|
||||
}
|
||||
?>
|
||||
</DIV>
|
||||
</DIV>
|
||||
<BR>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,106 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
//Get Full Information for the file requested.
|
||||
$sql = "SELECT `URI` FROM `t_version` WHERE `ID`='$_GET[id]' AND `vID`='$_GET[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"];
|
||||
|
||||
header("Location: $uri");
|
||||
exit;
|
||||
|
||||
//XXX This codepath sucks performance wise and has been disabled. See Bug 267822.
|
||||
|
||||
// New DownloadCount management Code..
|
||||
//Check for user, to see if they recently accessed this file (filters duplicate/triplicate+ requests in a short period).
|
||||
$maxlife = date("YmdHis", mktime(date("H"), date("i")-10, date("s"), date("m"), date("d"), date("Y")));
|
||||
$sql = "SELECT `dID` FROM `t_downloads` WHERE `ID`='$_GET[id]' AND `vID`='$_GET[vid]' AND `user_ip`='$_SERVER[REMOTE_ADDR]' AND `user_agent` = '$_SERVER[HTTP_USER_AGENT]' AND `date`>'$maxlife' AND `type`='download' 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)=="0") {
|
||||
//Insert a record of this download for the next 10 minutes anyway. :-)
|
||||
$today=date("YmdHis");
|
||||
$sql = "INSERT INTO `t_downloads` (`ID`,`date`,`vID`, `user_ip`, `user_agent`, `type`) VALUES ('$_GET[id]','$today','$_GET[vid]', '$_SERVER[REMOTE_ADDR]', '$_SERVER[HTTP_USER_AGENT]', 'download');";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
//Cleanup the Individual Downloads part of the table for old records
|
||||
$sql = "DELETE FROM `t_downloads` WHERE `date`<'$maxlife' AND `type`='download'";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
$today=date("Ymd")."000000";
|
||||
//Per day download tracking -- Record hits for this day in the record (if it doesn't exist create it)
|
||||
$sql = "SELECT `dID` FROM `t_downloads` WHERE `ID`='$_GET[id]' AND `date`='$today' AND `type`='count' 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)=="0") {
|
||||
$sql = "INSERT INTO `t_downloads` (`ID`,`date`,`downloadcount`,`type`) VALUES ('$_GET[id]','$today','1','count');";
|
||||
} else {
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
$sql = "UPDATE `t_downloads` SET `downloadcount`=downloadcount+1 WHERE `dID`='$row[dID]' LIMIT 1";
|
||||
}
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
|
||||
//Download Statistic Management Code
|
||||
// Maintain the last 7 days record count
|
||||
// This is also where the weekly w/e code would go. if that feature is ever created.
|
||||
$mindate = date("Ymd", mktime(0, 0, 0, date("m"), date("d")-7, date("Y")))."000000";
|
||||
$downloadcount="0";
|
||||
$sql = "SELECT `downloadcount` FROM `t_downloads` WHERE `ID`='$_GET[id]' AND `date`>='$mindate' AND `type`='count' ORDER BY `date` 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)) {
|
||||
$downloadcount = $downloadcount+$row["downloadcount"];
|
||||
}
|
||||
//Update the 7 day count in the main record.
|
||||
$sql = "UPDATE `t_main` SET `downloadcount`='$downloadcount' WHERE `ID`='$_GET[id]' LIMIT 1";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
//Update the total downloadcount in the main record.
|
||||
$sql = "UPDATE `t_main` SET `TotalDownloads`=TotalDownloads+1 WHERE `ID`='$_GET[id]' LIMIT 1";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
//Clean up the Counts per day for >8 days. (and in the future, compile the week/ending records for this data)
|
||||
$sql = "DELETE FROM `t_downloads` WHERE `ID`='$_GET[id]' AND `date`<'$mindate' AND `type`='count'";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
|
||||
}
|
||||
|
||||
//Send User on their way to the file...
|
||||
header("Location: $uri")
|
||||
?>
|
||||
@@ -1,541 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
|
||||
<?php
|
||||
//Bookmarking-Friendly Page Title
|
||||
$sql = "SELECT Name FROM `t_main` WHERE ID = '$_GET[id]' AND Type = 'T' 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)===0) {
|
||||
$return = page_error("1","Extension ID is Invalid or Missing.");
|
||||
exit;
|
||||
|
||||
}
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
|
||||
//Page Titles
|
||||
$pagetitles = array("releases"=>"All Releases", "comments"=>"User Comments", "staffreview"=>"Editor Review", "opinion"=>" My Opinion");
|
||||
$pagetitle = $pagetitles[$_GET["page"]];
|
||||
?>
|
||||
|
||||
<TITLE>Mozilla Update :: Themes -- More Info: <?php echo"$row[Name]"; if ($pagetitle) {echo" - $pagetitle"; } ?></TITLE>
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
include"$page_header";
|
||||
$type = "T";
|
||||
$category=$_GET["category"];
|
||||
include"inc_sidebar.php";
|
||||
?>
|
||||
<DIV id="content">
|
||||
<?php
|
||||
//Get Author Data
|
||||
$sql2 = "SELECT TM.Name, TU.UserName, TU.UserID, 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 = '$_GET[id]'
|
||||
ORDER BY `Type` , `Name` ASC "; // TM.Type = 'E'
|
||||
$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)) {
|
||||
$authorarray[$row2[Name]][] = $row2["UserName"];
|
||||
$authorids[$row2[UserName]] = $row2["UserID"];
|
||||
}
|
||||
|
||||
|
||||
//Run Query and Create List
|
||||
$s = "0";
|
||||
$sql = "SELECT TM.ID, TM.Type, TM.Name, TM.DateAdded, TM.DateUpdated, TM.Homepage, TM.Description, TM.Rating, TV.vID, TV.Version, TV.MinAppVer, TV.MaxAppVer, TV.Size, TV.DateAdded AS VerDateAdded, TV.DateUpdated AS VerDateUpdated, TV.URI, TV.Notes, TM.TotalDownloads, TA.AppName, TOS.OSName, TP.PreviewURI
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID
|
||||
LEFT JOIN t_previews TP ON TV.vID = TP.vID
|
||||
WHERE TM.ID = '$_GET[id]' AND `approved` = 'YES' ";
|
||||
if ($_GET["vid"]) { $sql .=" AND TV.vID = '$_GET[vid]' "; }
|
||||
$sql .= "ORDER BY `Name` , `Version` 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);
|
||||
|
||||
|
||||
$v++;
|
||||
$id = $row["ID"];
|
||||
$type = $row["Type"];
|
||||
$name = $row["Name"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$dateupdated = $row["DateUpdated"];
|
||||
$homepage = $row["Homepage"];
|
||||
$description = $row["Description"];
|
||||
$rating = $row["Rating"];
|
||||
$authors = $authorarray[$name];
|
||||
$osname = $row["OSName"];
|
||||
|
||||
$vid = $row["vID"];
|
||||
if (!$_GET['vid']) {$_GET['vid']=$vid;}
|
||||
$appname = $row["AppName"];
|
||||
$minappver = $row["MinAppVer"];
|
||||
$maxappver = $row["MaxAppVer"];
|
||||
$verdateadded = $row["VerDateAdded"];
|
||||
$verdateupdated = $row["VerDateUpdated"];
|
||||
$filesize = $row["Size"];
|
||||
$notes = $row["Notes"];
|
||||
$version = $row["Version"];
|
||||
$uri = $row["URI"];
|
||||
$previewuri = $row["PreviewURI"];
|
||||
$downloadcount = $row["TotalDownloads"];
|
||||
$filename = basename($uri);
|
||||
|
||||
if ($VerDateAdded > $dateadded) {$dateadded = $VerDateAdded; }
|
||||
if ($VerDateUpdated > $dateupdated) {$dateupdated = $VerDateUpdated; }
|
||||
|
||||
|
||||
|
||||
//Turn Authors Array into readable string...
|
||||
$authorcount = count($authors);
|
||||
foreach ($authors as $author) {
|
||||
$userid = $authorids[$author];
|
||||
$n++;
|
||||
$authorstring .= "<A HREF=\"authorprofiles.php?application=$application&id=$userid\">$author</A>";
|
||||
if ($authorcount != $n) {$authorstring .=", "; }
|
||||
|
||||
}
|
||||
$authors = $authorstring;
|
||||
unset($authorstring, $n); // Clear used Vars..
|
||||
|
||||
//Create Customizeable Timestamp for DateAdded/DateUpdated
|
||||
$day=substr($dateadded,8,2); //get the day
|
||||
$month=substr($dateadded,5,2); //get the month
|
||||
$year=substr($dateadded,0,4); //get the year
|
||||
$hour=substr($dateadded,11,2); //get the hour
|
||||
$minute=substr($dateadded,14,2); //get the minute
|
||||
$second=substr($dateadded,17,2); //get the sec
|
||||
$datimestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
|
||||
$day=substr($dateupdated,8,2); //get the day
|
||||
$month=substr($dateupdated,5,2); //get the month
|
||||
$year=substr($dateupdated,0,4); //get the year
|
||||
$hour=substr($dateupdated,11,2); //get the hour
|
||||
$minute=substr($dateupdated,14,2); //get the minute
|
||||
$second=substr($dateupdated,17,2); //get the sec
|
||||
$dutimestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
|
||||
$dateadded = gmdate("F d, Y g:i:sa", $datimestamp); //gmdate("F d, Y", $datimestamp);
|
||||
$dateupdated = gmdate("F d, Y g:i:sa", $dutimestamp); //gmdate("F d, Y", $dutimestamp);
|
||||
|
||||
//Rating
|
||||
if (!$rating) { $rating="0"; }
|
||||
?>
|
||||
|
||||
|
||||
<DIV class="tabbar">
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid"; ?>">More Info</A></DIV>
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid&page=releases"; ?>">All Releases</A></DIV>
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid&page=comments"; ?>">Comments</A></DIV>
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid&page=staffreview"; ?>">Editor Review</A></DIV>
|
||||
<DIV class="tab"><A HREF="?<?php echo"application=$application&id=$id&vid=$vid&page=opinion"; ?>">My Opinion</A></DIV>
|
||||
</DIV>
|
||||
<?php
|
||||
echo"<DIV class=\"item\">\n";
|
||||
//echo"<DIV style=\"height: 100px\">"; //Why?!?
|
||||
if ($previewuri) {
|
||||
list($width, $height, $imagetype, $attr) = getimagesize("$websitepath"."$previewuri");
|
||||
|
||||
echo"<IMG SRC=\"$previewuri\" BORDER=0 HEIGHT=$height WIDTH=$width STYLE=\"float: right; padding-right: 5px\" ALT=\"$name preview\">";
|
||||
}
|
||||
|
||||
//Upper-Right Side Box
|
||||
echo"<DIV class=\"liststars\" title=\"$rating of 5 stars\" style=\"font-size: 8pt\"><A HREF=\"moreinfo.php?application=$application&id=$id&page=comments\">";
|
||||
for ($i = 1; $i <= floor($rating); $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
if ($rating>floor($rating)) {
|
||||
$val = ($rating-floor($rating))*10;
|
||||
echo"<IMG SRC=\"/images/stars/star_0$val.png\" BORDER=0 ALT=\"\">";
|
||||
$i++;
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
echo"</A></DIV>\n";
|
||||
|
||||
echo"<DIV class=\"itemtitle\">";
|
||||
echo"<SPAN class=\"title\"><A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid\">$name $version</A></SPAN><BR>";
|
||||
echo"<SPAN class=\"authorline\">By $authors</SPAN><br>";
|
||||
echo"</DIV>";
|
||||
|
||||
//Description & Version Notes
|
||||
echo"<SPAN class=\"itemdescription\">";
|
||||
echo"$description<BR>";
|
||||
if ($notes) {echo"$notes"; }
|
||||
echo"</SPAN>\n";
|
||||
|
||||
//echo"</DIV>\n";
|
||||
echo"<BR>\n\n";
|
||||
|
||||
$page = $_GET["page"];
|
||||
if (!$page or $page=="general") {
|
||||
?>
|
||||
<DIV class="downloadbox">
|
||||
<?php
|
||||
//Create DateStamp for Version Release Date ($verdateadded)
|
||||
$day=substr($verdateadded,8,2); //get the day
|
||||
$month=substr($verdateadded,5,2); //get the month
|
||||
$year=substr($verdateadded,0,4); //get the year
|
||||
$hour=substr($verdateadded,11,2); //get the hour
|
||||
$minute=substr($verdateadded,14,2); //get the minute
|
||||
$second=substr($verdateadded,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$verdateadded = gmdate("F d, Y", $timestamp);
|
||||
|
||||
//Calculate Download Time
|
||||
$speed = "56"; //In Kbit/s
|
||||
$speedinkb = "5.5"; //$speedinkb = $speed/8; //In KB/s
|
||||
$timeinsecs = round($filesize/$speedinkb);
|
||||
$time_minutes = floor($timeinsecs/60);
|
||||
$time_seconds = round($timeinsecs-($time_minutes*60),-1);
|
||||
$time_seconds = $time_seconds+2; //Compensate for mirror overhead
|
||||
|
||||
$time = "About ";
|
||||
if ($time_minutes>0) {
|
||||
$time .= "$time_minutes minutes ";
|
||||
}
|
||||
$time .="$time_seconds seconds";
|
||||
|
||||
echo"
|
||||
<SPAN style=\"itemdescription\">Released on $verdateadded</SPAN><BR>
|
||||
<DIV class=\"moreinfoinstall\">";
|
||||
if ($appname=="Thunderbird") {
|
||||
echo"<A HREF=\"install.php/$filename?id=$id&vid=$vid\" TITLE=\"Download $name $version\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" ALT=\"\"> ( Download Now )</A><BR>";
|
||||
} else {
|
||||
//Make Theme Install work again, Bug 246754
|
||||
//echo"<A HREF=\"javascript:void(InstallTrigger.installChrome(InstallTrigger.SKIN,'install.php/$filename?id=$id&vid=$vid','$name'))\"";
|
||||
echo"<A HREF=\"javascript:void(InstallTrigger.installChrome(InstallTrigger.SKIN,'$uri','$name $version'))\" TITLE=\"Install $name $version (Right-Click to Download)\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" ALT=\"\"> ( Install Now )</A><BR>";
|
||||
}
|
||||
echo"
|
||||
<SPAN class=\"filesize\"> $filesize KB, ($time @ $speed"."k)</SPAN></DIV>
|
||||
<BR>";
|
||||
if ($application=="thunderbird") {
|
||||
echo"<SPAN style=\"font-size: 10pt; color: #00F\">Theme Install Instructions for Thunderbird Users:</SPAN><BR>
|
||||
<SPAN style=\"font-size: 8pt;\">(1) Click the link above to Download and save the file to your hard disk.<BR>
|
||||
(2) In Mozilla Thunderbird, open the theme manager (Tools Menu/Themes)<BR>
|
||||
(3) Click the Install button, and locate/select the file you downloaded and click \"OK\"<BR></SPAN>
|
||||
";
|
||||
}
|
||||
|
||||
if ($homepage) {echo"<SPAN style=\"font-size:10pt\">Having a problem with this theme? For Help and Technical Support, visit the <A HREF=\"$homepage\">Theme's Homepage</A>.</SPAN>";}
|
||||
|
||||
echo"<UL style=\"font-size:10pt\">";
|
||||
if ($homepage) {echo"<LI> <A HREF=\"$homepage\">Theme Homepage</A>"; }
|
||||
if ($appname !="Thunderbird") {echo"<LI> <a href=\"install.php/$filename?id=$id&vid=$vid\">Download Theme</A>"; }
|
||||
echo"<LI> <A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&page=releases\">Other Versions</A>";
|
||||
?>
|
||||
</UL>
|
||||
</DIV>
|
||||
|
||||
<DIV class="commentbox">
|
||||
<DIV class="boxheader">User Comments:</DIV>
|
||||
<BR>
|
||||
<?php
|
||||
$sql = "SELECT CommentName, CommentTitle, CommentNote, CommentDate, CommentVote FROM `t_feedback` WHERE ID = '$_GET[id]' AND CommentNote IS NOT NULL ORDER BY `CommentDate` DESC LIMIT 1";
|
||||
$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);
|
||||
while ($row = mysql_fetch_array($sql_result)) {
|
||||
$commentname = $row["CommentName"];
|
||||
$commenttitle = $row["CommentTitle"];
|
||||
$commentnotes = $row["CommentNote"];
|
||||
$commentdate = $row["CommentDate"];
|
||||
$rating = $row["CommentVote"];
|
||||
|
||||
//Create Customizeable Datestamp
|
||||
$day=substr($commentdate,8,2); //get the day
|
||||
$month=substr($commentdate,5,2); //get the month
|
||||
$year=substr($commentdate,0,4); //get the year
|
||||
$hour=substr($commentdate,11,2); //get the hour
|
||||
$minute=substr($commentdate,14,2); //get the minute
|
||||
$second=substr($commentdate,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$commentdate = gmdate("F d, Y g:ia", $timestamp);
|
||||
|
||||
echo"<DIV class=\"commenttitlebar\">";
|
||||
echo"<SPAN class=\"commenttitle\">$commenttitle</SPAN>";
|
||||
echo"<SPAN class=\"liststars\">";
|
||||
|
||||
for ($i = 1; $i <= $rating; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"*\">";
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"\">";
|
||||
}
|
||||
echo"</SPAN>";
|
||||
echo"</DIV>";
|
||||
echo" By $commentname<BR>\n";
|
||||
echo" <BR>\n";
|
||||
echo"$commentnotes<BR>\n\n";
|
||||
echo" <BR>\n";
|
||||
echo"<DIV class=\"commentfooter\">\n";
|
||||
echo"$commentdate | <A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&page=comments\">More Comments...</A> | <A HREF=\"moreinfo.php?id=$id&vid=$vid&page=opinion\">Rate It!</A>\n";
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
|
||||
if ($num_results=="0") {
|
||||
echo"<DIV class=\"nocomment\">";
|
||||
echo"Nobody's Commented on this Extension Yet<BR>";
|
||||
echo"Be the First! <A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&page=opinion\">Rate It!</A>";
|
||||
echo"</DIV>";
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
</DIV>
|
||||
|
||||
<?php
|
||||
} else if ($page=="releases") {
|
||||
|
||||
echo"<DIV class=\"mipageheading\">";
|
||||
echo"Recent Releases:<BR>";
|
||||
echo"</DIV>";
|
||||
|
||||
$sql = "SELECT TV.vID, TV.Version, TV.MinAppVer, TV.MaxAppVer, TV.Size, TV.URI, TV.Notes, TA.AppName, TOS.OSName
|
||||
FROM `t_version` TV
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID
|
||||
WHERE TV.ID = '$_GET[id]' AND `approved` = 'YES'
|
||||
ORDER BY `Version` DESC, `OSName` ASC
|
||||
LIMIT 0, 10";
|
||||
|
||||
$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"];
|
||||
$minappver = $row["MinAppVer"];
|
||||
$maxappver = $row["MaxAppVer"];
|
||||
$filesize = $row["Size"];
|
||||
$notes = $row["Notes"];
|
||||
$version = $row["Version"];
|
||||
$uri = $row["URI"];
|
||||
$osname = $row["OSName"];
|
||||
$appname = $row["AppName"];
|
||||
|
||||
echo"<DIV>"; //Open Version DIV
|
||||
|
||||
//Description & Version Notes
|
||||
echo"<SPAN class=\"itemdescription\">";
|
||||
echo"<SPAN class=\"listtitle\"><A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid\">Version $version</A></SPAN><br>\n";
|
||||
if ($notes) {echo"$notes"; }
|
||||
echo"</SPAN>\n";
|
||||
|
||||
//Icon Bar Modules
|
||||
echo"<DIV style=\"height: 34px\">";
|
||||
echo"<DIV class=\"iconbar\" style=\"width: 100px;\">";
|
||||
|
||||
if ($appname=="Thunderbird") {
|
||||
echo"<A HREF=\"install.php/$filename?id=$id&vid=$vid\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"Install $name (Right-Click to Download)\" ALT=\"\">Download</A>";
|
||||
} else {
|
||||
echo"<A HREF=\"javascript:void(InstallTrigger.installChrome(InstallTrigger.SKIN,'$uri','$name $version'))\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"Install $name\" ALT=\"\">Install</A>";
|
||||
}
|
||||
|
||||
echo"<BR><SPAN class=\"filesize\">Size: $filesize kb</SPAN></DIV>";
|
||||
echo"<DIV class=\"iconbar\"><IMG SRC=\"/images/".strtolower($appname)."_icon.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float: left\" ALT=\"$appname \"> Works with:<BR> $minappver - $maxappver</DIV>";
|
||||
echo"<DIV class=\"iconbar\" style=\"width: 90px;\"><IMG SRC=\"/images/".strtolower($osname)."_icon.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float: left\" ALT=\"\">OS:<BR>"; if($osname=="ALL") {echo"All OSes";} else {echo"$osname";} echo"</DIV>";
|
||||
echo"</DIV>";
|
||||
|
||||
echo"</DIV>";
|
||||
}
|
||||
|
||||
//End General Page
|
||||
} else if ($page=="comments") {
|
||||
//Comments/Ratings Page
|
||||
echo"<DIV class=\"mipageheading\">";
|
||||
echo"User Comments:<BR>";
|
||||
echo"</DIV>";
|
||||
$sql = "SELECT CommentName, CommentTitle, CommentNote, CommentDate, CommentVote FROM `t_feedback` WHERE ID = '$_GET[id]' AND CommentNote IS NOT NULL ORDER BY `CommentDate` ASC";
|
||||
$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);
|
||||
while ($row = mysql_fetch_array($sql_result)) {
|
||||
$name = $row["CommentName"];
|
||||
$title = $row["CommentTitle"];
|
||||
$notes = $row["CommentNote"];
|
||||
$date = $row["CommentDate"];
|
||||
$rating = $row["CommentVote"];
|
||||
|
||||
echo"<DIV class=\"commenttitlebar\">";
|
||||
echo"<SPAN class=\"commenttitle\">$title</SPAN>";
|
||||
echo"<SPAN class=\"liststars\">";
|
||||
|
||||
for ($i = 1; $i <= $rating; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"*\">";
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 WIDTH=16 HEIGHT=16 ALT=\"\">";
|
||||
}
|
||||
echo"</SPAN>";
|
||||
echo"</DIV>";
|
||||
echo"$notes<BR>\n\n";
|
||||
|
||||
echo"<DIV class=\"commentfooter\">\n";
|
||||
echo"<SPAN style=\"padding-left: 30px; font-size: 8pt; font-weight: bold\">Posted on $date by $name</SPAN><br>";
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
|
||||
if ($num_results=="0") {
|
||||
echo"<DIV class=\"nocomment\">";
|
||||
echo"Nobody has commented on this extension yet...<BR>
|
||||
Be the First!
|
||||
<A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&page=opinion\">Leave your comments</A>...";
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
|
||||
|
||||
echo"<DIV style=\"height: 5px;\"></DIV>";
|
||||
|
||||
} else if ($page=="staffreview") {
|
||||
//Staff/Editor Review Tab
|
||||
echo"<DIV class=\"mipageheading\">";
|
||||
echo"Editor Review:<BR>";
|
||||
echo"</DIV>";
|
||||
|
||||
echo"<DIV class=\"reviewbox\">\n";
|
||||
$sql = "SELECT TR.ID, `Title`, TR.DateAdded, `Body`, `Type`, `Pick`, TU.UserName FROM `t_reviews` TR
|
||||
INNER JOIN t_main TM ON TR.ID = TM.ID
|
||||
INNER JOIN t_userprofiles TU ON TR.AuthorID = TU.UserID
|
||||
WHERE `Type` = 'E' AND TR.ID = '$_GET[id]' ORDER BY `rID` DESC LIMIT 1";
|
||||
$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);
|
||||
while ($row = mysql_fetch_array($sql_result)) {
|
||||
$id = $row["ID"];
|
||||
$title = $row["Title"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$body = $row["Body"];
|
||||
$pick = $row["Pick"];
|
||||
$username = $row["UserName"];
|
||||
|
||||
//Create Customizeable Timestamp
|
||||
$timestamp = strtotime("$dateadded");
|
||||
$date = gmdate("F, Y", $timestamp);
|
||||
$posteddate = gmdate("F j Y, g:i:sa", $timestamp);
|
||||
|
||||
|
||||
echo"$title<br>\n";
|
||||
if ($pick=="YES") {echo"<SPAN class=\"itemdescription\"> $date Editors Pick<BR>\n"; }
|
||||
echo"<BR>\n";
|
||||
echo"$body</SPAN><BR>\n";
|
||||
echo"<DIV class=\"commentfooter\">Posted on $posteddate by $username</DIV>\n";
|
||||
}
|
||||
$typename = "extension";
|
||||
if ($num_results=="0") {
|
||||
echo"
|
||||
<SPAN style=\"font-weight: bold\">
|
||||
This $typename has not yet been reviewed.<BR><BR>
|
||||
|
||||
To see what other users think of this extension, view the <A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid&category=$category&page=comments\">User Comments...</A>
|
||||
</SPAN>
|
||||
";
|
||||
|
||||
|
||||
}
|
||||
echo"</DIV>\n";
|
||||
|
||||
} else if ($page=="opinion") {
|
||||
//My Opinion Tab
|
||||
echo"<DIV class=\"mipageheading\">";
|
||||
echo"Your Rating / Feedback:<BR>";
|
||||
echo"</DIV>";
|
||||
?>
|
||||
<?php
|
||||
if ($_GET["error"]=="norating") {
|
||||
echo"<DIV class=\"errorbox\">\n
|
||||
Your comment submission had the following error(s), please fix these errors and try again.<br>\n
|
||||
Rating field cannot be left blank.<br>\n
|
||||
</DIV>\n";
|
||||
}
|
||||
?>
|
||||
<DIV class="opinionform">
|
||||
<FORM NAME="opinon" METHOD="POST" ACTION="../core/postfeedback.php">
|
||||
<INPUT NAME="id" TYPE="HIDDEN" VALUE="<?php echo"$id"; ?>">
|
||||
<INPUT NAME="vid" TYPE="HIDDEN" VALUE="<?php echo"$vid"; ?>">
|
||||
<INPUT NAME="type" TYPE="HIDDEN" value="T">
|
||||
Your Name:<BR>
|
||||
<INPUT NAME="name" TYPE="TEXT" SIZE=30 MAXLENGTH=30><BR>
|
||||
|
||||
Rating:*<BR>
|
||||
<SELECT NAME="rating">
|
||||
<OPTION value="">Rating:
|
||||
<OPTION value="5">5 Stars
|
||||
<OPTION value="4">4 Stars
|
||||
<OPTION value="3">3 Stars
|
||||
<OPTION value="2">2 Stars
|
||||
<OPTION value="1">1 Star
|
||||
<OPTION value="0">0 Stars
|
||||
</SELECT><BR>
|
||||
|
||||
Title:<BR>
|
||||
<INPUT NAME="title" TYPE="TEXT" SIZE=30 MAXLENGTH=50><BR>
|
||||
|
||||
Review/Comments:<BR>
|
||||
<TEXTAREA NAME="comments" ROWS=5 COLS=55></TEXTAREA><BR>
|
||||
<SPAN class="smallfont">No Comment?<INPUT NAME="commententered" TYPE="CHECKBOX" VALUE="FALSE"></SPAN><BR>
|
||||
<INPUT NAME="submit" TYPE="SUBMIT" VALUE="Post"> <INPUT NAME="reset" TYPE="RESET" VALUE="Reset"><BR>
|
||||
<SPAN class="smallfont">* Required Fields</SPAN>
|
||||
</FORM>
|
||||
|
||||
</DIV>
|
||||
<?php
|
||||
} // End Pages
|
||||
|
||||
echo"<DIV class=\"baseline\">";
|
||||
echo"Date Added: $dateadded | Last Updated: $dateupdated | ";
|
||||
echo"Total Downloads: $downloadcount<BR>";
|
||||
echo"</DIV>\n";
|
||||
echo"</DIV>\n";
|
||||
echo"<BR>\n";
|
||||
?>
|
||||
</DIV>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
//Mozilla Update Message System
|
||||
//Send Mail script...
|
||||
exit;
|
||||
require"../core/config.php";
|
||||
|
||||
if (!$_POST["senduserid"]) {
|
||||
exit("<B>Error: no valid user to e-mail, possible attempt to spam detected...</B>");
|
||||
}
|
||||
|
||||
//Get E-Mail Address from DB based on passed data..
|
||||
$sql = "SELECT `UserEmail` FROM `t_userprofiles` WHERE `UserID` = '$_POST[senduserid]' AND `UserEmailHide`='0' LIMIT 1";
|
||||
$sql_result = mysql_query($sql, $connection) or trigger_error("<FONT COLOR=\"#FF0000\"><B>MySQL Error ".mysql_errno().": ".mysql_error()."</B></FONT>", E_USER_NOTICE);
|
||||
$row = mysql_fetch_array($sql_result);
|
||||
$to_address=$row["UserEmail"];
|
||||
|
||||
|
||||
//All From_, To_, and subject variables are passed from the form
|
||||
// and do not need to be defined here.. unless debugging..
|
||||
|
||||
$from_name = $_POST["fromname"];
|
||||
$from_address = $_POST["fromemail"];
|
||||
$subject = $_POST["subject"];
|
||||
|
||||
//Anti-Abuse
|
||||
$findme = '@';
|
||||
$pos = strpos($to_address, $findme);
|
||||
|
||||
if ($pos === false) {
|
||||
//This isn't a valid e-mail address being passed...
|
||||
//Send the e-mail message to the $from_address, just for fun..
|
||||
$to_address = $from_address;
|
||||
}
|
||||
|
||||
$message = $_POST["body"];
|
||||
|
||||
//Message Footer (Auto-Appended to Messages sent using this form.
|
||||
$message .= "\n\n";
|
||||
$message .= "____________________________________\n";
|
||||
$message .= "Message sent through the Mozilla Update Message system.\n
|
||||
The system allows visitors to send you e-mail without revealing your e-mail address to them.
|
||||
If you no longer wish to receive e-mail from visitors, you may change your preferences online at http;//update.mozilla.org.\n";
|
||||
|
||||
|
||||
$headers .= "MIME-Version: 1.0\r\n";
|
||||
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
|
||||
$headers .= "From: ".$from_name." <".$from_address.">\r\n";
|
||||
$headers .= "Reply-To: ".$from_name." <".$from_address.">\r\n";
|
||||
$headers .= "X-Priority: 3\r\n";
|
||||
$headers .= "X-MSMail-Priority: Normal\r\n";
|
||||
$headers .= "X-Mailer: Mozilla Update Message System 1.0";
|
||||
|
||||
$mailstatus = mail($to_address, $subject, $message, $headers);
|
||||
|
||||
|
||||
|
||||
if ($mailstatus===FALSE) {
|
||||
//Message Unsuccessful
|
||||
$return_path="extensions/authorprofiles.php?id=$_POST[senduserid]&mail=unsuccessful";
|
||||
|
||||
} else if ($mailstatus===TRUE) {
|
||||
//Message Successful
|
||||
$return_path="extensions/authorprofiles.php?id=$_POST[senduserid]&mail=successful";
|
||||
|
||||
}
|
||||
header("Location: http://$_SERVER[HTTP_HOST]/$return_path#email");
|
||||
exit;
|
||||
|
||||
?>
|
||||
@@ -1,501 +0,0 @@
|
||||
<?php
|
||||
// ***** BEGIN LICENSE BLOCK *****
|
||||
// Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
//
|
||||
// The contents of this file are subject to the Mozilla Public License Version
|
||||
// 1.1 (the "License"); you may not use this file except in compliance with
|
||||
// the License. You may obtain a copy of the License at
|
||||
// http://www.mozilla.org/MPL/
|
||||
//
|
||||
// Software distributed under the License is distributed on an "AS IS" basis,
|
||||
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
// for the specific language governing rights and limitations under the
|
||||
// License.
|
||||
//
|
||||
// The Original Code is Mozilla Update.
|
||||
//
|
||||
// The Initial Developer of the Original Code is
|
||||
// Chris "Wolf" Crews.
|
||||
// Portions created by the Initial Developer are Copyright (C) 2004
|
||||
// the Initial Developer. All Rights Reserved.
|
||||
//
|
||||
// Contributor(s):
|
||||
// Chris "Wolf" Crews <psychoticwolf@carolina.rr.com>
|
||||
//
|
||||
// Alternatively, the contents of this file may be used under the terms of
|
||||
// either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
// the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
// in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
// of those above. If you wish to allow use of your version of this file only
|
||||
// under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
// use your version of this file under the terms of the MPL, indicate your
|
||||
// decision by deleting the provisions above and replace them with the notice
|
||||
// and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
// the provisions above, a recipient may use your version of this file under
|
||||
// the terms of any one of the MPL, the GPL or the LGPL.
|
||||
//
|
||||
// ***** END LICENSE BLOCK *****
|
||||
?>
|
||||
<?php
|
||||
require"../core/config.php";
|
||||
?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
|
||||
<html lang="EN" dir="ltr">
|
||||
<head>
|
||||
|
||||
<?php
|
||||
//----------------------------
|
||||
//Global General $_GET variables
|
||||
//----------------------------
|
||||
//Detection Override
|
||||
if ($_GET["version"]) { $app_version=$_GET["version"]; $_SESSION["app_version"]=$_GET["version"]; }
|
||||
|
||||
if ($_GET["numpg"]) {$_SESSION["items_per_page"]=$_GET["numpg"]; }
|
||||
if ($_SESSION["items_per_page"]) {$items_per_page = $_SESSION["items_per_page"];} else {$items_per_page="10";}//Default Num per Page is 10
|
||||
|
||||
if ($_GET["category"]) { $_SESSION["category"] = $_GET["category"]; }
|
||||
if ($_SESSION["category"]) {$category = $_SESSION["category"];}
|
||||
if ($category=="All") {$category="";}
|
||||
|
||||
|
||||
if (!$_GET["pageid"]) {$pageid="1"; } else { $pageid = $_GET["pageid"]; } //Default PageID is 1
|
||||
$type="T"; //Default Type is T
|
||||
|
||||
|
||||
unset($typename);
|
||||
$types = array("E"=>"Extensions","T"=>"Themes","U"=>"Updates");
|
||||
$typename = $types["$type"];
|
||||
|
||||
|
||||
//RSS Autodiscovery Link
|
||||
switch ($_SESSION["category"]) {
|
||||
case "Newest":
|
||||
$rsslist = "newest";
|
||||
break;
|
||||
case "Popular":
|
||||
$rsslist = "popular";
|
||||
break;
|
||||
case "Top Rated":
|
||||
$rsslist = "rated";
|
||||
break;
|
||||
}
|
||||
|
||||
$rssfeed = "rss/?application=" . $application . "&type=" . $type . "&list=" . $rsslist;
|
||||
|
||||
if (!$category) {$categoryname = "All $typename"; } else {$categoryname = $category; }
|
||||
?>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
||||
<meta http-equiv="Content-Language" content="en">
|
||||
<meta http-equiv="Content-Style-Type" content="text/css">
|
||||
<TITLE>Mozilla Update :: Themes - List - <?php echo"$categoryname"; if ($pageid) {echo" - Page $pageid"; } ?></TITLE>
|
||||
|
||||
<LINK REL="STYLESHEET" TYPE="text/css" HREF="/core/update.css">
|
||||
<?php
|
||||
if ($rsslist) {
|
||||
echo"<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"http://$_SERVER[HTTP_HOST]/$rssfeed\">";
|
||||
}
|
||||
?>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<?php
|
||||
include"$page_header";
|
||||
|
||||
// -----------------------------------------------
|
||||
// Begin Content of the Page Here
|
||||
// -----------------------------------------------
|
||||
|
||||
include"inc_sidebar.php";
|
||||
|
||||
|
||||
|
||||
echo"<DIV id=\"content\">\n"; // Begin Content Area
|
||||
|
||||
//Query for List Creation
|
||||
$s = "0";
|
||||
$startpoint = ($pageid-1)*$items_per_page;
|
||||
if ($category=="Editors Pick" or $category=="Newest" or $category=="Popular" or $category=="Top Rated") {
|
||||
if ($category =="Editors Pick") {
|
||||
$editorpick="true";
|
||||
} else if ($category =="Newest") {
|
||||
$orderby = "TV.DateAdded DESC, `Name` ASC";
|
||||
} else if ($category =="Popular") {
|
||||
$orderby = "TM.TotalDownloads DESC, `Name` ASC";
|
||||
} else if ($category =="Top Rated") {
|
||||
$orderby = "TM.Rating DESC, `Name` ASC";
|
||||
}
|
||||
$catname = $category;
|
||||
$category = "%";
|
||||
}
|
||||
|
||||
if ($app_version=="0.10") {$app_version="0.95"; }
|
||||
$sql = "SELECT TM.ID, TM.Name, TM.DateAdded, TM.DateUpdated, TM.Homepage, TM.Description, TM.Rating, TM.TotalDownloads, TV.vID,
|
||||
SUBSTRING(MAX(CONCAT(LPAD(TV.Version, 6, '0'), TV.vID)), 7) AS MAXvID,
|
||||
MAX(TV.Version) AS Version,
|
||||
TA.AppName, TOS.OSName
|
||||
FROM `t_main` TM
|
||||
INNER JOIN t_version TV ON TM.ID = TV.ID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID ";
|
||||
if ($category && $category !=="%") { $sql .="INNER JOIN t_categoryxref TCX ON TM.ID = TCX.ID
|
||||
INNER JOIN t_categories TC ON TCX.CategoryID = TC.CategoryID "; }
|
||||
if ($editorpick=="true") { $sql .="INNER JOIN t_reviews TR ON TM.ID = TR.ID "; }
|
||||
$sql .="WHERE Type = '$type' AND AppName = '$application' AND `approved` = 'YES' ";
|
||||
if ($editorpick=="true") { $sql .="AND TR.Pick = 'YES' "; }
|
||||
if ($category && $category !=="%") {$sql .="AND CatName LIKE '$category' ";}
|
||||
if ($app_version) { $sql .=" AND TV.MinAppVer_int <= '".strtolower($app_version)."' AND TV.MaxAppVer_int >= '".strtolower($app_version)."' ";}
|
||||
|
||||
//MacOSX Specific override for All+Mac themes. Bug 252294
|
||||
if ($OS=="MacOSX") { $app_os = $OS; } else { $app_os = "ALL"; }
|
||||
|
||||
if ($OS) { $sql .=" AND (TOS.OSName = '$OS' OR TOS.OSName = '$app_os') "; }
|
||||
$sql .="GROUP BY `Name` ";
|
||||
if ($orderby) {
|
||||
$sql .="ORDER BY $orderby";
|
||||
} else {
|
||||
$sql .="ORDER BY `Name` , `Version` DESC ";
|
||||
}
|
||||
$resultsquery = $sql;
|
||||
unset($sql);
|
||||
|
||||
//Get Total Results from Result Query & Populate Page Control Vars.
|
||||
$sql_result = mysql_query($resultsquery, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
$totalresults = mysql_num_rows($sql_result);
|
||||
|
||||
$num_pages = ceil($totalresults/$items_per_page); //Total # of Pages
|
||||
if ($pageid>$num_pages) {$pageid=$num_pages;} //Check PageId for Validity
|
||||
$startpoint = ($pageid-1)*$items_per_page;
|
||||
if ($startpoint<0) {$startpoint=0; $startitem=0;}
|
||||
$startitem = $startpoint+1;
|
||||
$enditem = $startpoint+$items_per_page;
|
||||
if ($totalresults=="0") {$startitem = "0"; }
|
||||
if ($enditem>$totalresults) {$enditem=$totalresults;} //Verify EndItem
|
||||
|
||||
|
||||
if ($_GET[nextnum]) {$startpoint = $_GET["nextnum"]; }
|
||||
//$resultsquery = str_replace("GROUP BY `Name` ", "", $resultsquery);
|
||||
$resultsquery .= " LIMIT $startpoint , $items_per_page"; //Append LIMIT clause to result query
|
||||
|
||||
if ($category=="%") {$category = $catname; unset($catname); }
|
||||
|
||||
//Now Showing Box
|
||||
echo"<DIV id=\"listnav\">";
|
||||
if (!$OS) {$OS="all";}
|
||||
if (!$category) {$categoryname="All"; } else {$categoryname = $category;}
|
||||
echo"<DIV class=\"pagenum\" "; if ($application!="mozilla") {echo" style=\"margin-right: 58%;\""; } echo">";
|
||||
$previd=$pageid-1;
|
||||
if ($previd >"0") {
|
||||
echo"<a href=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$previd\">« Previous</A> • ";
|
||||
}
|
||||
echo"Page $pageid of $num_pages";
|
||||
|
||||
|
||||
$nextid=$pageid+1;
|
||||
if ($pageid <$num_pages) {
|
||||
echo" • <a href=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$nextid\">Next »</a>";
|
||||
}
|
||||
|
||||
echo"</DIV>\n";
|
||||
|
||||
echo"<SPAN class=\"listtitle\">".ucwords("$application $typename » $categoryname ")."</SPAN><br>";
|
||||
echo"".ucwords("$typename")." $startitem - $enditem of $totalresults";
|
||||
|
||||
|
||||
|
||||
// Modify List Form
|
||||
|
||||
echo"<DIV class=\"listform\">";
|
||||
echo"<FORM NAME=\"listviews\" METHOD=\"GET\" ACTION=\"showlist.php\">\n";
|
||||
echo"<input name=\"application\" type=\"hidden\" value=\"$application\">\n";
|
||||
//Items-Per-Page
|
||||
echo"Show/Page: ";
|
||||
$perpage = array("5","10","20","50");
|
||||
echo"<SELECT name=\"numpg\">";
|
||||
foreach ($perpage as $value) {
|
||||
echo"<OPTION value=\"$value\"";
|
||||
if ($items_per_page==$value) {echo" SELECTED"; }
|
||||
echo">$value</OPTION>";
|
||||
}
|
||||
echo"</SELECT>\n";
|
||||
|
||||
// Operating Systems
|
||||
echo" OS: ";
|
||||
echo"<SELECT name=\"os\">\n";
|
||||
$sql = "SELECT `OSName` FROM `t_os` ORDER BY `OSName`";
|
||||
$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)) {
|
||||
$osname = $row["OSName"];
|
||||
echo"<OPTION value=\"".strtolower($osname)."\"";
|
||||
if (strtolower($OS) == strtolower($osname)) {echo" SELECTED";}
|
||||
echo">$osname</OPTION>";
|
||||
}
|
||||
echo"</SELECT>\n";
|
||||
|
||||
|
||||
//Versions of Application
|
||||
echo"Versions: ";
|
||||
echo"<SELECT name=\"version\">";
|
||||
if ($application != "thunderbird") {echo"<OPTION value=\"auto-detect\">Auto-Detect</OPTION>";}
|
||||
$app_orig = $application; //Store original to protect against possible corruption
|
||||
$sql = "SELECT `Version`, `major`, `minor`, `release`, `SubVer` FROM `t_applications` WHERE `AppName` = '$application' 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)) {
|
||||
$version = $row["Version"];
|
||||
$subver = $row["SubVer"];
|
||||
$release = "$row[major].$row[minor]";
|
||||
if ($row["release"]) {$release = ".$release$row[release]";}
|
||||
if ($app_version=="0.95") {$app_version="0.10"; }
|
||||
//Firesomething Support
|
||||
if ($application=="firefox") { if ($release == "0.7") {$application="firebird";} else {$application="firefox";} }
|
||||
|
||||
if ($subver !=="final") {$release="$release$subver";}
|
||||
echo"<OPTION value=\"$release\"";
|
||||
if ($app_version == $release) {echo" SELECTED"; }
|
||||
echo">".ucwords($application)." $version</OPTION>";
|
||||
|
||||
if ($app_version=="0.10") {$app_version="0.95"; }
|
||||
}
|
||||
$application = $app_orig; unset($app_orig);
|
||||
|
||||
echo"</SELECT>\n";
|
||||
echo"<INPUT NAME=\"submit\" TYPE=\"SUBMIT\" VALUE=\"Update\">";
|
||||
echo"</FORM>";
|
||||
echo"</DIV>";
|
||||
|
||||
echo"</DIV>\n";
|
||||
|
||||
|
||||
//---------------------------------
|
||||
// Begin List
|
||||
//---------------------------------
|
||||
//Get Author Data and Create $authorarray and $authorids
|
||||
$sql = "SELECT TM.Name, TU.UserName, TU.UserID, 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
|
||||
ORDER BY `Type` , `Name` ASC "; // TM.Type = 'E'
|
||||
$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)) {
|
||||
$authorarray[$row[Name]][] = $row["UserName"];
|
||||
$authorids[$row[UserName]] = $row["UserID"];
|
||||
}
|
||||
|
||||
//Assemble a display application version array
|
||||
$sql = "SELECT `Version`, `major`, `minor`, `release`, `SubVer` FROM `t_applications` WHERE `AppName`='$application' ORDER BY `major`,`minor`";
|
||||
$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"];
|
||||
$subver = $row["SubVer"];
|
||||
$release = "$row[major].$row[minor]";
|
||||
if ($row["release"]) {$release = ".$release$row[release]";}
|
||||
if ($subver !=="final") {$release="$release$subver";}
|
||||
|
||||
$appvernames[$release] = $version;
|
||||
}
|
||||
|
||||
//Query to Generate List..
|
||||
$sql = "$resultsquery";
|
||||
$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)) {
|
||||
|
||||
$id = $row["ID"];
|
||||
$type = $row["Type"];
|
||||
$name = $row["Name"];
|
||||
$dateadded = $row["DateAdded"];
|
||||
$dateupdated = $row["DateUpdated"];
|
||||
$homepage = $row["Homepage"];
|
||||
$description = $row["Description"];
|
||||
$rating = $row["Rating"];
|
||||
$authors = $authorarray[$name];
|
||||
$osname = $row["OSName"];
|
||||
$appname = $row["AppName"];
|
||||
$downloadcount = $row["TotalDownloads"];
|
||||
|
||||
//Get Version Record for Referenced MAXvID from list query
|
||||
//$sql2 = "SELECT TV.vID, TV.Version, TV.MinAppVer, TV.MaxAppVer, TV.Size, TV.DateAdded AS VerDateAdded, TV.DateUpdated AS VerDateUpdated, TV.URI, TV.Notes, TP.PreviewURI FROM `t_version` TV
|
||||
//LEFT JOIN t_previews TP ON TV.vID = TP.vID
|
||||
//WHERE TV.vID = '$row[MAXvID]' LIMIT 1";
|
||||
|
||||
$sql2 = "SELECT TV.vID, TV.Version, TV.MinAppVer, TV.MaxAppVer, TV.Size, TV.DateAdded AS VerDateAdded, TV.DateUpdated AS VerDateUpdated, TV.URI, TV.Notes, TP.PreviewURI FROM `t_version` TV
|
||||
LEFT JOIN t_previews TP ON TV.vID = TP.vID
|
||||
INNER JOIN t_applications TA ON TV.AppID = TA.AppID
|
||||
INNER JOIN t_os TOS ON TV.OSID = TOS.OSID
|
||||
WHERE TV.ID = '$id' AND TV.Version = '$row[Version]' AND TA.AppName = '$appname' AND TOS.OSName = '$osname' LIMIT 1";
|
||||
$sql_result2 = mysql_query($sql2, $connection) or trigger_error("MySQL Error ".mysql_errno().": ".mysql_error()."", E_USER_NOTICE);
|
||||
$row = mysql_fetch_array($sql_result2);
|
||||
|
||||
$vid = $row["vID"];
|
||||
if ($appvernames[$row["MinAppVer"]]) {$minappver = $appvernames[$row["MinAppVer"]]; } else { $minappver = $row["MinAppVer"]; }
|
||||
if ($appvernames[$row["MaxAppVer"]]) {$maxappver = $appvernames[$row["MaxAppVer"]]; } else { $maxappver = $row["MaxAppVer"]; }
|
||||
$VerDateAdded = $row["VerDateAdded"];
|
||||
$VerDateUpdated = $row["VerDateUpdated"];
|
||||
$filesize = $row["Size"];
|
||||
$notes = $row["Notes"];
|
||||
$version = $row["Version"];
|
||||
$uri = $row["URI"];
|
||||
$previewuri = $row["PreviewURI"];
|
||||
|
||||
|
||||
if ($VerDateAdded > $dateadded) {$dateadded = $VerDateAdded; }
|
||||
if ($VerDateUpdated > $dateupdated) {$dateupdated = $VerDateUpdated; }
|
||||
|
||||
//Turn Authors Array into readable string...
|
||||
$authorcount = count($authors);
|
||||
foreach ($authors as $author) {
|
||||
$userid = $authorids[$author];
|
||||
$n++;
|
||||
$authorstring .= "<A HREF=\"authorprofiles.php?application=$application&id=$userid\">$author</A>";
|
||||
if ($authorcount != $n) {$authorstring .=", "; }
|
||||
|
||||
}
|
||||
$authors = $authorstring;
|
||||
unset($authorstring, $n); // Clear used Vars..
|
||||
|
||||
//Create Customizeable Timestamp
|
||||
$day=substr($dateupdated,8,2); //get the day
|
||||
$month=substr($dateupdated,5,2); //get the month
|
||||
$year=substr($dateupdated,0,4); //get the year
|
||||
$hour=substr($dateupdated,11,2); //get the hour
|
||||
$minute=substr($dateupdated,14,2); //get the minute
|
||||
$second=substr($dateupdated,17,2); //get the sec
|
||||
$timestamp = strtotime("$year-$month-$day $hour:$minute:$second");
|
||||
$dateupdated = gmdate("F d, Y g:i:sa", $timestamp); //gmdate("F d, Y g:i:sa T", $timestamp);
|
||||
|
||||
|
||||
echo"<DIV class=\"item\">\n";
|
||||
//echo"<DIV style=\"height: 100px\">"; //Not sure why this is here, it caused text to flood out of the box though.
|
||||
|
||||
if ($previewuri) {
|
||||
list($width, $height, $imagetype, $attr) = getimagesize("$websitepath"."$previewuri");
|
||||
|
||||
echo"<IMG SRC=\"$previewuri\" BORDER=0 HEIGHT=$height WIDTH=$width STYLE=\"float: right; padding-right: 5px\" ALT=\"$name preview\">";
|
||||
}
|
||||
|
||||
//Upper-Right Side Box
|
||||
echo"<DIV class=\"liststars\" title=\"$rating of 5 stars\" style=\"font-size: 8pt\"><A HREF=\"moreinfo.php?application=$application&id=$id&page=comments\">";
|
||||
for ($i = 1; $i <= floor($rating); $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/star_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
if ($rating>floor($rating)) {
|
||||
$val = ($rating-floor($rating))*10;
|
||||
echo"<IMG SRC=\"/images/stars/star_0$val.png\" BORDER=0 ALT=\"\">";
|
||||
$i++;
|
||||
}
|
||||
for ($i = $i; $i <= 5; $i++) {
|
||||
echo"<IMG SRC=\"/images/stars/graystar_icon.png\" BORDER=0 ALT=\""; if ($i==1) {echo"$rating of 5 stars";} echo"\">";
|
||||
}
|
||||
echo"</A></DIV>\n";
|
||||
|
||||
|
||||
echo"<DIV class=\"itemtitle\">";
|
||||
echo"<SPAN class=\"title\"><A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid\">$name $version</A></SPAN><BR>";
|
||||
echo"<SPAN class=\"authorline\">By $authors</SPAN><br>";
|
||||
echo"</DIV>";
|
||||
|
||||
//Description & Version Notes
|
||||
echo"<SPAN class=\"itemdescription\">";
|
||||
echo"$description<BR>";
|
||||
if ($notes) {echo"$notes"; }
|
||||
echo"</SPAN>\n";
|
||||
echo"<BR>";
|
||||
//echo"</DIV>";
|
||||
|
||||
//Icon Bar Modules
|
||||
echo"<DIV style=\"height: 34px\">";
|
||||
echo"<DIV class=\"iconbar\" style=\"width: 104px;\">";
|
||||
|
||||
if ($appname=="Thunderbird") {
|
||||
echo"<A HREF=\"moreinfo.php?application=$application&id=$id&vid=$vid\"><IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"More Info about $name\" ALT=\"\">More Info</A>";
|
||||
} else {
|
||||
//Make Theme Install work again, Bug 246754
|
||||
//echo"<A HREF=\"javascript:void(InstallTrigger.installChrome(InstallTrigger.SKIN,'install.php?id=$id&vid=$vid','$name'))\">";
|
||||
echo"<A HREF=\"javascript:void(InstallTrigger.installChrome(InstallTrigger.SKIN,'$uri','$name $version'))\">";
|
||||
echo"<IMG SRC=\"/images/download.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"Install $name\" ALT=\"\">Install</A>";
|
||||
}
|
||||
echo"<BR><SPAN class=\"filesize\">Size: $filesize kb</SPAN></DIV>";
|
||||
|
||||
if ($homepage) {echo"<DIV class=\"iconbar\" style=\"width: 98px;\"><A HREF=\"$homepage\"><IMG SRC=\"/images/home.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float:left;\" TITLE=\"$name Homepage\" ALT=\"\">Homepage</A></DIV>";}
|
||||
echo"<DIV class=\"iconbar\"><IMG SRC=\"/images/".strtolower($appname)."_icon.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float: left\" ALT=\"$appname\"> Works with:<BR> $minappver - $maxappver</DIV>";
|
||||
if ($osname !=="ALL") {
|
||||
echo"<DIV class=\"iconbar\" style=\"width: 85px;\"><IMG SRC=\"/images/".strtolower($osname)."_icon.png\" BORDER=0 HEIGHT=34 WIDTH=34 STYLE=\"float: left\" ALT=\"\">OS:<BR>$osname</DIV>";
|
||||
}
|
||||
echo"</DIV>";
|
||||
|
||||
echo"<DIV class=\"baseline\">Updated: $dateupdated | Total Downloads: $downloadcount<BR></DIV>\n";
|
||||
echo"</DIV>\n";
|
||||
|
||||
} //End While Loop
|
||||
if ($totalresults=="0") {
|
||||
echo"<DIV class=\"item noitems\">\n";
|
||||
echo"No themes found in this category for ".ucwords($application).".\n";
|
||||
echo"</DIV>\n";
|
||||
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
$type="T";
|
||||
// Begin PHP Code for Dynamic Navbars
|
||||
if ($pageid <=$num_pages) {
|
||||
echo"<DIV id=\"listnav\">";
|
||||
|
||||
|
||||
echo"<DIV class=\"pagenum\">";
|
||||
$previd=$pageid-1;
|
||||
if ($previd >"0") {
|
||||
echo"<a href=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$previd\">« Previous</A> • ";
|
||||
}
|
||||
echo"Page $pageid of $num_pages";
|
||||
|
||||
|
||||
$nextid=$pageid+1;
|
||||
if ($pageid <$num_pages) {
|
||||
echo" • <a href=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$nextid\">Next »</a>";
|
||||
}
|
||||
echo"<BR>\n";
|
||||
|
||||
|
||||
//Skip to Page...
|
||||
if ($num_pages>1) {
|
||||
echo"Jump to: ";
|
||||
$pagesperpage=9; //Plus 1 by default..
|
||||
$i = 01;
|
||||
//Dynamic Starting Point
|
||||
if ($pageid>11) {
|
||||
$nextpage=$pageid-10;
|
||||
}
|
||||
$i=$nextpage;
|
||||
|
||||
//Dynamic Ending Point
|
||||
$maxpagesonpage=$pageid+$pagesperpage;
|
||||
//Page #s
|
||||
while ($i <= $maxpagesonpage && $i <= $num_pages) {
|
||||
|
||||
if ($i==$pageid) {
|
||||
echo"<SPAN style=\"color: #FF0000\">$i</SPAN> ";
|
||||
} else {
|
||||
echo"<A HREF=\"?application=$application&version=$app_version&category=$category&numpg=$items_per_page&pageid=$i\">$i</A> ";
|
||||
|
||||
}
|
||||
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
|
||||
echo"</DIV>\n";
|
||||
|
||||
echo"<SPAN class=\"listtitle\">".ucwords("$application $typename » $categoryname ")."</SPAN><br>";
|
||||
echo"".ucwords("$typename")." $startitem - $enditem of $totalresults";
|
||||
|
||||
echo"</DIV>\n";
|
||||
}
|
||||
|
||||
echo"</DIV>\n"; //End Content
|
||||
?>
|
||||
<?php
|
||||
include"$page_footer";
|
||||
?>
|
||||
</BODY>
|
||||
</HTML>
|
||||
@@ -1,270 +0,0 @@
|
||||
<?php
|
||||
/* -*- Mode: php; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is the Extension Update Service.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Vladimir Vukicevic.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2004
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Vladimir Vukicevic <vladimir@pobox.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/// config bits:
|
||||
$db_server = "localhost";
|
||||
$db_user = "";
|
||||
$db_pass = "";
|
||||
$db_name = "";
|
||||
|
||||
// map the mysql t_main.type enum into the right type
|
||||
$ext_typemap = array('T' => 'theme',
|
||||
'E' => 'extension',
|
||||
'P' => 'plugin');
|
||||
|
||||
header("Content-type: text/rdf");
|
||||
|
||||
// error handling
|
||||
function bail ($errstr) {
|
||||
die("Error: " . $errstr);
|
||||
}
|
||||
|
||||
|
||||
// major.minor.release.build[+]
|
||||
// make sure this is a valid version
|
||||
function expandversion ($vstr) {
|
||||
$v = explode('.', $vstr);
|
||||
|
||||
if ($vstr == '' || count($v) == 0 || count($v) > 4) {
|
||||
bail ('Bogus version.');
|
||||
}
|
||||
|
||||
$vlen = count($v);
|
||||
$ret = array();
|
||||
$hasplus = 0;
|
||||
|
||||
for ($i = 0; $i < 4; $i++) {
|
||||
if ($i > $vlen-1) {
|
||||
// this version chunk was not specified; give 0
|
||||
$ret[] = 0;
|
||||
} else {
|
||||
$s = $v[$i];
|
||||
if ($i == 3) {
|
||||
// need to check for +
|
||||
$slen = strlen($s);
|
||||
if ($s{$slen-1} == '+') {
|
||||
$s = substr($s, 0, $slen-1);
|
||||
$hasplus = 1;
|
||||
}
|
||||
}
|
||||
|
||||
$ret[] = intval($s);
|
||||
}
|
||||
}
|
||||
|
||||
$ret[] = $hasplus;
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function vercmp ($a, $b) {
|
||||
if ($a == $b)
|
||||
return 0;
|
||||
|
||||
$va = expandversion($a);
|
||||
$vb = expandversion($b);
|
||||
|
||||
for ($i = 0; $i < 5; $i++)
|
||||
if ($va[$i] != $vb[$i])
|
||||
return ($vb[$i] - $va[$i]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// These are passed in the GET string
|
||||
//
|
||||
|
||||
if (!array_key_exists('reqVersion', $_GET))
|
||||
bail ("Invalid request.");
|
||||
|
||||
$reqVersion = $_GET['reqVersion'];
|
||||
|
||||
if ($reqVersion == 1) {
|
||||
|
||||
if (!array_key_exists('id', $_GET) ||
|
||||
!array_key_exists('version', $_GET) ||
|
||||
!array_key_exists('maxAppVersion', $_GET) ||
|
||||
!array_key_exists('appID', $_GET) ||
|
||||
!array_key_exists('appVersion', $_GET))
|
||||
bail ("Invalid request.");
|
||||
|
||||
$reqItemGuid = $_GET['id'];
|
||||
$reqItemVersion = $_GET['version'];
|
||||
$reqItemMaxAppVersion = $_GET['maxAppVersion'];
|
||||
$reqTargetAppGuid = $_GET['appID'];
|
||||
$reqTargetAppVersion = $_GET['appVersion'];
|
||||
} else {
|
||||
// bail
|
||||
bail ("Bad request version received");
|
||||
}
|
||||
|
||||
// check args
|
||||
if (empty($reqItemGuid) || empty($reqItemVersion) || empty($reqTargetAppGuid)) {
|
||||
bail ("Invalid request.");
|
||||
}
|
||||
|
||||
// XXX PUT VALUES IN
|
||||
mysql_connect($db_server, $db_user, $db_pass)
|
||||
|| bail ("Failed to connect to database.");
|
||||
|
||||
mysql_select_db ($db_name)
|
||||
|| bail ("Failed to select database.");
|
||||
|
||||
// We need to fetch two things for the database:
|
||||
// 1) The current extension version's info, for a possibly updated max version
|
||||
// 2) The latest version available, if different from the above.
|
||||
//
|
||||
// We know:
|
||||
// - $reqItemGuid
|
||||
// - $reqItemVersion
|
||||
// - $reqTargetAppGuid
|
||||
// - $reqTargetAppVersion
|
||||
//
|
||||
// We need to get:
|
||||
// - extension GUID
|
||||
// - extension version
|
||||
// - extension xpi link
|
||||
// - app ID
|
||||
// - app min version
|
||||
// - app max version
|
||||
|
||||
$query = "SELECT t_main.guid AS extguid,
|
||||
t_main.type AS exttype,
|
||||
t_version.version AS extversion,
|
||||
t_version.uri AS exturi,
|
||||
t_version.minappver AS appminver,
|
||||
t_version.maxappver AS appmaxver,
|
||||
t_applications.guid AS appguid
|
||||
FROM t_main, t_version, t_applications
|
||||
WHERE t_main.guid = '" . mysql_real_escape_string($reqItemGuid) . "' AND
|
||||
t_main.id = t_version.id AND
|
||||
t_version.appid = t_applications.appid AND
|
||||
t_version.approved = 'YES' AND
|
||||
t_applications.guid = '" . mysql_real_escape_string($reqTargetAppGuid) . "'";
|
||||
|
||||
$result = mysql_query ($query);
|
||||
|
||||
if (!$result) {
|
||||
bail ('Query error: ' . mysql_error());
|
||||
}
|
||||
|
||||
// info for this version
|
||||
$thisVersionData = '';
|
||||
// info for highest version
|
||||
$highestVersion = '';
|
||||
$highestVersionData = '';
|
||||
|
||||
$itemType = '';
|
||||
|
||||
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
|
||||
if (empty($itemType)) {
|
||||
$itemType = $ext_typemap[$line['exttype']];
|
||||
}
|
||||
|
||||
// is this row for the current version?
|
||||
if ($line['extversion'] == $reqItemVersion) {
|
||||
$thisVersionData = $line;
|
||||
} else if (vercmp ($reqItemVersion, $line['extversion']) > 0) {
|
||||
// did we already see an update with a higher version than this?
|
||||
if ($highestVersion != '' && vercmp ($highestVersion, $line['extversion']) < 0)
|
||||
continue;
|
||||
|
||||
// does this update support my current app version?
|
||||
if (vercmp($line['appmaxver'], $reqTargetAppVersion) > 0 ||
|
||||
vercmp($reqTargetAppVersion, $line['appminver']) > 0)
|
||||
continue;
|
||||
|
||||
$highestVersion = $line['extversion'];
|
||||
$highestVersionData = $line;
|
||||
}
|
||||
}
|
||||
|
||||
mysql_free_result ($result);
|
||||
|
||||
//
|
||||
// Now to spit out the RDF. We hand-generate because the data is pretty simple.
|
||||
//
|
||||
|
||||
print "<?xml version=\"1.0\"?>\n";
|
||||
print "<RDF:RDF xmlns:RDF=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns:em=\"http://www.mozilla.org/2004/em-rdf#\">\n\n";
|
||||
|
||||
print "<RDF:Description about=\"urn:mozilla:{$itemType}:{$reqItemGuid}\">\n";
|
||||
|
||||
// output list of updates (just highest and this)
|
||||
print " <em:updates><RDF:Seq>\n";
|
||||
if (!empty($thisVersionData))
|
||||
print " <RDF:li resource=\"urn:mozilla:{$itemType}:{$reqItemGuid}:{$thisVersionData['extversion']}\"/>\n";
|
||||
if (!empty($highestVersionData))
|
||||
print " <RDF:li resource=\"urn:mozilla:{$itemType}:{$reqItemGuid}:{$highestVersionData['extversion']}\"/>\n";
|
||||
print " </RDF:Seq></em:updates>\n";
|
||||
|
||||
// output compat bits for firefox 0.9
|
||||
if (!empty($highestVersionData)) {
|
||||
print " <em:version>{$highestVersionData['extversion']}</em:version>\n";
|
||||
print " <em:updateLink>{$highestVersionData['exturi']}</em:updateLink>\n";
|
||||
}
|
||||
|
||||
print "</RDF:Description>\n\n";
|
||||
|
||||
function print_update ($data) {
|
||||
global $ext_typemap;
|
||||
$dataItemType = $ext_typemap[$data['exttype']];
|
||||
print "<RDF:Description about=\"urn:mozilla:{$dataItemType}:{$data['extguid']}:{$data['extversion']}\">\n";
|
||||
print " <em:version>{$data['extversion']}</em:version>\n";
|
||||
print " <em:targetApplication>\n";
|
||||
print " <RDF:Description>\n";
|
||||
print " <em:id>{$data['appguid']}</em:id>\n";
|
||||
print " <em:minVersion>{$data['appminver']}</em:minVersion>\n";
|
||||
print " <em:maxVersion>{$data['appmaxver']}</em:maxVersion>\n";
|
||||
print " <em:updateLink>{$data['exturi']}</em:updateLink>\n";
|
||||
print " </RDF:Description>\n";
|
||||
print " </em:targetApplication>\n";
|
||||
print "</RDF:Description>\n";
|
||||
}
|
||||
|
||||
if (!empty($thisVersionData))
|
||||
print_update ($thisVersionData);
|
||||
if (!empty($highestVersionData))
|
||||
print_update ($highestVersionData);
|
||||
|
||||
print "</RDF:RDF>\n";
|
||||
|
||||
?>
|
||||
|
||||
32
mozilla/xpfe/components/bookmarks/Makefile.in
Normal file
@@ -0,0 +1,32 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the License for the specific language governing
|
||||
# rights and limitations under the License.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
|
||||
DEPTH = ../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
DIRS = public src resources
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
1438
mozilla/xpfe/components/bookmarks/macbuild/BookmarksIDL.xml
Normal file
26
mozilla/xpfe/components/bookmarks/macbuild/BookmarksPrefix.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
/* Defining the following causes NS_APPSHELL to be defined as NS_EXPORT. */
|
||||
#define _IMPL_NS_APPSHELL
|
||||
|
||||
#include "MacSharedPrefix.h"
|
||||
@@ -0,0 +1,26 @@
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*/
|
||||
|
||||
/* Defining the following causes NS_APPSHELL to be defined as NS_EXPORT. */
|
||||
#define _IMPL_NS_APPSHELL
|
||||
|
||||
#include "MacSharedPrefix_debug.h"
|
||||
26
mozilla/xpfe/components/bookmarks/makefile.win
Normal file
@@ -0,0 +1,26 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the License for the specific language governing
|
||||
# rights and limitations under the License.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH=..\..\..
|
||||
|
||||
DIRS=public src resources
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
1
mozilla/xpfe/components/bookmarks/public/MANIFEST_IDL
Normal file
@@ -0,0 +1 @@
|
||||
nsIBookmarksService.idl
|
||||
35
mozilla/xpfe/components/bookmarks/public/Makefile.in
Normal file
@@ -0,0 +1,35 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the License for the specific language governing
|
||||
# rights and limitations under the License.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
|
||||
DEPTH = ../../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
MODULE = appcomps
|
||||
XPIDL_MODULE = bookmarks
|
||||
|
||||
XPIDLSRCS = nsIBookmarksService.idl
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
31
mozilla/xpfe/components/bookmarks/public/makefile.win
Normal file
@@ -0,0 +1,31 @@
|
||||
#!nmake
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the License for the specific language governing
|
||||
# rights and limitations under the License.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
|
||||
DEPTH=..\..\..\..
|
||||
|
||||
MODULE=bookmarks
|
||||
|
||||
XPIDLSRCS = \
|
||||
.\nsIBookmarksService.idl \
|
||||
$(NULL)
|
||||
|
||||
include <$(DEPTH)\config\rules.mak>
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben Goodger <ben@netscape.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/**
|
||||
* The Browser Bookmarks service
|
||||
*/
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
interface nsIRDFResource;
|
||||
|
||||
[scriptable, uuid(a82e9300-e4af-11d2-8fdf-0008c70adc7b)]
|
||||
interface nsIBookmarksService : nsISupports
|
||||
{
|
||||
const unsigned long BOOKMARK_DEFAULT_TYPE = 0;
|
||||
const unsigned long BOOKMARK_SEARCH_TYPE = 1;
|
||||
const unsigned long BOOKMARK_FIND_TYPE = 2;
|
||||
|
||||
boolean ReadBookmarks();
|
||||
boolean IsBookmarked(in string aURI);
|
||||
|
||||
void addBookmarkImmediately(in string aURI, in wstring aTitle, in long bmType, in wstring docCharset);
|
||||
|
||||
nsIRDFResource createFolder(in wstring aName, in nsIRDFResource aParentFolder);
|
||||
nsIRDFResource createFolderWithDetails(in wstring aName, in nsIRDFResource aParentFolder,
|
||||
in long aIndex);
|
||||
|
||||
nsIRDFResource createGroup(in wstring aName, in nsIRDFResource aParentFolder);
|
||||
nsIRDFResource createGroupWithDetails(in wstring aName, in nsIRDFResource aParentFolder,
|
||||
in long aIndex);
|
||||
|
||||
nsIRDFResource createBookmark(in wstring aName, in string aURL, in nsIRDFResource aParentFolder);
|
||||
nsIRDFResource createBookmarkWithDetails(in wstring aName, in string aURI, in wstring docCharSet,
|
||||
in nsIRDFResource aFolder, in long aIndex);
|
||||
|
||||
void updateBookmarkIcon(in string aURL, in wstring iconURL);
|
||||
void removeBookmarkIcon(in string aURL, in wstring iconURL);
|
||||
|
||||
void updateLastVisitedDate(in string aURL, in wstring docCharset);
|
||||
|
||||
string resolveKeyword(in wstring aName);
|
||||
|
||||
wstring getLastCharset(in string aURI);
|
||||
|
||||
void importSystemBookmarks(in nsIRDFResource aParentFolder);
|
||||
};
|
||||
|
||||
%{C++
|
||||
|
||||
// {E638D760-8687-11d2-B530-000000000000}
|
||||
#define NS_BOOKMARKS_SERVICE_CID \
|
||||
{ 0xe638d760, 0x8687, 0x11d2, { 0xb5, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } }
|
||||
|
||||
#define NS_BOOKMARKS_SERVICE_CONTRACTID \
|
||||
"@mozilla.org/browser/bookmarks-service;1"
|
||||
|
||||
#define NS_BOOKMARKS_DATASOURCE_CONTRACTID \
|
||||
"@mozilla.org/rdf/datasource;1?name=bookmarks"
|
||||
|
||||
%}
|
||||
@@ -0,0 +1,9 @@
|
||||
bm-find.js
|
||||
bm-find.xul
|
||||
bm-panel.js
|
||||
bm-panel.xul
|
||||
bm-props.js
|
||||
bm-props.xul
|
||||
bookmarks.js
|
||||
bookmarksDD.js
|
||||
bookmarks.xul
|
||||
30
mozilla/xpfe/components/bookmarks/resources/Makefile.in
Normal file
@@ -0,0 +1,30 @@
|
||||
#
|
||||
# The contents of this file are subject to the Netscape Public
|
||||
# License Version 1.1 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.mozilla.org/NPL/
|
||||
#
|
||||
# Software distributed under the License is distributed on an "AS
|
||||
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
# implied. See the License for the specific language governing
|
||||
# rights and limitations under the License.
|
||||
#
|
||||
# The Original Code is mozilla.org code.
|
||||
#
|
||||
# The Initial Developer of the Original Code is Netscape
|
||||
# Communications Corporation. Portions created by Netscape are
|
||||
# Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
# Rights Reserved.
|
||||
#
|
||||
# Contributor(s):
|
||||
#
|
||||
|
||||
DEPTH = ../../../..
|
||||
topsrcdir = @top_srcdir@
|
||||
srcdir = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
include $(DEPTH)/config/autoconf.mk
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
||||
348
mozilla/xpfe/components/bookmarks/resources/addBookmark.js
Normal file
@@ -0,0 +1,348 @@
|
||||
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben Goodger <ben@netscape.com> (Original Author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/**
|
||||
* Add Bookmark Dialog.
|
||||
* ====================
|
||||
*
|
||||
* This is a generic bookmark dialog that allows for bookmark addition
|
||||
* and folder selection. It can be opened with various parameters that
|
||||
* result in appearance/purpose differences and initial state.
|
||||
*
|
||||
* Use: Open with 'openDialog', with the flags
|
||||
* 'centerscreen,chrome,dialog=no,resizable=yes'
|
||||
*
|
||||
* Parameters:
|
||||
* Apart from the standard openDialog parameters, this dialog can
|
||||
* be passed additional information, which gets mapped to the
|
||||
* window.arguments array:
|
||||
*
|
||||
* window.arguments[0]: Bookmark Name. The value to be prefilled
|
||||
* into the "Name: " field (if visible).
|
||||
* window.arguments[1]: Bookmark URL: The location of the bookmark.
|
||||
* The value to be filled in the "Location: "
|
||||
* field (if visible).
|
||||
* window.arguments[2]: Bookmark Folder. The RDF Resource URI of the
|
||||
* folder that this bookmark should be created in.
|
||||
* window.arguments[3]: Bookmark Charset. The charset that should be
|
||||
* used when adding a bookmark to the specified
|
||||
* URL. (Usually the charset of the current
|
||||
* document when launching this window).
|
||||
* window.arguments[4]: The mode of operation. See notes for details.
|
||||
* window.arguments[5]: If the mode is "addGroup", this is an array
|
||||
* of objects with name, URL and charset
|
||||
* properties, one for each group member.
|
||||
*
|
||||
* Mode of Operation Notes:
|
||||
* ------------------------
|
||||
* This dialog can be opened in four different ways by using a parameter
|
||||
* passed through the call to openDialog. The 'mode' of operation
|
||||
* of the window is expressed in window.arguments[4]. The valid modes are:
|
||||
*
|
||||
* 1) <default> (no fifth open parameter).
|
||||
* Opens this dialog with the bookmark Name, URL and folder selection
|
||||
* components visible.
|
||||
* 2) "newBookmark" (fifth open parameter = String("newBookmark"))
|
||||
* Opens the dialog as in (1) above except the folder selection tree
|
||||
* is hidden. This type of mode is useful when the creation folder
|
||||
* is pre-determined.
|
||||
* 3) "selectFolder" (fifth open parameter = String("selectFolder"))
|
||||
* Opens the dialog as in (1) above except the Name/Location section
|
||||
* is hidden, and the dialog takes on the utility of a Folder chooser.
|
||||
* Used when the user must select a Folder for some purpose.
|
||||
* 4) "addGroup" (fifth open parameter = String("addGroup"))
|
||||
* Opens the dialog like <default>, with a checkbox to select between
|
||||
* filing a single bookmark or a group. For the single bookmark the
|
||||
* values are taken from the name, URL and charset arguments.
|
||||
* For the group, the values are taken from the sixth argument.
|
||||
* This parameter can also be String("addGroup,group") where "group"
|
||||
* specifies that the dialog starts in filing as a group.
|
||||
*/
|
||||
|
||||
var gFld_Name = null;
|
||||
var gFld_URL = null;
|
||||
var gFolderTree = null;
|
||||
var gCB_AddGroup = null;
|
||||
|
||||
var gBookmarkCharset = null;
|
||||
|
||||
const kRDFSContractID = "@mozilla.org/rdf/rdf-service;1";
|
||||
const kRDFSIID = Components.interfaces.nsIRDFService;
|
||||
const kRDF = Components.classes[kRDFSContractID].getService(kRDFSIID);
|
||||
|
||||
var gSelectItemObserver = null;
|
||||
|
||||
var gCreateInFolder = "NC:NewBookmarkFolder";
|
||||
|
||||
function Startup()
|
||||
{
|
||||
gFld_Name = document.getElementById("name");
|
||||
gFld_URL = document.getElementById("url");
|
||||
gCB_AddGroup = document.getElementById("addgroup");
|
||||
var bookmarkView = document.getElementById("bookmarks-view");
|
||||
|
||||
var shouldSetOKButton = true;
|
||||
var dialogElement = document.documentElement;
|
||||
if ("arguments" in window) {
|
||||
var ind;
|
||||
var folderItem = null;
|
||||
var arg;
|
||||
if (window.arguments.length < 5)
|
||||
arg = null;
|
||||
else
|
||||
arg = window.arguments[4];
|
||||
switch (arg) {
|
||||
case "selectFolder":
|
||||
// If we're being opened as a folder selection window
|
||||
document.getElementById("bookmarknamegrid").setAttribute("hidden", "true");
|
||||
document.getElementById("createinseparator").setAttribute("hidden", "true");
|
||||
document.getElementById("nameseparator").setAttribute("hidden", "true");
|
||||
sizeToContent();
|
||||
dialogElement.setAttribute("title", dialogElement.getAttribute("title-selectFolder"));
|
||||
shouldSetOKButton = false;
|
||||
if (window.arguments[2])
|
||||
folderItem = bookmarkView.rdf.GetResource(window.arguments[2]);
|
||||
if (folderItem) {
|
||||
ind = bookmarkView.treeBuilder.getIndexOfResource(folderItem);
|
||||
bookmarkView.treeBoxObject.selection.select(ind);
|
||||
}
|
||||
break;
|
||||
case "newBookmark":
|
||||
setupFields();
|
||||
if (window.arguments[2])
|
||||
gCreateInFolder = window.arguments[2];
|
||||
document.getElementById("folderbox").setAttribute("hidden", "true");
|
||||
sizeToFit();
|
||||
break;
|
||||
case "addGroup":
|
||||
document.getElementById("showaddgroup").setAttribute("hidden", "false");
|
||||
setupFields();
|
||||
sizeToFit();
|
||||
break;
|
||||
case "addGroup,group":
|
||||
document.getElementById("showaddgroup").setAttribute("hidden", "false");
|
||||
gCB_AddGroup.setAttribute("checked", "true");
|
||||
setupFields();
|
||||
toggleGroup();
|
||||
sizeToFit();
|
||||
break;
|
||||
default:
|
||||
// Regular Add Bookmark
|
||||
setupFields();
|
||||
if (window.arguments[2]) {
|
||||
gCreateInFolder = window.arguments[2];
|
||||
folderItem = bookmarkView.rdf.GetResource(gCreateInFolder);
|
||||
if (folderItem) {
|
||||
ind = bookmarkView.treeBuilder.getIndexOfResource(folderItem);
|
||||
bookmarkView.treeBoxObject.selection.select(ind);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (shouldSetOKButton)
|
||||
onFieldInput();
|
||||
if (document.getElementById("bookmarknamegrid").hasAttribute("hidden")) {
|
||||
bookmarkView.tree.focus();
|
||||
if (bookmarkView.currentIndex == -1)
|
||||
bookmarkView.treeBoxObject.selection.select(0);
|
||||
}
|
||||
else {
|
||||
gFld_Name.select();
|
||||
gFld_Name.focus();
|
||||
}
|
||||
}
|
||||
|
||||
function sizeToFit()
|
||||
{
|
||||
var dialogElement = document.documentElement;
|
||||
dialogElement.removeAttribute("persist");
|
||||
dialogElement.removeAttribute("height");
|
||||
dialogElement.removeAttribute("width");
|
||||
dialogElement.setAttribute("style", dialogElement.getAttribute("style"));
|
||||
sizeToContent();
|
||||
}
|
||||
|
||||
function setupFields()
|
||||
{
|
||||
// New bookmark in predetermined folder.
|
||||
gFld_Name.value = window.arguments[0] || "";
|
||||
gFld_URL.value = window.arguments[1] || "";
|
||||
onFieldInput();
|
||||
gFld_Name.select();
|
||||
gFld_Name.focus();
|
||||
gBookmarkCharset = window.arguments[3] || null;
|
||||
}
|
||||
|
||||
function onFieldInput()
|
||||
{
|
||||
const ok = document.documentElement.getButton("accept");
|
||||
ok.disabled = gFld_URL.value == "" && !addingGroup() ||
|
||||
gFld_Name.value == "";
|
||||
}
|
||||
|
||||
function onOK()
|
||||
{
|
||||
if (!document.getElementById("folderbox").hasAttribute("hidden")) {
|
||||
var bookmarkView = document.getElementById("bookmarks-view");
|
||||
var currentIndex = bookmarkView.currentIndex;
|
||||
if (currentIndex != -1)
|
||||
gCreateInFolder = bookmarkView.treeBuilder.getResourceAtIndex(currentIndex).Value;
|
||||
}
|
||||
// In Select Folder Mode, do nothing but tell our caller what
|
||||
// folder was selected.
|
||||
if (window.arguments.length > 4 && window.arguments[4] == "selectFolder")
|
||||
window.arguments[5].selectedFolder = gCreateInFolder;
|
||||
else {
|
||||
// Otherwise add a bookmark to the selected folder.
|
||||
|
||||
const kBMDS = kRDF.GetDataSource("rdf:bookmarks");
|
||||
const kBMSContractID = "@mozilla.org/browser/bookmarks-service;1";
|
||||
const kBMSIID = Components.interfaces.nsIBookmarksService;
|
||||
const kBMS = Components.classes[kBMSContractID].getService(kBMSIID);
|
||||
var rFolder = kRDF.GetResource(gCreateInFolder, true);
|
||||
const kRDFCContractID = "@mozilla.org/rdf/container;1";
|
||||
const kRDFIID = Components.interfaces.nsIRDFContainer;
|
||||
const kRDFC = Components.classes[kRDFCContractID].getService(kRDFIID);
|
||||
try {
|
||||
kRDFC.Init(kBMDS, rFolder);
|
||||
}
|
||||
catch (e) {
|
||||
// No "NC:NewBookmarkFolder" exists, just append to the root.
|
||||
rFolder = kRDF.GetResource("NC:BookmarksRoot", true);
|
||||
kRDFC.Init(kBMDS, rFolder);
|
||||
}
|
||||
|
||||
// if no URL was provided and we're not filing as a group, do nothing
|
||||
if (!gFld_URL.value && !addingGroup())
|
||||
return;
|
||||
|
||||
var url;
|
||||
if (addingGroup()) {
|
||||
const group = kBMS.createGroup(gFld_Name.value, rFolder);
|
||||
const groups = window.arguments[5];
|
||||
for (var i = 0; i < groups.length; ++i) {
|
||||
url = getNormalizedURL(groups[i].url);
|
||||
kBMS.createBookmarkWithDetails(groups[i].name, url,
|
||||
groups[i].charset, group, -1);
|
||||
}
|
||||
} else {
|
||||
url = getNormalizedURL(gFld_URL.value);
|
||||
var newBookmark = kBMS.createBookmarkWithDetails(gFld_Name.value, url, gBookmarkCharset, rFolder, -1);
|
||||
if (window.arguments.length > 4 && window.arguments[4] == "newBookmark") {
|
||||
window.arguments[5].newBookmark = newBookmark;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getNormalizedURL(url)
|
||||
{
|
||||
// Check to see if the item is a local directory path, and if so, convert
|
||||
// to a file URL so that aggregation with rdf:files works
|
||||
try {
|
||||
const kLF = Components.classes["@mozilla.org/file/local;1"]
|
||||
.createInstance(Components.interfaces.nsILocalFile);
|
||||
kLF.initWithPath(url);
|
||||
if (kLF.exists()) {
|
||||
var ioService = Components.classes["@mozilla.org/network/io-service;1"]
|
||||
.getService(Components.classes.nsIIOService);
|
||||
|
||||
url = ioService.getURLSpecFromFile(kLF);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
var gBookmarksShell = null;
|
||||
function createNewFolder ()
|
||||
{
|
||||
var bookmarksView = document.getElementById("bookmarks-view");
|
||||
bookmarksView.createNewFolder();
|
||||
}
|
||||
|
||||
function useDefaultFolder ()
|
||||
{
|
||||
const kBMDS = kRDF.GetDataSource("rdf:bookmarks");
|
||||
var bookmarkView = document.getElementById("bookmarks-view");
|
||||
var sources = kBMDS.GetSources(bookmarkView.rdf.GetResource(NC_NS + "FolderType"), bookmarkView.rdf.GetResource("NC:NewBookmarkFolder"), true);
|
||||
var folder = null;
|
||||
if (sources.hasMoreElements()) {
|
||||
folder = sources.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
}
|
||||
var ind = bookmarkView.treeBuilder.getIndexOfResource(folder);
|
||||
if (ind != -1) {
|
||||
bookmarkView.tree.focus();
|
||||
bookmarkView.treeBoxObject.selection.select(ind);
|
||||
gCreateInFolder = folder.Value;
|
||||
}
|
||||
else {
|
||||
bookmarkView.treeBoxObject.selection.clearSelection();
|
||||
gCreateInFolder = "NC:BookmarksRoot";
|
||||
}
|
||||
}
|
||||
|
||||
var gOldNameValue = "";
|
||||
var gOldURLValue = "";
|
||||
|
||||
function toggleGroup()
|
||||
{
|
||||
// swap between single bookmark and group name
|
||||
var temp = gOldNameValue;
|
||||
gOldNameValue = gFld_Name.value;
|
||||
gFld_Name.value = temp;
|
||||
|
||||
// swap between single bookmark and group url
|
||||
temp = gOldURLValue;
|
||||
gOldURLValue = gFld_URL.value;
|
||||
gFld_URL.value = temp;
|
||||
gFld_URL.disabled = gCB_AddGroup.getAttribute("checked") == "true";
|
||||
|
||||
gFld_Name.select();
|
||||
gFld_Name.focus();
|
||||
onFieldInput();
|
||||
}
|
||||
|
||||
function addingGroup()
|
||||
{
|
||||
const showAddGroup = document.getElementById("showaddgroup");
|
||||
return showAddGroup.getAttribute("hidden") != "true" && gCB_AddGroup.getAttribute("checked") == "true";
|
||||
}
|
||||
118
mozilla/xpfe/components/bookmarks/resources/addBookmark.xul
Normal file
@@ -0,0 +1,118 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<!-- -*- Mode: HTML; indent-tabs-mode: nil; -*- -->
|
||||
<!--
|
||||
|
||||
The contents of this file are subject to the Netscape Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Ben Goodger <ben@netscape.com> (Original Author)
|
||||
|
||||
-->
|
||||
|
||||
<?xml-stylesheet href="chrome://communicator/skin/"?>
|
||||
<?xml-stylesheet href="chrome://communicator/skin/bookmarks/bookmarks.css"?>
|
||||
<?xml-stylesheet href="chrome://communicator/content/bookmarks/bookmarks.css" type="text/css"?>
|
||||
|
||||
<!DOCTYPE window [
|
||||
<!ENTITY % brandDTD SYSTEM "chrome://global/locale/brand.dtd" >
|
||||
%brandDTD;
|
||||
<!ENTITY % addBookmarkDTD SYSTEM "chrome://communicator/locale/bookmarks/addBookmark.dtd">
|
||||
%addBookmarkDTD;
|
||||
]>
|
||||
|
||||
<dialog id="newBookmarkDialog" style="width: 36em;"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
ondialogaccept="return onOK(event)"
|
||||
title="&newBookmark.title;" title-selectFolder="&selectFolder.label;"
|
||||
onload="Startup();"
|
||||
persist="screenX screenY width height"
|
||||
screenX="24" screenY="24">
|
||||
|
||||
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarksOverlay.js"/>
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarksTree.js"/>
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/addBookmark.js"/>
|
||||
|
||||
<stringbundle id="bookmarksbundle"
|
||||
src="chrome://communicator/locale/bookmarks/bookmark.properties"/>
|
||||
|
||||
<broadcaster id="showaddgroup" hidden="true"/>
|
||||
|
||||
<separator id="nameseparator" class="thin"/>
|
||||
|
||||
<grid id="bookmarknamegrid">
|
||||
<columns>
|
||||
<column/>
|
||||
<column flex="5"/>
|
||||
<column flex="1"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row align="center">
|
||||
<label value="&name.label;" accesskey="&name.accesskey;" control="name"/>
|
||||
<textbox id="name" oninput="onFieldInput();"/>
|
||||
<spacer/>
|
||||
</row>
|
||||
<row>
|
||||
<separator class="thin"/>
|
||||
<separator class="thin"/>
|
||||
<spacer/>
|
||||
</row>
|
||||
<row align="center">
|
||||
<label value="&url.label;" accesskey="&url.accesskey;" control="url"/>
|
||||
<textbox id="url" oninput="onFieldInput();"/>
|
||||
<spacer/>
|
||||
</row>
|
||||
<row observes="showaddgroup">
|
||||
<separator class="thin"/>
|
||||
<separator class="thin"/>
|
||||
<spacer/>
|
||||
</row>
|
||||
<row observes="showaddgroup">
|
||||
<spacer/>
|
||||
<hbox pack="start">
|
||||
<checkbox id="addgroup" label="&addGroup.label;"
|
||||
accesskey="&addGroup.accesskey;" oncommand="toggleGroup();"/>
|
||||
</hbox>
|
||||
<spacer/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
|
||||
<separator id="createinseparator"/>
|
||||
|
||||
<vbox id="folderbox" flex="1">
|
||||
<separator/>
|
||||
<hbox flex="1">
|
||||
<label id="createinlabel" value="&createin.label;"/>
|
||||
<hbox flex="1">
|
||||
<bookmarks-tree id="bookmarks-view" flex="1" type="folders"/>
|
||||
<vbox>
|
||||
<button label="&button.newfolder.label;" accesskey="&button.newfolder.accesskey;"
|
||||
oncommand="createNewFolder();"/>
|
||||
<button label="&button.defaultfolder.label;"
|
||||
accesskey="&button.defaultfolder.accesskey;"
|
||||
oncommand="useDefaultFolder();"/>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<separator/>
|
||||
|
||||
</dialog>
|
||||
87
mozilla/xpfe/components/bookmarks/resources/bm-panel.xul
Normal file
@@ -0,0 +1,87 @@
|
||||
<?xml version="1.0"?> <!-- -*- Mode: SGML; indent-tabs-mode: nil; -*- -->
|
||||
<!--
|
||||
|
||||
The contents of this file are subject to the Netscape Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Ben Goodger <ben@netscape.com> (Original Author, v2.0)
|
||||
|
||||
-->
|
||||
|
||||
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://communicator/skin/sidebar/sidebarListView.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://communicator/skin/bookmarks/bookmarksWindow.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://communicator/content/bookmarks/bookmarks.css" type="text/css"?>
|
||||
|
||||
<?xul-overlay href="chrome://communicator/content/utilityOverlay.xul"?>
|
||||
<?xul-overlay href="chrome://global/content/globalOverlay.xul"?>
|
||||
<?xul-overlay href="chrome://communicator/content/bookmarks/bookmarksOverlay.xul"?>
|
||||
<?xul-overlay href="chrome://communicator/content/tasksOverlay.xul"?>
|
||||
<?xul-overlay href="chrome://communicator/content/communicatorOverlay.xul"?>
|
||||
|
||||
<!DOCTYPE window SYSTEM "chrome://communicator/locale/bookmarks/bookmarks.dtd">
|
||||
|
||||
<page id="bookmarksPanel"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="Startup();" elementtofocus="bookmarks-view">
|
||||
|
||||
<!-- XXX - would like to cut this dependency out -->
|
||||
<script type="application/x-javascript" src="chrome://global/content/strres.js"/>
|
||||
<script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/>
|
||||
|
||||
<!-- Bookmarks Shell -->
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarksOverlay.js"/>
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarksPanel.js"/>
|
||||
|
||||
<!-- Drag and Drop -->
|
||||
<script type="application/x-javascript" src="chrome://global/content/nsDragAndDrop.js"/>
|
||||
<script type="application/x-javascript" src="chrome://global/content/nsTransferable.js"/>
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarksDD.js"/>
|
||||
|
||||
|
||||
<!-- context menu, tooltips, etc -->
|
||||
<popupset id="bookmarksPopupset"/>
|
||||
|
||||
<!-- bookmarks string bundle -->
|
||||
<stringbundleset id="stringbundleset"/>
|
||||
|
||||
<!-- bookmarks & edit commands -->
|
||||
<commands id="commands">
|
||||
<commandset id="CommandUpdate_Bookmarks"
|
||||
commandupdater="true"
|
||||
events="click,focus"
|
||||
oncommandupdate="document.getElementById('bookmarks-view').onCommandUpdate();">
|
||||
</commandset>
|
||||
<commandset id="bookmarksItems"/>
|
||||
</commands>
|
||||
|
||||
<hbox id="panel-bar" class="toolbar">
|
||||
<toolbarbutton id="btnAddBookmark" label="&command.addBookmark.label;"
|
||||
oncommand="addBookmark();"/>
|
||||
<toolbarbutton id="btnManageBookmarks" label="&command.manageBookmarks.label;"
|
||||
oncommand="manageBookmarks();"/>
|
||||
<spacer flex="1"/>
|
||||
<toolbarseparator/>
|
||||
<toolbarbutton id="btnFindBookmarks" label="&command.findBookmarks.label;"
|
||||
oncommand="document.getElementById('bookmarks-view').openFindDialog();"/>
|
||||
</hbox>
|
||||
|
||||
<bookmarks-tree id="bookmarks-view" class="sidebar" type="single-column" flex="1"/>
|
||||
|
||||
</page>
|
||||
387
mozilla/xpfe/components/bookmarks/resources/bm-props.js
Normal file
@@ -0,0 +1,387 @@
|
||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
var NC_NAMESPACE_URI = "http://home.netscape.com/NC-rdf#";
|
||||
|
||||
// XXX MAKE SURE that the "url" field is LAST!
|
||||
// This is important for what happens if/when the URL itself is changed.
|
||||
// Ask rjc@netscape.com if you want to know why exactly this is.
|
||||
|
||||
// This is the set of fields that are visible in the window.
|
||||
var gFields = ["name", "shortcut", "description", "url"];
|
||||
|
||||
// ...and this is a parallel array that contains the RDF properties
|
||||
// that they are associated with.
|
||||
var gProperties = [NC_NAMESPACE_URI + "Name",
|
||||
NC_NAMESPACE_URI + "ShortcutURL",
|
||||
NC_NAMESPACE_URI + "Description",
|
||||
NC_NAMESPACE_URI + "URL"];
|
||||
|
||||
var RDF = Components.classes["@mozilla.org/rdf/rdf-service;1"]
|
||||
.getService(Components.interfaces.nsIRDFService);
|
||||
|
||||
var RDFC = Components.classes["@mozilla.org/rdf/container-utils;1"]
|
||||
.getService(Components.interfaces.nsIRDFContainerUtils);
|
||||
|
||||
var Bookmarks = RDF.GetDataSource("rdf:bookmarks");
|
||||
|
||||
var gBookmarkURL = "";
|
||||
|
||||
function Init()
|
||||
{
|
||||
var x;
|
||||
gBookmarkURL = window.arguments[0];
|
||||
|
||||
// Initialize the properties panel by copying the values from the
|
||||
// RDF graph into the fields on screen.
|
||||
|
||||
for (var i = 0; i < gFields.length; ++i) {
|
||||
var field = document.getElementById(gFields[i]);
|
||||
|
||||
var value = Bookmarks.GetTarget(RDF.GetResource(gBookmarkURL),
|
||||
RDF.GetResource(gProperties[i]),
|
||||
true);
|
||||
|
||||
if (value)
|
||||
value = value.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
|
||||
|
||||
if (value) //make sure were aren't stuffing null into any fields
|
||||
field.value = value;
|
||||
}
|
||||
|
||||
var propsWindow = document.getElementById("bmPropsWindow");
|
||||
var nameNode = document.getElementById("name");
|
||||
var title = propsWindow.getAttribute("title");
|
||||
title = title.replace(/\*\*bm_title\*\*/gi, nameNode.value);
|
||||
propsWindow.setAttribute("title", title);
|
||||
|
||||
// check bookmark schedule
|
||||
value = Bookmarks.GetTarget(RDF.GetResource(gBookmarkURL),
|
||||
RDF.GetResource("http://home.netscape.com/WEB-rdf#Schedule"),
|
||||
true);
|
||||
|
||||
if (value) {
|
||||
value = value.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
|
||||
|
||||
if (value) {
|
||||
var values = value.split("|");
|
||||
if (values.length == 4) {
|
||||
// get day range
|
||||
var days = values[0];
|
||||
var dayNode = document.getElementById("dayRange");
|
||||
var dayItems = dayNode.childNodes[0].childNodes;
|
||||
for (x=0; x < dayItems.length; ++x) {
|
||||
if (dayItems[x].getAttribute("value") == days) {
|
||||
dayNode.selectedItem = dayItems[x];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// get hour range
|
||||
var hours = values[1].split("-");
|
||||
var startHour = "";
|
||||
var endHour = "";
|
||||
|
||||
if (hours.length == 2) {
|
||||
startHour = hours[0];
|
||||
endHour = hours[1];
|
||||
}
|
||||
|
||||
// set start hour
|
||||
var startHourNode = document.getElementById("startHourRange");
|
||||
var startHourItems = startHourNode.childNodes[0].childNodes;
|
||||
for (x=0; x < startHourItems.length; ++x) {
|
||||
if (startHourItems[x].getAttribute("value") == startHour) {
|
||||
startHourNode.selectedItem = startHourItems[x];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// set end hour
|
||||
var endHourNode = document.getElementById("endHourRange");
|
||||
var endHourItems = endHourNode.childNodes[0].childNodes;
|
||||
for (x=0; x < endHourItems.length; ++x) {
|
||||
if (endHourItems[x].getAttribute("value") == endHour) {
|
||||
endHourNode.selectedItem = endHourItems[x];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// get duration
|
||||
var duration = values[2];
|
||||
var durationNode = document.getElementById("duration");
|
||||
durationNode.value = duration;
|
||||
|
||||
// get notification method
|
||||
var method = values[3];
|
||||
if (method.indexOf("icon") >= 0)
|
||||
document.getElementById("bookmarkIcon").checked = true;
|
||||
|
||||
if (method.indexOf("sound") >= 0)
|
||||
document.getElementById("playSound").checked = true;
|
||||
|
||||
if (method.indexOf("alert") >= 0)
|
||||
document.getElementById("showAlert").checked = true;
|
||||
|
||||
if (method.indexOf("open") >= 0)
|
||||
document.getElementById("openWindow").checked = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if its a container, disable some things
|
||||
var isContainerFlag = RDFC.IsContainer(Bookmarks, RDF.GetResource(gBookmarkURL));
|
||||
if (!isContainerFlag) {
|
||||
// XXX To do: the "RDFC.IsContainer" call above only works for RDF sequences;
|
||||
// if its not a RDF sequence, we should to more checking to see if
|
||||
// the item in question is really a container of not. A good example
|
||||
// of this is the "File System" container.
|
||||
}
|
||||
|
||||
if (isContainerFlag) {
|
||||
// If it is a folder, it has no URL or Keyword
|
||||
document.getElementById("locationrow").setAttribute("hidden", "true");
|
||||
document.getElementById("shortcutrow").setAttribute("hidden", "true");
|
||||
}
|
||||
|
||||
if (gBookmarkURL.substr(0, 7).toLowerCase() != "http://" &&
|
||||
gBookmarkURL.substr(0, 8).toLowerCase() != "https://") {
|
||||
// only allow scheduling of http/https URLs
|
||||
document.getElementById("ScheduleTab").setAttribute("hidden", "true");
|
||||
document.getElementById("NotifyTab").setAttribute("hidden", "true");
|
||||
}
|
||||
|
||||
sizeToContent();
|
||||
|
||||
// Set up the enabled of controls on the scheduling panels
|
||||
dayRangeChange(document.getElementById("dayRange"));
|
||||
|
||||
// set initial focus
|
||||
var name = document.getElementById("name");
|
||||
name.focus();
|
||||
name.select();
|
||||
}
|
||||
|
||||
|
||||
|
||||
function Commit()
|
||||
{
|
||||
var changed = false;
|
||||
|
||||
// Grovel through the fields to see if any of the values have
|
||||
// changed. If so, update the RDF graph and force them to be saved
|
||||
// to disk.
|
||||
for (var i = 0; i < gFields.length; ++i) {
|
||||
var field = document.getElementById(gFields[i]);
|
||||
|
||||
if (field) {
|
||||
// Get the new value as a literal, using 'null' if the value is empty.
|
||||
var newvalue = field.value;
|
||||
|
||||
var oldvalue = Bookmarks.GetTarget(RDF.GetResource(gBookmarkURL),
|
||||
RDF.GetResource(gProperties[i]),
|
||||
true);
|
||||
|
||||
if (oldvalue)
|
||||
oldvalue = oldvalue.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
|
||||
if (newvalue && gProperties[i] == (NC_NAMESPACE_URI + "ShortcutURL")) {
|
||||
// shortcuts are always lowercased internally
|
||||
newvalue = newvalue.toLowerCase();
|
||||
}
|
||||
else if (newvalue && gProperties[i] == (NC_NAMESPACE_URI + "URL")) {
|
||||
// we're dealing with the URL attribute;
|
||||
// if a scheme isn't specified, use "http://"
|
||||
if (newvalue.indexOf(":") < 0)
|
||||
newvalue = "http://" + newvalue;
|
||||
}
|
||||
|
||||
if (newvalue)
|
||||
newvalue = RDF.GetLiteral(newvalue);
|
||||
|
||||
if (updateAttribute(gProperties[i], oldvalue, newvalue)) {
|
||||
// Update gBookmarkURL if the url changed
|
||||
if (newvalue && gProperties[i] == NC_NAMESPACE_URI + "URL")
|
||||
gBookmarkURL = newvalue.Value;
|
||||
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update bookmark schedule if necessary;
|
||||
// if the tab was removed, just skip it
|
||||
var scheduleTab = document.getElementById("ScheduleTab");
|
||||
if (scheduleTab) {
|
||||
var scheduleRes = "http://home.netscape.com/WEB-rdf#Schedule";
|
||||
oldvalue = Bookmarks.GetTarget(RDF.GetResource(gBookmarkURL),
|
||||
RDF.GetResource(scheduleRes), true);
|
||||
newvalue = "";
|
||||
var dayRangeNode = document.getElementById("dayRange");
|
||||
var dayRange = dayRangeNode.selectedItem.getAttribute("value");
|
||||
|
||||
if (dayRange) {
|
||||
var startHourRangeNode = document.getElementById("startHourRange");
|
||||
var startHourRange = startHourRangeNode.selectedItem.getAttribute("value");
|
||||
|
||||
var endHourRangeNode = document.getElementById("endHourRange");
|
||||
var endHourRange = endHourRangeNode.selectedItem.getAttribute("value");
|
||||
|
||||
if (parseInt(startHourRange) > parseInt(endHourRange)) {
|
||||
var temp = startHourRange;
|
||||
startHourRange = endHourRange;
|
||||
endHourRange = temp;
|
||||
}
|
||||
|
||||
var bookmarkBundle;
|
||||
var duration = document.getElementById("duration").value;
|
||||
if (!duration) {
|
||||
bookmarkBundle = document.getElementById("bundle_bookmark");
|
||||
alert (bookmarkBundle.getString("pleaseEnterADuration"));
|
||||
return false;
|
||||
}
|
||||
|
||||
var methods = [];
|
||||
if (document.getElementById("bookmarkIcon").checked)
|
||||
methods.push("icon");
|
||||
if (document.getElementById("playSound").checked)
|
||||
methods.push("sound");
|
||||
if (document.getElementById("showAlert").checked)
|
||||
methods.push("alert");
|
||||
if (document.getElementById("openWindow").checked)
|
||||
methods.push("open");
|
||||
|
||||
if (methods.length == 0) {
|
||||
bookmarkBundle = document.getElementById("bundle_bookmark");
|
||||
alert (bookmarkBundle.getString("pleaseSelectANotification"));
|
||||
return false;
|
||||
}
|
||||
|
||||
var method = methods.join(); // join string in array with ","
|
||||
|
||||
newvalue = dayRange + "|" + startHourRange + "-" + endHourRange + "|" + duration + "|" + method;
|
||||
}
|
||||
|
||||
if (newvalue)
|
||||
newvalue = RDF.GetLiteral(newvalue);
|
||||
|
||||
if (updateAttribute(scheduleRes, oldvalue, newvalue))
|
||||
changed = true;
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
var remote = Bookmarks.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
||||
if (remote)
|
||||
remote.Flush();
|
||||
}
|
||||
|
||||
window.close();
|
||||
return true;
|
||||
}
|
||||
|
||||
function updateAttribute(prop, oldvalue, newvalue)
|
||||
{
|
||||
var changed = false;
|
||||
|
||||
if (prop && (oldvalue || newvalue) && oldvalue != newvalue) {
|
||||
|
||||
if (oldvalue && !newvalue) {
|
||||
Bookmarks.Unassert(RDF.GetResource(gBookmarkURL),
|
||||
RDF.GetResource(prop),
|
||||
oldvalue);
|
||||
}
|
||||
else if (!oldvalue && newvalue) {
|
||||
Bookmarks.Assert(RDF.GetResource(gBookmarkURL),
|
||||
RDF.GetResource(prop),
|
||||
newvalue,
|
||||
true);
|
||||
}
|
||||
else /* if (oldvalue && newvalue) */ {
|
||||
Bookmarks.Change(RDF.GetResource(gBookmarkURL),
|
||||
RDF.GetResource(prop),
|
||||
oldvalue,
|
||||
newvalue);
|
||||
}
|
||||
|
||||
changed = true;
|
||||
}
|
||||
|
||||
return changed;
|
||||
}
|
||||
|
||||
function setEndHourRange()
|
||||
{
|
||||
// Get the values of the start-time and end-time as ints
|
||||
var startHourRangeNode = document.getElementById("startHourRange");
|
||||
var startHourRange = startHourRangeNode.selectedItem.getAttribute("value");
|
||||
var startHourRangeInt = parseInt(startHourRange);
|
||||
|
||||
var endHourRangeNode = document.getElementById("endHourRange");
|
||||
var endHourRange = endHourRangeNode.selectedItem.getAttribute("value");
|
||||
var endHourRangeInt = parseInt(endHourRange);
|
||||
|
||||
var endHourItemNode = endHourRangeNode.firstChild.firstChild;
|
||||
|
||||
var index = 0;
|
||||
|
||||
// disable all those end-times before the start-time
|
||||
for (; index < startHourRangeInt; ++index) {
|
||||
endHourItemNode.setAttribute("disabled", "true");
|
||||
endHourItemNode = endHourItemNode.nextSibling;
|
||||
}
|
||||
|
||||
// update the selected value if it's out of the allowed range
|
||||
if (startHourRangeInt >= endHourRangeInt)
|
||||
endHourRangeNode.selectedItem = endHourItemNode;
|
||||
|
||||
// make sure all the end-times after the start-time are enabled
|
||||
for (; index < 24; ++index) {
|
||||
endHourItemNode.removeAttribute("disabled");
|
||||
endHourItemNode = endHourItemNode.nextSibling;
|
||||
}
|
||||
}
|
||||
|
||||
function dayRangeChange (aMenuList)
|
||||
{
|
||||
var controls = ["startHourRange", "endHourRange", "duration", "bookmarkIcon",
|
||||
"showAlert", "openWindow", "playSound", "durationSubLabel",
|
||||
"durationLabel", "startHourRangeLabel", "endHourRangeLabel"];
|
||||
for (var i = 0; i < controls.length; ++i)
|
||||
document.getElementById(controls[i]).disabled = !aMenuList.value;
|
||||
}
|
||||
|
||||
|
||||
235
mozilla/xpfe/components/bookmarks/resources/bm-props.xul
Normal file
@@ -0,0 +1,235 @@
|
||||
<?xml version="1.0"?> <!-- -*- Mode: SGML; indent-tabs-mode: nil; -*- -->
|
||||
<!--
|
||||
|
||||
The contents of this file are subject to the Netscape Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
|
||||
-->
|
||||
|
||||
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://communicator/skin/bookmarks/bookmarks.css" type="text/css"?>
|
||||
|
||||
<!DOCTYPE window [
|
||||
<!ENTITY % brandDTD SYSTEM "chrome://global/locale/brand.dtd" >
|
||||
%brandDTD;
|
||||
<!ENTITY % bmpropsDTD SYSTEM "chrome://communicator/locale/bookmarks/bm-props.dtd">
|
||||
%bmpropsDTD;
|
||||
]>
|
||||
|
||||
<dialog id="bmPropsWindow" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
title="&bookmarks.windowtitle.label;"
|
||||
onload="Init()" style="width: 30em;"
|
||||
ondialogaccept="return Commit();">
|
||||
|
||||
<stringbundle id="bundle_bookmark" src="chrome://communicator/locale/bookmarks/bookmark.properties"/>
|
||||
<script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/>
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bm-props.js"/>
|
||||
|
||||
<keyset id="keyset"/>
|
||||
|
||||
<tabbox>
|
||||
<tabs>
|
||||
<tab label="&generalInfo.label;" accesskey="&generalInfo.accesskey;"/>
|
||||
<tab id="ScheduleTab" label="&schedule.label;" accesskey="&schedule.accesskey;"/>
|
||||
<tab id="NotifyTab" label="¬ification.label;" accesskey="¬ification.accesskey;"/>
|
||||
</tabs>
|
||||
<tabpanels>
|
||||
<vbox>
|
||||
<separator class="thin"/>
|
||||
<hbox align="start">
|
||||
<image class="message-icon"/>
|
||||
<separator class="thin" orient="vertical"/>
|
||||
<description flex="1">&generaldesc.label;</description>
|
||||
</hbox>
|
||||
|
||||
<separator class="thin"/>
|
||||
|
||||
<vbox class="box-padded">
|
||||
<grid>
|
||||
<columns>
|
||||
<column />
|
||||
<column flex="1"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row align="center">
|
||||
<label value="&bookmarks.name.label;" control="name"/>
|
||||
<textbox id="name"/>
|
||||
</row>
|
||||
<row id="locationrow" align="center">
|
||||
<label value="&bookmarks.location.label;" control="url"/>
|
||||
<textbox id="url" />
|
||||
</row>
|
||||
<row id="shortcutrow" align="center">
|
||||
<label value="&bookmarks.shortcut.label;" control="shortcut"/>
|
||||
<textbox id="shortcut" />
|
||||
</row>
|
||||
<row>
|
||||
<label value="&bookmarks.description.label;" control="description"/>
|
||||
<textbox multiline="true" wrap="virtual" id="description" flex="1"/>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<separator/>
|
||||
</vbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<separator class="thin"/>
|
||||
<hbox align="center">
|
||||
<image id="schedule-icon"/>
|
||||
<separator class="thin" orient="vertical"/>
|
||||
<description flex="1">&schedule.description;</description>
|
||||
</hbox>
|
||||
<separator class="thin"/>
|
||||
<hbox class="box-padded">
|
||||
<spacer flex="1"/>
|
||||
<groupbox>
|
||||
<caption label="&checkforupdates.legend.label;"/>
|
||||
<grid flex="1">
|
||||
<columns>
|
||||
<column/>
|
||||
<column flex="1"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row align="center">
|
||||
<label value="&when.label;" control="dayRange"/>
|
||||
<hbox>
|
||||
<menulist id="dayRange" oncommand="dayRangeChange(this);">
|
||||
<menupopup>
|
||||
<menuitem value="" label="&checknever.label;"/>
|
||||
<menuseparator />
|
||||
<menuitem value="0123456" label="&checkeveryday.label;"/>
|
||||
<menuitem value="12345" label="&checkweekdays.label;"/>
|
||||
<menuitem value="06" label="&checkweekends.label;"/>
|
||||
<menuitem value="1" label="&checkmondays.label;"/>
|
||||
<menuitem value="2" label="&checktuesdays.label;"/>
|
||||
<menuitem value="3" label="&checkwednesdays.label;"/>
|
||||
<menuitem value="4" label="&checkthursdays.label;"/>
|
||||
<menuitem value="5" label="&checkfridays.label;"/>
|
||||
<menuitem value="6" label="&checksaturdays.label;"/>
|
||||
<menuitem value="0" label="&checksundays.label;"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
</hbox>
|
||||
</row>
|
||||
<row align="center">
|
||||
<label id="startHourRangeLabel"
|
||||
value="&from.label;" control="startHourRange"/>
|
||||
<hbox align="center">
|
||||
<menulist id="startHourRange" oncommand="setEndHourRange()">
|
||||
<menupopup>
|
||||
<menuitem value="0" label="&midnight.label;"/>
|
||||
<menuitem value="1" label="&AMone.label;"/>
|
||||
<menuitem value="2" label="&AMtwo.label;"/>
|
||||
<menuitem value="3" label="&AMthree.label;"/>
|
||||
<menuitem value="4" label="&AMfour.label;"/>
|
||||
<menuitem value="5" label="&AMfive.label;"/>
|
||||
<menuitem value="6" label="&AMsix.label;"/>
|
||||
<menuitem value="7" label="&AMseven.label;"/>
|
||||
<menuitem value="8" label="&AMeight.label;"/>
|
||||
<menuitem value="9" label="&AMnine.label;"/>
|
||||
<menuitem value="10" label="&AMten.label;"/>
|
||||
<menuitem value="11" label="&AMeleven.label;"/>
|
||||
<menuitem value="12" label="&noon.label;"/>
|
||||
<menuitem value="13" label="&PMone.label;"/>
|
||||
<menuitem value="14" label="&PMtwo.label;"/>
|
||||
<menuitem value="15" label="&PMthree.label;"/>
|
||||
<menuitem value="16" label="&PMfour.label;"/>
|
||||
<menuitem value="17" label="&PMfive.label;"/>
|
||||
<menuitem value="18" label="&PMsix.label;"/>
|
||||
<menuitem value="19" label="&PMseven.label;"/>
|
||||
<menuitem value="20" label="&PMeight.label;"/>
|
||||
<menuitem value="21" label="&PMnine.label;"/>
|
||||
<menuitem value="22" label="&PMten.label;"/>
|
||||
<menuitem value="23" label="&PMeleven.label;"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
<label id="endHourRangeLabel"
|
||||
value="&to.label;" control="endHourRange"/>
|
||||
<menulist id="endHourRange">
|
||||
<menupopup onpopupshowing="setEndHourRange()">
|
||||
<menuitem value="1" label="&AMone.label;"/>
|
||||
<menuitem value="2" label="&AMtwo.label;"/>
|
||||
<menuitem value="3" label="&AMthree.label;"/>
|
||||
<menuitem value="4" label="&AMfour.label;"/>
|
||||
<menuitem value="5" label="&AMfive.label;"/>
|
||||
<menuitem value="6" label="&AMsix.label;"/>
|
||||
<menuitem value="7" label="&AMseven.label;"/>
|
||||
<menuitem value="8" label="&AMeight.label;"/>
|
||||
<menuitem value="9" label="&AMnine.label;"/>
|
||||
<menuitem value="10" label="&AMten.label;"/>
|
||||
<menuitem value="11" label="&AMeleven.label;"/>
|
||||
<menuitem value="12" label="&noon.label;"/>
|
||||
<menuitem value="13" label="&PMone.label;"/>
|
||||
<menuitem value="14" label="&PMtwo.label;"/>
|
||||
<menuitem value="15" label="&PMthree.label;"/>
|
||||
<menuitem value="16" label="&PMfour.label;"/>
|
||||
<menuitem value="17" label="&PMfive.label;"/>
|
||||
<menuitem value="18" label="&PMsix.label;"/>
|
||||
<menuitem value="19" label="&PMseven.label;"/>
|
||||
<menuitem value="20" label="&PMeight.label;"/>
|
||||
<menuitem value="21" label="&PMnine.label;"/>
|
||||
<menuitem value="22" label="&PMten.label;"/>
|
||||
<menuitem value="23" label="&PMeleven.label;"/>
|
||||
<menuitem value="24" label="&midnight.label;"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
</hbox>
|
||||
</row>
|
||||
<row align="center">
|
||||
<label id="durationLabel"
|
||||
value="&every.label;" control="duration"/>
|
||||
<hbox align="center">
|
||||
<textbox id="duration" size="4" value="60" />
|
||||
<label id="durationSubLabel" value="&minutes.label;" />
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
<separator class="thin"/>
|
||||
</groupbox>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
<vbox>
|
||||
<separator class="thin"/>
|
||||
<hbox align="start">
|
||||
<image id="notification-icon"/>
|
||||
<separator class="thin" orient="vertical"/>
|
||||
<description flex="1">¬ification.description;</description>
|
||||
</hbox>
|
||||
<separator class="thin"/>
|
||||
<hbox class="box-padded">
|
||||
<spacer flex="1"/>
|
||||
<groupbox>
|
||||
<caption label="¬ifications.legend.label;" />
|
||||
<vbox align="start">
|
||||
<checkbox id="bookmarkIcon" label="¬ification.icon.label;" />
|
||||
<checkbox id="showAlert" label="¬ification.alert.label;" />
|
||||
<checkbox id="openWindow" label="¬ification.window.label;" />
|
||||
<checkbox id="playSound" label="¬ification.sound.label;" />
|
||||
</vbox>
|
||||
</groupbox>
|
||||
<spacer flex="1"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</tabpanels>
|
||||
</tabbox>
|
||||
</dialog>
|
||||
854
mozilla/xpfe/components/bookmarks/resources/bookmarks-temp.js
Normal file
@@ -0,0 +1,854 @@
|
||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*
|
||||
This is the old bookmarks code, included here for the sake of the bookmarks sidebar panel,
|
||||
which will be fixed to use my new code in .9. In the mean time, this file provides a
|
||||
life line to various functionality.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
var NC_NS = "http://home.netscape.com/NC-rdf#";
|
||||
var RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
|
||||
|
||||
function Init() {
|
||||
var tree = document.getElementById("bookmarksTree");
|
||||
tree.controllers.appendController(BookmarksController);
|
||||
var children = document.getElementById('treechildren-bookmarks');
|
||||
tree.selectItem(children.firstChild);
|
||||
tree.focus();
|
||||
|
||||
RefreshSort();
|
||||
}
|
||||
|
||||
var BookmarksController = {
|
||||
supportsCommand: function(command)
|
||||
{
|
||||
switch(command)
|
||||
{
|
||||
case "cmd_undo":
|
||||
case "cmd_redo":
|
||||
return false;
|
||||
case "cmd_cut":
|
||||
case "cmd_copy":
|
||||
case "cmd_paste":
|
||||
case "cmd_delete":
|
||||
case "cmd_selectAll":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
},
|
||||
isCommandEnabled: function(command)
|
||||
{
|
||||
switch(command)
|
||||
{
|
||||
case "cmd_undo":
|
||||
case "cmd_redo":
|
||||
return false;
|
||||
case "cmd_cut":
|
||||
case "cmd_copy":
|
||||
case "cmd_paste":
|
||||
case "cmd_delete":
|
||||
case "cmd_selectAll":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
},
|
||||
doCommand: function(command)
|
||||
{
|
||||
switch(command)
|
||||
{
|
||||
case "cmd_undo":
|
||||
case "cmd_redo":
|
||||
break;
|
||||
case "cmd_cut":
|
||||
doCut();
|
||||
break;
|
||||
case "cmd_copy":
|
||||
doCopy();
|
||||
break;
|
||||
case "cmd_paste":
|
||||
doPaste();
|
||||
break;
|
||||
case "cmd_delete":
|
||||
doDelete();
|
||||
break;
|
||||
case "cmd_selectAll":
|
||||
doSelectAll();
|
||||
break;
|
||||
}
|
||||
},
|
||||
onEvent: function(event)
|
||||
{
|
||||
// On blur events set the menu item texts back to the normal values
|
||||
/*if (event == 'blur' )
|
||||
{
|
||||
goSetMenuValue('cmd_undo', 'valueDefault');
|
||||
goSetMenuValue('cmd_redo', 'valueDefault');
|
||||
}*/
|
||||
}
|
||||
};
|
||||
|
||||
function CommandUpdate_Bookmarks()
|
||||
{
|
||||
//goUpdateCommand('button_delete');
|
||||
// get selection info from dir pane
|
||||
/*
|
||||
var oneAddressBookSelected = false;
|
||||
if ( dirTree && dirTree.selectedItems && (dirTree.selectedItems.length == 1) )
|
||||
oneAddressBookSelected = true;
|
||||
|
||||
// get selection info from results pane
|
||||
var selectedCards = GetSelectedAddresses();
|
||||
var oneOrMoreCardsSelected = false;
|
||||
if ( selectedCards )
|
||||
oneOrMoreCardsSelected = true;
|
||||
*/
|
||||
// set commands to enabled / disabled
|
||||
//goSetCommandEnabled('cmd_PrintCard', oneAddressBookSelected);
|
||||
goSetCommandEnabled('bm_cmd_find', true/*oneAddressBookSelected*/);
|
||||
}
|
||||
|
||||
function copySelectionToClipboard()
|
||||
{
|
||||
var treeNode = document.getElementById("bookmarksTree");
|
||||
if (!treeNode) return false;
|
||||
var select_list = treeNode.selectedItems;
|
||||
if (!select_list) return false;
|
||||
if (select_list.length < 1) return false;
|
||||
|
||||
var rdf_uri = "@mozilla.org/rdf/rdf-service;1"
|
||||
var RDF = Components.classes[rdf_uri].getService();
|
||||
RDF = RDF.QueryInterface(Components.interfaces.nsIRDFService);
|
||||
if (!RDF) return false;
|
||||
|
||||
var Bookmarks = RDF.GetDataSource("rdf:bookmarks");
|
||||
if (!Bookmarks) return false;
|
||||
|
||||
var nameRes = RDF.GetResource(NC_NS + "Name");
|
||||
if (!nameRes) return false;
|
||||
|
||||
// Build a url that encodes all the select nodes
|
||||
// as well as their parent nodes
|
||||
var url = "";
|
||||
var text = "";
|
||||
var html = "";
|
||||
|
||||
for (var nodeIndex = 0; nodeIndex < select_list.length; nodeIndex++)
|
||||
{
|
||||
var node = select_list[nodeIndex];
|
||||
if (!node) continue;
|
||||
|
||||
var ID = getAbsoluteID("bookmarksTree", node);
|
||||
if (!ID) continue;
|
||||
|
||||
var IDRes = RDF.GetResource(ID);
|
||||
if (!IDRes) continue;
|
||||
var nameNode = Bookmarks.GetTarget(IDRes, nameRes, true);
|
||||
var theName = "";
|
||||
if (nameNode)
|
||||
nameNode =
|
||||
nameNode.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
if (nameNode) theName = nameNode.Value;
|
||||
|
||||
url += "ID:{" + ID + "};";
|
||||
url += "NAME:{" + theName + "};";
|
||||
|
||||
if (node.getAttribute("container") == "true")
|
||||
{
|
||||
var type = node.getAttribute("type");
|
||||
if (type == NC_NS + "BookmarkSeparator")
|
||||
{
|
||||
// Note: can't encode separators in text, just html
|
||||
html += "<hr><p>";
|
||||
}
|
||||
else
|
||||
{
|
||||
text += ID + "\r";
|
||||
|
||||
html += "<a href='" + ID + "'>";
|
||||
if (theName != "")
|
||||
{
|
||||
html += theName;
|
||||
}
|
||||
html += "</a><p>";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (url == "") return false;
|
||||
|
||||
// get some useful components
|
||||
var trans_uri = "@mozilla.org/widget/transferable;1";
|
||||
var trans = Components.classes[trans_uri].createInstance();
|
||||
if (trans) trans = trans.QueryInterface(Components.interfaces.nsITransferable);
|
||||
if (!trans) return false;
|
||||
|
||||
var clip_uri = "@mozilla.org/widget/clipboard;1";
|
||||
var clip = Components.classes[clip_uri].getService();
|
||||
if (clip) clip = clip.QueryInterface(Components.interfaces.nsIClipboard);
|
||||
if (!clip) return false;
|
||||
clip.emptyClipboard(Components.interfaces.nsIClipboard.kGlobalClipboard);
|
||||
|
||||
// save bookmark's ID
|
||||
trans.addDataFlavor("moz/bookmarkclipboarditem");
|
||||
var data_uri = "@mozilla.org/supports-wstring;1";
|
||||
var data = Components.classes[data_uri].createInstance();
|
||||
if (data) {
|
||||
data = data.QueryInterface(Components.interfaces.nsISupportsWString);
|
||||
}
|
||||
if (!data) return false;
|
||||
data.data = url;
|
||||
// double byte data
|
||||
trans.setTransferData("moz/bookmarkclipboarditem", data, url.length*2);
|
||||
|
||||
if (text != "")
|
||||
{
|
||||
trans.addDataFlavor("text/unicode");
|
||||
|
||||
var textData_uri = "@mozilla.org/supports-wstring;1";
|
||||
var textData = Components.classes[textData_uri].createInstance();
|
||||
if (textData) textData = textData.QueryInterface(Components.interfaces.nsISupportsWString);
|
||||
if (!textData) return false;
|
||||
textData.data = text;
|
||||
// double byte data
|
||||
trans.setTransferData("text/unicode", textData, text.length*2);
|
||||
}
|
||||
if (html != "")
|
||||
{
|
||||
trans.addDataFlavor("text/html");
|
||||
|
||||
var wstring_uri = "@mozilla.org/supports-wstring;1";
|
||||
var htmlData = Components.classes[wstring_uri].createInstance();
|
||||
if (htmlData) {
|
||||
var wstring_interface = Components.interfaces.nsISupportsWString;
|
||||
htmlData = htmlData.QueryInterface(wstring_interface);
|
||||
}
|
||||
if (!htmlData) return false;
|
||||
htmlData.data = html;
|
||||
// double byte data
|
||||
trans.setTransferData("text/html", htmlData, html.length*2);
|
||||
}
|
||||
clip.setData(trans, null,
|
||||
Components.interfaces.nsIClipboard.kGlobalClipboard);
|
||||
return true;
|
||||
}
|
||||
|
||||
function doCut()
|
||||
{
|
||||
if (copySelectionToClipboard() == true) {
|
||||
doDelete(false);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function doCopy()
|
||||
{
|
||||
copySelectionToClipboard();
|
||||
return true;
|
||||
}
|
||||
|
||||
function doPaste()
|
||||
{
|
||||
var treeNode = document.getElementById("bookmarksTree");
|
||||
if (!treeNode) return false;
|
||||
var select_list = treeNode.selectedItems;
|
||||
if (!select_list) return false;
|
||||
if (select_list.length != 1) return false;
|
||||
|
||||
var pasteNodeID = select_list[0].getAttribute("id");
|
||||
var isContainerFlag = (select_list[0].getAttribute("container") == "true");
|
||||
|
||||
var clip_uri = "@mozilla.org/widget/clipboard;1";
|
||||
var clip = Components.classes[clip_uri].getService();
|
||||
if (clip) clip = clip.QueryInterface(Components.interfaces.nsIClipboard);
|
||||
if (!clip) return false;
|
||||
|
||||
var trans_uri = "@mozilla.org/widget/transferable;1";
|
||||
var trans = Components.classes[trans_uri].createInstance();
|
||||
if (trans) {
|
||||
trans = trans.QueryInterface(Components.interfaces.nsITransferable);
|
||||
}
|
||||
if (!trans) return false;
|
||||
trans.addDataFlavor("moz/bookmarkclipboarditem");
|
||||
|
||||
clip.getData(trans, Components.interfaces.nsIClipboard.kGlobalClipboard);
|
||||
var data = new Object();
|
||||
var dataLen = new Object();
|
||||
trans.getTransferData("moz/bookmarkclipboarditem", data, dataLen);
|
||||
if (data) {
|
||||
var data_interface = Components.interfaces.nsISupportsWString
|
||||
data = data.value.QueryInterface(data_interface);
|
||||
}
|
||||
var url = null;
|
||||
// double byte data
|
||||
if (data) url = data.data.substring(0, dataLen.value / 2);
|
||||
if (!url) return false;
|
||||
|
||||
var strings = url.split(";");
|
||||
if (!strings) return false;
|
||||
|
||||
var rdf_uri = "@mozilla.org/rdf/rdf-service;1";
|
||||
var RDF = Components.classes[rdf_uri].getService();
|
||||
RDF = RDF.QueryInterface(Components.interfaces.nsIRDFService);
|
||||
if (!RDF) return false;
|
||||
var rdfc_uri = "@mozilla.org/rdf/container;1";
|
||||
var RDFC = Components.classes[rdfc_uri].getService();
|
||||
RDFC = RDFC.QueryInterface(Components.interfaces.nsIRDFContainer);
|
||||
if (!RDFC) return false;
|
||||
var Bookmarks = RDF.GetDataSource("rdf:bookmarks");
|
||||
if (!Bookmarks) return false;
|
||||
|
||||
var nameRes = RDF.GetResource(NC_NS + "Name");
|
||||
if (!nameRes) return false;
|
||||
|
||||
pasteNodeRes = RDF.GetResource(pasteNodeID);
|
||||
if (!pasteNodeRes) return false;
|
||||
var pasteContainerRes = null;
|
||||
var pasteNodeIndex = -1;
|
||||
if (isContainerFlag == true)
|
||||
{
|
||||
pasteContainerRes = pasteNodeRes;
|
||||
}
|
||||
else
|
||||
{
|
||||
var parID = select_list[0].parentNode.parentNode.getAttribute("ref");
|
||||
if (!parID) {
|
||||
parID = select_list[0].parentNode.parentNode.getAttribute("id");
|
||||
}
|
||||
if (!parID) return false;
|
||||
pasteContainerRes = RDF.GetResource(parID);
|
||||
if (!pasteContainerRes) return false;
|
||||
}
|
||||
RDFC.Init(Bookmarks, pasteContainerRes);
|
||||
|
||||
if (isContainerFlag == false)
|
||||
{
|
||||
pasteNodeIndex = RDFC.IndexOf(pasteNodeRes);
|
||||
if (pasteNodeIndex < 0) return false; // how did that happen?
|
||||
}
|
||||
|
||||
var typeRes = RDF.GetResource(RDF_NS + "type");
|
||||
if (!typeRes) return false;
|
||||
var bmTypeRes = RDF.GetResource(NC_NS + "Bookmark");
|
||||
if (!bmTypeRes) return false;
|
||||
|
||||
var dirty = false;
|
||||
for (var x=0; x<strings.length; x=x+2)
|
||||
{
|
||||
var theID = strings[x];
|
||||
var theName = strings[x+1];
|
||||
if ((theID.indexOf("ID:{") == 0) && (theName.indexOf("NAME:{") == 0))
|
||||
{
|
||||
theID = theID.substr(4, theID.length-5);
|
||||
theName = theName.substr(6, theName.length-7);
|
||||
|
||||
var IDRes = RDF.GetResource(theID);
|
||||
if (!IDRes) continue;
|
||||
|
||||
if (RDFC.IndexOf(IDRes) > 0)
|
||||
continue;
|
||||
|
||||
if (theName != "")
|
||||
{
|
||||
var NameLiteral = RDF.GetLiteral(theName);
|
||||
if (NameLiteral)
|
||||
{
|
||||
Bookmarks.Assert(IDRes, nameRes, NameLiteral, true);
|
||||
dirty = true;
|
||||
}
|
||||
}
|
||||
if (isContainerFlag == true)
|
||||
RDFC.AppendElement(IDRes);
|
||||
else
|
||||
RDFC.InsertElementAt(IDRes, pasteNodeIndex++, true);
|
||||
dirty = true;
|
||||
|
||||
// make sure appropriate bookmark type is set
|
||||
var bmTypeNode = Bookmarks.GetTarget( IDRes, typeRes, true );
|
||||
if (!bmTypeNode)
|
||||
{
|
||||
// set default bookmark type
|
||||
Bookmarks.Assert(IDRes, typeRes, bmTypeRes, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (dirty == true)
|
||||
{
|
||||
var rdf_ds_interface = Components.interfaces.nsIRDFRemoteDataSource;
|
||||
var remote = Bookmarks.QueryInterface(rdf_ds_interface);
|
||||
if (remote)
|
||||
remote.Flush();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function doDelete(promptFlag)
|
||||
{
|
||||
var treeNode = document.getElementById("bookmarksTree");
|
||||
if (!treeNode) return false;
|
||||
var select_list = treeNode.selectedItems;
|
||||
if (!select_list) return false;
|
||||
if (select_list.length < 1) return false;
|
||||
|
||||
if (promptFlag == true)
|
||||
{
|
||||
var deleteStr = '';
|
||||
if (select_list.length == 1) {
|
||||
deleteStr = get_localized_string("DeleteItem");
|
||||
} else {
|
||||
deleteStr = get_localized_string("DeleteItems");
|
||||
}
|
||||
var ok = confirm(deleteStr);
|
||||
if (!ok) return false;
|
||||
}
|
||||
|
||||
var RDF_uri = "@mozilla.org/rdf/rdf-service;1";
|
||||
var RDF = Components.classes[RDF_uri].getService();
|
||||
RDF = RDF.QueryInterface(Components.interfaces.nsIRDFService);
|
||||
if (!RDF) return false;
|
||||
|
||||
var RDFC_uri = "@mozilla.org/rdf/container;1";
|
||||
var RDFC = Components.classes[RDFC_uri].getService();
|
||||
RDFC = RDFC.QueryInterface(Components.interfaces.nsIRDFContainer);
|
||||
if (!RDFC) return false;
|
||||
|
||||
var Bookmarks = RDF.GetDataSource("rdf:bookmarks");
|
||||
if (!Bookmarks) return false;
|
||||
|
||||
var dirty = false;
|
||||
|
||||
// note: backwards delete so that we handle odd deletion cases such as
|
||||
// deleting a child of a folder as well as the folder itself
|
||||
for (var nodeIndex=select_list.length-1; nodeIndex>=0; nodeIndex--)
|
||||
{
|
||||
var node = select_list[nodeIndex];
|
||||
if (!node) continue;
|
||||
var ID = node.getAttribute("id");
|
||||
if (!ID) continue;
|
||||
|
||||
// don't allow deletion of various "special" folders
|
||||
if ((ID == "NC:BookmarksRoot") || (ID == "NC:IEFavoritesRoot"))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var parentID = node.parentNode.parentNode.getAttribute("ref");
|
||||
if (!parentID) parentID = node.parentNode.parentNode.getAttribute("id");
|
||||
if (!parentID) continue;
|
||||
|
||||
var IDRes = RDF.GetResource(ID);
|
||||
if (!IDRes) continue;
|
||||
var parentIDRes = RDF.GetResource(parentID);
|
||||
if (!parentIDRes) continue;
|
||||
|
||||
RDFC.Init(Bookmarks, parentIDRes);
|
||||
RDFC.RemoveElement(IDRes, true);
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
if (dirty == true)
|
||||
{
|
||||
var remote = Bookmarks.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
||||
if (remote)
|
||||
remote.Flush();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function doSelectAll()
|
||||
{
|
||||
var treeNode = document.getElementById("bookmarksTree");
|
||||
if (!treeNode) return false;
|
||||
treeNode.selectAll();
|
||||
return true;
|
||||
}
|
||||
|
||||
function doUnload()
|
||||
{
|
||||
// Get the current window position/size.
|
||||
var x = window.screenX;
|
||||
var y = window.screenY;
|
||||
var h = window.outerHeight;
|
||||
var w = window.outerWidth;
|
||||
|
||||
// Store these into the window attributes (for persistence).
|
||||
var win = document.getElementById("bookmark-window");
|
||||
win.setAttribute("x", x);
|
||||
win.setAttribute("y", y);
|
||||
win.setAttribute("height", h);
|
||||
win.setAttribute("width", w);
|
||||
}
|
||||
|
||||
function BookmarkProperties()
|
||||
{
|
||||
var treeNode = document.getElementById('bookmarksTree');
|
||||
var select_list = treeNode.selectedItems;
|
||||
|
||||
if (select_list.length >= 1) {
|
||||
// don't bother showing properties on bookmark separators
|
||||
var type = select_list[0].getAttribute('type');
|
||||
if (type != NC_NS + "BookmarkSeparator") {
|
||||
window.openDialog("chrome://communicator/content/bookmarks/bm-props.xul",
|
||||
"_blank", "centerscreen,chrome,menubar",
|
||||
select_list[0].getAttribute("id"));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function OpenBookmarksFind()
|
||||
{
|
||||
window.openDialog("chrome://communicator/content/bookmarks/bm-find.xul",
|
||||
"FindBookmarksWindow",
|
||||
"dialog=no,close,chrome,resizable", "bookmarks");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function getAbsoluteID(root, node)
|
||||
{
|
||||
var url = node.getAttribute("ref");
|
||||
if ((url == null) || (url == ""))
|
||||
{
|
||||
url = node.getAttribute("id");
|
||||
}
|
||||
try
|
||||
{
|
||||
var rootNode = document.getElementById(root);
|
||||
var ds = null;
|
||||
if (rootNode)
|
||||
{
|
||||
ds = rootNode.database;
|
||||
}
|
||||
|
||||
// add support for anonymous resources such as Internet Search results,
|
||||
// IE favorites under Win32, and NetPositive URLs under BeOS
|
||||
var rdf_uri = "@mozilla.org/rdf/rdf-service;1";
|
||||
var rdf = Components.classes[rdf_uri].getService();
|
||||
if (rdf) rdf = rdf.QueryInterface(Components.interfaces.nsIRDFService);
|
||||
if (rdf && ds)
|
||||
{
|
||||
var src = rdf.GetResource(url, true);
|
||||
var prop = rdf.GetResource(NC_NS + "URL",
|
||||
true);
|
||||
var target = ds.GetTarget(src, prop, true);
|
||||
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
if (target) target = target.Value;
|
||||
if (target) url = target;
|
||||
}
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
function OpenURL(event, node, root)
|
||||
{
|
||||
if ((event.button != 0) || (event.detail != 2)
|
||||
|| (node.nodeName != "treeitem"))
|
||||
return false;
|
||||
|
||||
if (node.getAttribute("container") == "true")
|
||||
return false;
|
||||
|
||||
var url = getAbsoluteID(root, node);
|
||||
|
||||
// Ignore "NC:" urls.
|
||||
if (url.substring(0, 3) == "NC:")
|
||||
return false;
|
||||
|
||||
if (event.altKey)
|
||||
{
|
||||
BookmarkProperties();
|
||||
}
|
||||
else
|
||||
{
|
||||
// get right sized window
|
||||
window.openDialog(getBrowserURL(), "_blank", "chrome,all,dialog=no", url);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
const nsIFilePicker = Components.interfaces.nsIFilePicker;
|
||||
|
||||
function doContextCmd(cmdName)
|
||||
{
|
||||
// Do some prompting/confirmation for various bookmark
|
||||
// commands that we know about.
|
||||
// If we have values to pass it, they are added to the arguments array
|
||||
|
||||
var nameVal = "";
|
||||
var urlVal = "";
|
||||
var promptStr;
|
||||
|
||||
var picker_uri;
|
||||
var filePicker;
|
||||
|
||||
if (cmdName == NC_NS + "command?cmd=newbookmark")
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
promptStr = get_localized_string("NewBookmarkURLPrompt");
|
||||
urlVal = prompt(promptStr, "");
|
||||
if (!urlVal || urlVal=="") return false;
|
||||
|
||||
// ensure we get a fully qualified URL (protocol colon address)
|
||||
var colonOffset = urlVal.indexOf(":");
|
||||
if (colonOffset > 0) break;
|
||||
alert(get_localized_string("NeedValidURL"));
|
||||
}
|
||||
|
||||
promptStr = get_localized_string("NewBookmarkNamePrompt");
|
||||
nameVal = prompt(promptStr, "");
|
||||
if (!nameVal || nameVal=="") return false;
|
||||
}
|
||||
else if (cmdName == NC_NS + "command?cmd=newfolder")
|
||||
{
|
||||
promptStr = get_localized_string("NewFolderNamePrompt");
|
||||
nameVal = prompt(promptStr, "");
|
||||
if (!nameVal || nameVal=="") return false;
|
||||
}
|
||||
else if ((cmdName == NC_NS + "command?cmd=deletebookmark") ||
|
||||
(cmdName == NC_NS + "command?cmd=deletebookmarkfolder") ||
|
||||
(cmdName == NC_NS + "command?cmd=deletebookmarkseparator"))
|
||||
{
|
||||
return doDelete(true);
|
||||
//var promptStr = get_localized_string("DeleteItems");
|
||||
//if (!confirm(promptStr)) return false;
|
||||
}
|
||||
else if (cmdName == NC_NS + "command?cmd=import")
|
||||
{
|
||||
try
|
||||
{
|
||||
picker_uri = "@mozilla.org/filepicker;1";
|
||||
filePicker = Components.classes[picker_uri].createInstance(nsIFilePicker);
|
||||
if (!filePicker) return false;
|
||||
|
||||
promptStr = get_localized_string("SelectImport");
|
||||
filePicker.init(window, promptStr, nsIFilePicker.modeOpen);
|
||||
filePicker.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterAll);
|
||||
if (filePicker.show() != nsIFilePicker.returnCancel)
|
||||
var filename = filePicker.fileURL.spec;
|
||||
if ((!filename) || (filename == "")) return false;
|
||||
|
||||
urlVal = filename;
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (cmdName == NC_NS + "command?cmd=export")
|
||||
{
|
||||
try
|
||||
{
|
||||
picker_uri = "@mozilla.org/filepicker;1";
|
||||
filePicker = Components.classes[picker_uri].createInstance(nsIFilePicker);
|
||||
if (!filePicker) return false;
|
||||
|
||||
promptStr = get_localized_string("EnterExport");
|
||||
filePicker.init(window, promptStr, nsIFilePicker.modeSave);
|
||||
filePicker.defaultString = "bookmarks.html";
|
||||
filePicker.appendFilters(nsIFilePicker.filterHTML | nsIFilePicker.filterAll);
|
||||
if (filePicker.show() != nsIFilePicker.returnCancel &&
|
||||
filePicker.fileURL.spec &&
|
||||
filePicker.fileURL.spec.length > 0) {
|
||||
urlVal = filePicker.fileURL.spec;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
var treeNode = document.getElementById("bookmarksTree");
|
||||
if (!treeNode) return false;
|
||||
var db = treeNode.database;
|
||||
if (!db) return false;
|
||||
|
||||
var compositeDB = db.QueryInterface(Components.interfaces.nsIRDFDataSource);
|
||||
if (!compositeDB) return false;
|
||||
|
||||
var isupports_uri = "@mozilla.org/rdf/rdf-service;1";
|
||||
var isupports = Components.classes[isupports_uri].getService();
|
||||
if (!isupports) return false;
|
||||
var rdf = isupports.QueryInterface(Components.interfaces.nsIRDFService);
|
||||
if (!rdf) return false;
|
||||
|
||||
// need a resource for the command
|
||||
var cmdResource = rdf.GetResource(cmdName);
|
||||
if (!cmdResource) return false;
|
||||
cmdResource = cmdResource.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
if (!cmdResource) return false;
|
||||
|
||||
// set up selection nsISupportsArray
|
||||
var selection_uri = "@mozilla.org/supports-array;1";
|
||||
var selectionInstance = Components.classes[selection_uri].createInstance();
|
||||
var selectionArray = selectionInstance.QueryInterface(Components.interfaces.nsISupportsArray);
|
||||
|
||||
// set up arguments nsISupportsArray
|
||||
var arguments_uri = "@mozilla.org/supports-array;1";
|
||||
var argumentsInstance = Components.classes[arguments_uri].createInstance();
|
||||
var argumentsArray = argumentsInstance.QueryInterface(Components.interfaces.nsISupportsArray);
|
||||
|
||||
// get various arguments (parent, name)
|
||||
var parentArc = rdf.GetResource(NC_NS + "parent");
|
||||
if (!parentArc) return false;
|
||||
var nameArc = rdf.GetResource(NC_NS + "Name");
|
||||
if (!nameArc) return false;
|
||||
var urlArc = rdf.GetResource(NC_NS + "URL");
|
||||
if (!urlArc) return false;
|
||||
|
||||
var select_list = treeNode.selectedItems;
|
||||
|
||||
var uri;
|
||||
var rdfNode;
|
||||
|
||||
if (select_list.length < 1)
|
||||
{
|
||||
// if nothing is selected, default to using the "ref"
|
||||
// on the root of the tree
|
||||
uri = treeNode.getAttribute("ref");
|
||||
if (!uri || uri=="") return false;
|
||||
rdfNode = rdf.GetResource(uri);
|
||||
// add node into selection array
|
||||
if (rdfNode)
|
||||
{
|
||||
selectionArray.AppendElement(rdfNode);
|
||||
}
|
||||
|
||||
// add singular arguments into arguments array
|
||||
if ((nameVal) && (nameVal != ""))
|
||||
{
|
||||
var nameLiteral = rdf.GetLiteral(nameVal);
|
||||
if (!nameLiteral) return false;
|
||||
argumentsArray.AppendElement(nameArc);
|
||||
argumentsArray.AppendElement(nameLiteral);
|
||||
}
|
||||
if ((urlVal) && (urlVal != ""))
|
||||
{
|
||||
var urlLiteral = rdf.GetLiteral(urlVal);
|
||||
if (!urlLiteral) return false;
|
||||
argumentsArray.AppendElement(urlArc);
|
||||
argumentsArray.AppendElement(urlLiteral);
|
||||
}
|
||||
}
|
||||
else for (var nodeIndex=0; nodeIndex<select_list.length; nodeIndex++)
|
||||
{
|
||||
var node = select_list[nodeIndex];
|
||||
if (!node) break;
|
||||
uri = node.getAttribute("ref");
|
||||
if ((uri) || (uri == ""))
|
||||
{
|
||||
uri = node.getAttribute("id");
|
||||
}
|
||||
if (!uri) return false;
|
||||
|
||||
rdfNode = rdf.GetResource(uri);
|
||||
if (!rdfNode) break;
|
||||
|
||||
// add node into selection array
|
||||
selectionArray.AppendElement(rdfNode);
|
||||
|
||||
// get the parent's URI
|
||||
var parentURI = "";
|
||||
var theParent = node.parentNode.parentNode;
|
||||
parentURI = theParent.getAttribute("ref");
|
||||
if ((!parentURI) || (parentURI == ""))
|
||||
{
|
||||
parentURI = theParent.getAttribute("id");
|
||||
}
|
||||
if (parentURI == "") return false;
|
||||
|
||||
var parentNode = rdf.GetResource(parentURI, true);
|
||||
if (!parentNode) return false;
|
||||
|
||||
// add multiple arguments into arguments array
|
||||
argumentsArray.AppendElement(parentArc);
|
||||
argumentsArray.AppendElement(parentNode);
|
||||
|
||||
if ((nameVal) && (nameVal != ""))
|
||||
{
|
||||
var nameLiteral2 = rdf.GetLiteral(nameVal);
|
||||
if (!nameLiteral2) return false;
|
||||
argumentsArray.AppendElement(nameArc);
|
||||
argumentsArray.AppendElement(nameLiteral2);
|
||||
}
|
||||
if ((urlVal) && (urlVal != ""))
|
||||
{
|
||||
var urlLiteral2 = rdf.GetLiteral(urlVal);
|
||||
if (!urlLiteral2) return false;
|
||||
argumentsArray.AppendElement(urlArc);
|
||||
argumentsArray.AppendElement(urlLiteral2);
|
||||
}
|
||||
}
|
||||
|
||||
// do the command
|
||||
compositeDB.DoCommand(selectionArray, cmdResource, argumentsArray);
|
||||
return true;
|
||||
}
|
||||
|
||||
function bookmarkSelect()
|
||||
{
|
||||
var tree = document.getElementById("bookmarksTree");
|
||||
var status = document.getElementById("statusbar-text");
|
||||
var val = "";
|
||||
if (tree.selectedItems.length == 1)
|
||||
{
|
||||
val = getAbsoluteID("bookmarksTree", tree.selectedItems[0]);
|
||||
|
||||
// Ignore "NC:" urls.
|
||||
if (val.substring(0, 3) == "NC:")
|
||||
{
|
||||
val = "";
|
||||
}
|
||||
}
|
||||
status.label = val;
|
||||
return true;
|
||||
}
|
||||
14
mozilla/xpfe/components/bookmarks/resources/bookmarks.css
Normal file
@@ -0,0 +1,14 @@
|
||||
bookmarks-tree, bookmarks-tree[type="multi-column"]
|
||||
{
|
||||
-moz-binding : url("chrome://communicator/content/bookmarks/bookmarks.xml#bookmarks-tree-full");
|
||||
}
|
||||
|
||||
bookmarks-tree[type="single-column"]
|
||||
{
|
||||
-moz-binding : url("chrome://communicator/content/bookmarks/bookmarks.xml#bookmarks-tree-name");
|
||||
}
|
||||
|
||||
bookmarks-tree[type="folders"]
|
||||
{
|
||||
-moz-binding : url("chrome://communicator/content/bookmarks/bookmarks.xml#bookmarks-tree-folders");
|
||||
}
|
||||
219
mozilla/xpfe/components/bookmarks/resources/bookmarks.js
Normal file
@@ -0,0 +1,219 @@
|
||||
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public
|
||||
* License Version 1.1 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS
|
||||
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* rights and limitations under the License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Netscape
|
||||
* Communications Corporation. Portions created by Netscape are
|
||||
* Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
* Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben Goodger <ben@netscape.com> (Original Author, v3.0)
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Initialize the command controllers, set focus, tree root,
|
||||
// window title state, etc.
|
||||
function Startup()
|
||||
{
|
||||
const windowNode = document.getElementById("bookmark-window");
|
||||
const bookmarksView = document.getElementById("bookmarks-view");
|
||||
var titleString;
|
||||
|
||||
// If we've been opened with a parameter, root the tree on it.
|
||||
if ("arguments" in window && window.arguments[0]) {
|
||||
var title;
|
||||
var uri = window.arguments[0];
|
||||
bookmarksView.tree.setAttribute("ref", uri);
|
||||
if (uri.substring(0,5) == "find:") {
|
||||
title = bookmarksView._bundle.GetStringFromName("search_results_title");
|
||||
// Update the windowtype so that future searches are directed
|
||||
// there and the window is not re-used for bookmarks.
|
||||
windowNode.setAttribute("windowtype", "bookmarks:searchresults");
|
||||
}
|
||||
else {
|
||||
const krNameArc = bookmarksView.rdf.GetResource(NC_NS + "Name");
|
||||
const krRoot = bookmarksView.rdf.GetResource(window.arguments[0]);
|
||||
var rName = bookmarksView.db.GetTarget(krRoot, krNameArc, true);
|
||||
title = rName.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
|
||||
}
|
||||
titleString = bookmarksView._bundle.GetStringFromName("window_title");
|
||||
titleString = titleString.replace(/%folder_name%/gi, title);
|
||||
windowNode.setAttribute("title", titleString);
|
||||
}
|
||||
else {
|
||||
const kProfileContractID = "@mozilla.org/profile/manager;1";
|
||||
const kProfileIID = Components.interfaces.nsIProfile;
|
||||
const kProfile = Components.classes[kProfileContractID].getService(kProfileIID);
|
||||
var length = {value:0};
|
||||
var profileList = kProfile.getProfileList(length);
|
||||
// unset the default BM title if the user has more than one profile
|
||||
// or if he/she has changed the name of the default one.
|
||||
// the profile "default" is not localizable.
|
||||
if (length.value > 1 || kProfile.currentProfile.toLowerCase() != "default") {
|
||||
titleString = bookmarksView._bundle.GetStringFromName("bookmarks_root");
|
||||
titleString = titleString.replace(/%user_name%/, kProfile.currentProfile);
|
||||
windowNode.setAttribute("title", titleString);
|
||||
}
|
||||
}
|
||||
|
||||
bookmarksView.treeBoxObject.selection.select(0);
|
||||
bookmarksView.tree.focus();
|
||||
}
|
||||
|
||||
function Shutdown ()
|
||||
{
|
||||
// Store current window position and size in window attributes (for persistence).
|
||||
var win = document.getElementById("bookmark-window");
|
||||
win.setAttribute("x", screenX);
|
||||
win.setAttribute("y", screenY);
|
||||
win.setAttribute("height", outerHeight);
|
||||
win.setAttribute("width", outerWidth);
|
||||
|
||||
var bookmarksView = document.getElementById("bookmarks-view");
|
||||
bookmarksView.flushBMDatasource();
|
||||
}
|
||||
|
||||
var gConstructedViewMenuSortItems = false;
|
||||
function fillViewMenu(aEvent)
|
||||
{
|
||||
var adjacentElement = document.getElementById("fill-before-this-node");
|
||||
var popupElement = aEvent.target;
|
||||
|
||||
var bookmarksView = document.getElementById("bookmarks-view");
|
||||
var columns = bookmarksView.columns;
|
||||
|
||||
if (!gConstructedViewMenuSortItems) {
|
||||
for (var i = 0; i < columns.length; ++i) {
|
||||
var name = columns[i].name;
|
||||
var accesskey = columns[i].accesskey;
|
||||
|
||||
var menuitem = document.createElement("menuitem");
|
||||
var nameTemplate = bookmarksView._bundle.GetStringFromName("SortMenuItem");
|
||||
name = nameTemplate.replace(/%NAME%/g, columns[i].label);
|
||||
menuitem.setAttribute("label", name);
|
||||
menuitem.setAttribute("accesskey", columns[i].accesskey);
|
||||
menuitem.setAttribute("resource", columns[i].resource);
|
||||
menuitem.setAttribute("id", "sortMenuItem:" + columns[i].resource);
|
||||
menuitem.setAttribute("checked", columns[i].sortActive);
|
||||
menuitem.setAttribute("name", "sortSet");
|
||||
menuitem.setAttribute("type", "radio");
|
||||
|
||||
popupElement.insertBefore(menuitem, adjacentElement);
|
||||
}
|
||||
|
||||
gConstructedViewMenuSortItems = true;
|
||||
}
|
||||
|
||||
const kPrefSvcContractID = "@mozilla.org/preferences;1";
|
||||
const kPrefSvcIID = Components.interfaces.nsIPrefService;
|
||||
var prefSvc = Components.classes[kPrefSvcContractID].getService(kPrefSvcIID);
|
||||
var bookmarksSortPrefs = prefSvc.getBranch("browser.bookmarks.sort.");
|
||||
|
||||
if (gConstructedViewMenuSortItems) {
|
||||
var resource = bookmarksSortPrefs.getCharPref("resource");
|
||||
var element = document.getElementById("sortMenuItem:" + resource);
|
||||
if (element)
|
||||
element.setAttribute("checked", "true");
|
||||
}
|
||||
|
||||
var sortAscendingMenu = document.getElementById("ascending");
|
||||
var sortDescendingMenu = document.getElementById("descending");
|
||||
var noSortMenu = document.getElementById("natural");
|
||||
|
||||
sortAscendingMenu.setAttribute("checked", "false");
|
||||
sortDescendingMenu.setAttribute("checked", "false");
|
||||
noSortMenu.setAttribute("checked", "false");
|
||||
var direction = bookmarksSortPrefs.getCharPref("direction");
|
||||
if (direction == "natural")
|
||||
sortAscendingMenu.setAttribute("checked", "true");
|
||||
else if (direction == "ascending")
|
||||
sortDescendingMenu.setAttribute("checked", "true");
|
||||
else
|
||||
noSortMenu.setAttribute("checked", "true");
|
||||
}
|
||||
|
||||
function onViewMenuSortItemSelected(aEvent)
|
||||
{
|
||||
var resource = aEvent.target.getAttribute("resource");
|
||||
|
||||
const kPrefSvcContractID = "@mozilla.org/preferences;1";
|
||||
const kPrefSvcIID = Components.interfaces.nsIPrefService;
|
||||
var prefSvc = Components.classes[kPrefSvcContractID].getService(kPrefSvcIID);
|
||||
var bookmarksSortPrefs = prefSvc.getBranch("browser.bookmarks.sort.");
|
||||
|
||||
switch (resource) {
|
||||
case "":
|
||||
break;
|
||||
case "direction":
|
||||
var dirn = bookmarksSortPrefs.getCharPref("direction");
|
||||
if (aEvent.target.id == "ascending")
|
||||
bookmarksSortPrefs.setCharPref("direction", "natural");
|
||||
else if (aEvent.target.id == "descending")
|
||||
bookmarksSortPrefs.setCharPref("direction", "ascending");
|
||||
else
|
||||
bookmarksSortPrefs.setCharPref("direction", "descending");
|
||||
break;
|
||||
default:
|
||||
bookmarksSortPrefs.setCharPref("resource", resource);
|
||||
var direction = bookmarksSortPrefs.getCharPref("direction");
|
||||
if (direction == "descending")
|
||||
bookmarksSortPrefs.setCharPref("direction", "natural");
|
||||
break;
|
||||
}
|
||||
|
||||
aEvent.preventCapture();
|
||||
}
|
||||
|
||||
var gConstructedColumnsMenuItems = false;
|
||||
function fillColumnsMenu(aEvent)
|
||||
{
|
||||
var bookmarksView = document.getElementById("bookmarks-view");
|
||||
var columns = bookmarksView.columns;
|
||||
var i;
|
||||
|
||||
if (!gConstructedColumnsMenuItems) {
|
||||
for (i = 0; i < columns.length; ++i) {
|
||||
var menuitem = document.createElement("menuitem");
|
||||
menuitem.setAttribute("label", columns[i].label);
|
||||
menuitem.setAttribute("resource", columns[i].resource);
|
||||
menuitem.setAttribute("id", "columnMenuItem:" + columns[i].resource);
|
||||
menuitem.setAttribute("type", "checkbox");
|
||||
menuitem.setAttribute("checked", columns[i].hidden != "true");
|
||||
aEvent.target.appendChild(menuitem);
|
||||
}
|
||||
|
||||
gConstructedColumnsMenuItems = true;
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < columns.length; ++i) {
|
||||
var element = document.getElementById("columnMenuItem:" + columns[i].resource);
|
||||
if (element && columns[i].hidden != "true")
|
||||
element.setAttribute("checked", "true");
|
||||
}
|
||||
}
|
||||
|
||||
aEvent.preventBubble();
|
||||
}
|
||||
|
||||
function onViewMenuColumnItemSelected(aEvent)
|
||||
{
|
||||
var resource = aEvent.target.getAttribute("resource");
|
||||
if (resource != "") {
|
||||
var bookmarksView = document.getElementById("bookmarks-view");
|
||||
bookmarksView.toggleColumnVisibility(resource);
|
||||
}
|
||||
|
||||
aEvent.preventBubble();
|
||||
}
|
||||
|
||||
2148
mozilla/xpfe/components/bookmarks/resources/bookmarks.xml
Normal file
252
mozilla/xpfe/components/bookmarks/resources/bookmarks.xul
Normal file
@@ -0,0 +1,252 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<!-- -*- Mode: HTML; indent-tabs-mode: nil; -*- -->
|
||||
<!--
|
||||
|
||||
The contents of this file are subject to the Netscape Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Ben Goodger <ben@netscape.com>
|
||||
Blake Ross <blakeross@telocity.com>
|
||||
Dean Tessman <dean_tessman@hotmail.com>
|
||||
|
||||
-->
|
||||
|
||||
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://communicator/skin/bookmarks/bookmarksWindow.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://communicator/content/bookmarks/bookmarks.css" type="text/css"?>
|
||||
<?xul-overlay href="chrome://global/content/globalOverlay.xul"?>
|
||||
<?xul-overlay href="chrome://communicator/content/bookmarks/bookmarksOverlay.xul"?>
|
||||
<?xul-overlay href="chrome://communicator/content/utilityOverlay.xul"?>
|
||||
<?xul-overlay href="chrome://communicator/content/tasksOverlay.xul"?>
|
||||
<?xul-overlay href="chrome://communicator/content/communicatorOverlay.xul"?>
|
||||
|
||||
<!DOCTYPE window [
|
||||
<!ENTITY % utilDTD SYSTEM "chrome://communicator/locale/utilityOverlay.dtd" >
|
||||
%utilDTD;
|
||||
<!ENTITY % bmDTD SYSTEM "chrome://communicator/locale/bookmarks/bookmarks.dtd">
|
||||
%bmDTD;
|
||||
]>
|
||||
|
||||
<window id="bookmark-window" windowtype="bookmarks:manager"
|
||||
title="&bookmarksWindowTitle.label;"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:web="http://home.netscape.com/WEB-rdf#"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
width="630" height="400" screenX="20" screenY="20"
|
||||
persist="width height screenX screenY sizemode"
|
||||
onload="Startup();" onunload="Shutdown();">
|
||||
|
||||
<!-- The order of loading of these script files is IMPORTANT -->
|
||||
|
||||
<!-- Shared Libraries -->
|
||||
<script type="application/x-javascript" src="chrome://global/content/strres.js"></script>
|
||||
|
||||
<!-- XXX - This should SO become an XBL widget -->
|
||||
<script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"></script>
|
||||
|
||||
<!-- Shared Bookmarks Utility Library -->
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarksOverlay.js"/>
|
||||
<!-- Tree-based Bookmarks UI Utility Library -->
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarksTree.js"/>
|
||||
<!-- Bookmarks Window -->
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarks.js"/>
|
||||
|
||||
<!-- Bookmarks Window Drag & Drop -->
|
||||
<script type="application/x-javascript" src="chrome://global/content/nsDragAndDrop.js"/>
|
||||
<script type="application/x-javascript" src="chrome://global/content/nsTransferable.js"/>
|
||||
<script type="application/x-javascript" src="chrome://communicator/content/bookmarks/bookmarksDD.js"/>
|
||||
|
||||
<popupset id="bookmarksPopupset"/>
|
||||
|
||||
<commands id="commands">
|
||||
<commandset id="CommandUpdate_Bookmarks"
|
||||
commandupdater="true"
|
||||
events="focus,tree-select"
|
||||
oncommandupdate="document.getElementById('bookmarks-view').onCommandUpdate();">
|
||||
</commandset>
|
||||
|
||||
<commandset id="tasksCommands"/>
|
||||
|
||||
<!-- File Menu -->
|
||||
<command id="cmd_close" oncommand="close()"/>
|
||||
<command id="cmd_quit"/>
|
||||
<!-- Edit Menu -->
|
||||
<command id="cmd_undo"/>
|
||||
</commands>
|
||||
|
||||
<stringbundleset id="stringbundleset"/>
|
||||
|
||||
<keyset id="tasksKeys">
|
||||
<!-- File Menu -->
|
||||
<key id="key_close"/>
|
||||
<key id="key_quit"/>
|
||||
<!-- Edit Menu -->
|
||||
<key id="key_undo"/>
|
||||
|
||||
<!-- These keybindings do not have a command specified in the overlay,
|
||||
which is good, but we need to specify it ourselves here -->
|
||||
<key id="key_cut" command="cmd_bm_cut"/>
|
||||
<key id="key_copy" command="cmd_bm_copy"/>
|
||||
<key id="key_paste" command="cmd_bm_paste"/>
|
||||
<key id="key_selectAll" command="cmd_bm_selectAll"/>
|
||||
|
||||
<!-- We need to provide our own delete key binding because the key_delete
|
||||
handler in platformGlobalOverlay.xul maps command to "cmd_delete" which
|
||||
is NOT what we want! -->
|
||||
<key id="key_bm_delete" keycode="VK_DELETE" command="cmd_bm_delete"/>
|
||||
|
||||
<key id="bm_key_find"
|
||||
key="&edit.find.keybinding;"
|
||||
command="cmd_bm_find" modifiers="accel"/>
|
||||
<key id="bm_key_properties"
|
||||
key="&edit.properties.keybinding;"
|
||||
command="cmd_bm_properties" modifiers="accel"/>
|
||||
</keyset>
|
||||
|
||||
<toolbox id="bookmarks-toolbox">
|
||||
<menubar id="main-menubar" grippytooltiptext="&menuBar.tooltip;">
|
||||
<menu id="menu_File">
|
||||
<menupopup id="menu_FilePopup">
|
||||
<menu id="menu_New">
|
||||
<menupopup>
|
||||
<menuitem label="&menuitem.newBookmark.label;"
|
||||
accesskey="&command.newBookmark.accesskey;"
|
||||
observes="cmd_bm_newbookmark"/>
|
||||
<menuitem label="&menuitem.newFolder.label;"
|
||||
accesskey="&command.newFolder.accesskey;"
|
||||
observes="cmd_bm_newfolder"/>
|
||||
<menuitem label="&menuitem.newSeparator.label;"
|
||||
accesskey="&command.newSeparator.accesskey;"
|
||||
observes="cmd_bm_newseparator"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
<menuitem id="menu_close"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
<menu id="menu_Edit">
|
||||
<menupopup>
|
||||
<menuitem id="menu_undo" disabled="true"/>
|
||||
<menuseparator/>
|
||||
<menuitem id="menu_bm_cut"
|
||||
label="&cutCmd.label;" accesskey="&cutCmd.accesskey;"
|
||||
key="key_cut" command="cmd_bm_cut"/>
|
||||
<menuitem id="menu_bm_copy"
|
||||
label="©Cmd.label;" accesskey="©Cmd.accesskey;"
|
||||
key="key_copy" command="cmd_bm_copy"/>
|
||||
<menuitem id="menu_bm_paste"
|
||||
label="&pasteCmd.label;" accesskey="&pasteCmd.accesskey;"
|
||||
key="key_paste" command="cmd_bm_paste"/>
|
||||
<menuitem id="menu_bm_delete"
|
||||
label="&deleteCmd.label;" accesskey="&deleteCmd.label;"
|
||||
key="key_bm_delete" command="cmd_bm_delete"/>
|
||||
<menuseparator/>
|
||||
<menuitem id="menu_bm_selectAll"
|
||||
label="&selectAllCmd.label;" accesskey="&selectAllCmd.accesskey;"
|
||||
key="key_selectAll" command="cmd_bm_selectAll"/>
|
||||
<menuseparator/>
|
||||
<menuitem label="&command.fileBookmark.label;"
|
||||
accesskey="&command.fileBookmark.accesskey;"
|
||||
command="cmd_bm_fileBookmark"/>
|
||||
<menuseparator/>
|
||||
<menuitem observes="cmd_bm_properties" key="bm_key_properties"
|
||||
label="&command.properties.label;"
|
||||
accesskey="&command.properties.accesskey;" />
|
||||
</menupopup>
|
||||
</menu>
|
||||
|
||||
<menu id="menu_View">
|
||||
<menupopup onpopupshowing="fillViewMenu(event)"
|
||||
oncommand="onViewMenuSortItemSelected(event);">
|
||||
<menuitem id="viewCommandToolbar" type="checkbox" class="menuitem-iconic"
|
||||
label="&menuitem.view.command.toolbar.label;"
|
||||
accesskey="&menuitem.view.command.toolbar.accesskey;"
|
||||
oncommand="goToggleToolbar('command-toolbar', 'viewCommandToolbar'); event.preventBubble();"
|
||||
persist="checked"/>
|
||||
<menuseparator id="fill-after-this-node"/>
|
||||
<menuitem id="natural" label="&menuitem.view.unsorted.label;"
|
||||
accesskey="&menuitem.view.unsorted.accesskey;"
|
||||
type="radio"
|
||||
resource="direction" name="sortSet"/>
|
||||
<menuseparator id="fill-before-this-node"/>
|
||||
<menuitem id="ascending" label="&menuitem.view.ascending.label;"
|
||||
accesskey="&menuitem.view.ascending.accesskey;"
|
||||
type="radio"
|
||||
resource="direction" name="sortDirectionSet"/>
|
||||
<menuitem id="descending" label="&menuitem.view.descending.label;"
|
||||
accesskey="&menuitem.view.descending.accesskey;"
|
||||
type="radio"
|
||||
resource="direction" name="sortDirectionSet"/>
|
||||
<menuseparator/>
|
||||
<menu id="descending" label="&menuitem.view.show_columns.label;"
|
||||
accesskey="&menuitem.view.show_columns.accesskey;">
|
||||
<menupopup id="columnsPopup" onpopupshowing="fillColumnsMenu(event);"
|
||||
oncommand="onViewMenuColumnItemSelected(event);"/>
|
||||
</menu>
|
||||
<menuseparator/>
|
||||
<menuitem label="&menuitem.newbookmarkfolder.label;"
|
||||
command="cmd_bm_setnewbookmarkfolder"
|
||||
accesskey="&menuitem.newbookmarkfolder.accesskey;"/>
|
||||
<menuitem label="&menuitem.newinternetsearchfolder.label;"
|
||||
command="cmd_bm_setnewsearchfolder"
|
||||
accesskey="&menuitem.newinternetsearchfolder.accesskey;"/>
|
||||
<menuitem label="&menuitem.personaltoolbarfolder.label;"
|
||||
command="cmd_bm_setpersonaltoolbarfolder"
|
||||
accesskey="&menuitem.personaltoolbarfolder.accesskey;"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
<menu id="tasksMenu">
|
||||
<menupopup id="taskPopup">
|
||||
<menuitem command="cmd_bm_find" key="bm_key_find"
|
||||
label="&menuitem.find.label;"
|
||||
accesskey="&menuitem.find.accesskey;"/>
|
||||
<menuitem label="&menuitem.import.label;"
|
||||
accesskey="&menuitem.import.accesskey;"
|
||||
observes="cmd_bm_import"/>
|
||||
<menuitem label="&menuitem.export.label;"
|
||||
accesskey="&menuitem.export.accesskey;"
|
||||
observes="cmd_bm_export"/>
|
||||
<menuseparator/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
<menu id="windowMenu"/>
|
||||
<menu id="menu_Help"/>
|
||||
</menubar>
|
||||
|
||||
<toolbar id="command-toolbar" tbalign="stretch" grippytooltiptext="&bookmarkToolbar.tooltip;">
|
||||
<toolbarbutton id="newfolder" label="&button.newFolder.label;"
|
||||
command="cmd_bm_newfolder"/>
|
||||
<toolbarbutton id="newseparator" label="&button.newSeparator.label;"
|
||||
command="cmd_bm_newseparator"/>
|
||||
<toolbarseparator/>
|
||||
<toolbarbutton id="fileBookmark" label="&command.fileBookmark.label;"
|
||||
command="cmd_bm_fileBookmark"/>
|
||||
<toolbarseparator/>
|
||||
<toolbarbutton id="properties" label="&command.properties.label;"
|
||||
command="cmd_bm_properties"/>
|
||||
<toolbarbutton id="rename" label="&command.rename.label;"
|
||||
command="cmd_bm_rename"/>
|
||||
<toolbarbutton id="delete" label="&command.delete.label;"
|
||||
command="cmd_bm_delete"/>
|
||||
</toolbar>
|
||||
</toolbox>
|
||||
|
||||
<bookmarks-tree id="bookmarks-view" flex="1"/>
|
||||
|
||||
</window>
|
||||
|
||||
508
mozilla/xpfe/components/bookmarks/resources/bookmarksDD-temp.js
Normal file
@@ -0,0 +1,508 @@
|
||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/*
|
||||
This is the old bookmarks code, included here for the sake of the bookmarks sidebar panel,
|
||||
which will be fixed to use my new code in .9. In the mean time, this file provides a
|
||||
life line to various functionality.
|
||||
*/
|
||||
|
||||
|
||||
var NC_NS = "http://home.netscape.com/NC-rdf#";
|
||||
var RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
|
||||
|
||||
|
||||
|
||||
function TopLevelDrag ( event )
|
||||
{
|
||||
return(true);
|
||||
}
|
||||
|
||||
|
||||
function BeginDragTree ( event )
|
||||
{
|
||||
//XXX we rely on a capturer to already have determined which item the mouse was over
|
||||
//XXX and have set an attribute.
|
||||
|
||||
// if the click is on the tree proper, ignore it. We only care about clicks on items.
|
||||
|
||||
var tree = document.getElementById("bookmarksTree");
|
||||
if ( event.target == tree || event.target.localName == "treechildren" )
|
||||
return(true); // continue propagating the event
|
||||
|
||||
var childWithDatabase = tree;
|
||||
if ( ! childWithDatabase )
|
||||
return(false);
|
||||
|
||||
var dragStarted = false;
|
||||
|
||||
var trans =
|
||||
Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
|
||||
if ( !trans ) return(false);
|
||||
|
||||
var genData =
|
||||
Components.classes["@mozilla.org/supports-wstring;1"].createInstance(Components.interfaces.nsISupportsWString);
|
||||
if (!genData) return(false);
|
||||
|
||||
var genDataURL =
|
||||
Components.classes["@mozilla.org/supports-wstring;1"].createInstance(Components.interfaces.nsISupportsWString);
|
||||
if (!genDataURL) return(false);
|
||||
|
||||
trans.addDataFlavor("text/unicode");
|
||||
trans.addDataFlavor("moz/rdfitem");
|
||||
|
||||
// ref/id (url) is on the <treeitem> which is two levels above the <treecell> which is
|
||||
// the target of the event.
|
||||
var id = event.target.parentNode.parentNode.getAttribute("ref");
|
||||
if (!id || id=="")
|
||||
{
|
||||
id = event.target.parentNode.parentNode.getAttribute("id");
|
||||
}
|
||||
|
||||
var parentID = event.target.parentNode.parentNode.parentNode.parentNode.getAttribute("ref");
|
||||
if (!parentID || parentID == "")
|
||||
{
|
||||
parentID = event.target.parentNode.parentNode.parentNode.parentNode.getAttribute("id");
|
||||
}
|
||||
|
||||
var trueID = id;
|
||||
if (parentID != null)
|
||||
{
|
||||
trueID += "\n" + parentID;
|
||||
}
|
||||
genData.data = trueID;
|
||||
genDataURL.data = id;
|
||||
|
||||
var database = childWithDatabase.database;
|
||||
var rdf =
|
||||
Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
|
||||
if ((!rdf) || (!database)) { dump("CAN'T GET DATABASE\n"); return(false); }
|
||||
|
||||
// make sure its a bookmark, bookmark separator, or bookmark folder
|
||||
var src = rdf.GetResource(id, true);
|
||||
var prop = rdf.GetResource(RDF_NS + "type", true);
|
||||
var target = database.GetTarget(src, prop, true);
|
||||
|
||||
if (target) target = target.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
if (target) target = target.Value;
|
||||
if ((!target) || (target == "")) {dump("BAD\n"); return(false);}
|
||||
|
||||
if ((target != NC_NS + "BookmarkSeparator") &&
|
||||
(target != NC_NS + "Bookmark") &&
|
||||
(target != NC_NS + "Folder")) return(false);
|
||||
|
||||
trans.setTransferData ( "moz/rdfitem", genData, genData.data.length * 2); // double byte data
|
||||
trans.setTransferData ( "text/unicode", genDataURL, genDataURL.data.length * 2); // double byte data
|
||||
|
||||
var transArray =
|
||||
Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray);
|
||||
if ( !transArray ) return(false);
|
||||
|
||||
// put it into the transferable as an |nsISupports|
|
||||
var genTrans = trans.QueryInterface(Components.interfaces.nsISupports);
|
||||
transArray.AppendElement(genTrans);
|
||||
|
||||
var dragService =
|
||||
Components.classes["@mozilla.org/widget/dragservice;1"].getService(Components.interfaces.nsIDragService);
|
||||
if ( !dragService ) return(false);
|
||||
|
||||
var nsIDragService = Components.interfaces.nsIDragService;
|
||||
dragService.invokeDragSession ( event.target, transArray, null, nsIDragService.DRAGDROP_ACTION_COPY +
|
||||
nsIDragService.DRAGDROP_ACTION_MOVE );
|
||||
dragStarted = true;
|
||||
|
||||
return(!dragStarted);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function DragOverTree ( event )
|
||||
{
|
||||
var validFlavor = false;
|
||||
var dragSession = null;
|
||||
var retVal = true;
|
||||
|
||||
var dragService =
|
||||
Components.classes["@mozilla.org/widget/dragservice;1"].getService(Components.interfaces.nsIDragService);
|
||||
if ( !dragService ) return(false);
|
||||
|
||||
dragSession = dragService.getCurrentSession();
|
||||
if ( !dragSession ) return(false);
|
||||
|
||||
if ( dragSession.isDataFlavorSupported("moz/rdfitem") ) validFlavor = true;
|
||||
else if ( dragSession.isDataFlavorSupported("text/unicode") ) validFlavor = true;
|
||||
//XXX other flavors here...
|
||||
|
||||
// touch the attribute on the rowgroup to trigger the repaint with the drop feedback.
|
||||
if ( validFlavor )
|
||||
{
|
||||
var treeRoot = document.getElementById("bookmarksTree");
|
||||
if (!treeRoot) return(false);
|
||||
var treeDatabase = treeRoot.database;
|
||||
if (!treeDatabase) return(false);
|
||||
|
||||
//XXX this is really slow and likes to refresh N times per second.
|
||||
var rowGroup = event.target.parentNode.parentNode;
|
||||
var sortActive = treeRoot.getAttribute("sortActive");
|
||||
if (sortActive == "true")
|
||||
rowGroup.setAttribute ( "dd-triggerrepaintsorted", 0 );
|
||||
else
|
||||
rowGroup.setAttribute ( "dd-triggerrepaint", 0 );
|
||||
|
||||
dragSession.canDrop = true;
|
||||
// necessary??
|
||||
retVal = false;
|
||||
}
|
||||
return(retVal);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function DropOnTree ( event )
|
||||
{
|
||||
var treeRoot = document.getElementById("bookmarksTree");
|
||||
if (!treeRoot) return(false);
|
||||
var treeDatabase = treeRoot.database;
|
||||
if (!treeDatabase) return(false);
|
||||
|
||||
// for beta1, don't allow D&D if sorting is active
|
||||
var sortActive = treeRoot.getAttribute("sortActive");
|
||||
if (sortActive == "true")
|
||||
{
|
||||
dump("Sorry, drag&drop is currently disabled when sorting is active.\n");
|
||||
return(false);
|
||||
}
|
||||
|
||||
var RDF =
|
||||
Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
|
||||
if (!RDF) return(false);
|
||||
var RDFC =
|
||||
Components.classes["@mozilla.org/rdf/container;1"].getService(Components.interfaces.nsIRDFContainer);
|
||||
if (!RDFC) return(false);
|
||||
|
||||
var Bookmarks = RDF.GetDataSource("rdf:bookmarks");
|
||||
if (!Bookmarks) return(false);
|
||||
|
||||
// target is the <treecell>, and "ref/id" is on the <treeitem> two levels above
|
||||
var treeItem = event.target.parentNode.parentNode;
|
||||
if (!treeItem) return(false);
|
||||
|
||||
// get drop hint attributes
|
||||
var dropBefore = treeItem.getAttribute("dd-droplocation");
|
||||
var dropOn = treeItem.getAttribute("dd-dropon");
|
||||
|
||||
// calculate drop action
|
||||
var dropAction;
|
||||
if (dropBefore == "true") dropAction = "before";
|
||||
else if (dropOn == "true") dropAction = "on";
|
||||
else dropAction = "after";
|
||||
|
||||
// calculate parent container node
|
||||
var containerItem = treeItem;
|
||||
if (dropAction != "on")
|
||||
{
|
||||
containerItem = treeItem.parentNode.parentNode;
|
||||
}
|
||||
|
||||
// magical fix for bug # 33546: handle dropping after open container
|
||||
if (treeItem.getAttribute("container") == "true")
|
||||
{
|
||||
if (treeItem.getAttribute("open") == "true")
|
||||
{
|
||||
if (dropAction == "after")
|
||||
{
|
||||
dropAction = "before";
|
||||
containerItem = treeItem;
|
||||
|
||||
// find <treechildren>, drop before first child
|
||||
var treeChildren = treeItem;
|
||||
treeItem = null;
|
||||
for (var x = 0; x < treeChildren.childNodes.length; x++)
|
||||
{
|
||||
if (treeChildren.childNodes[x].tagName == "treechildren")
|
||||
{
|
||||
treeItem = treeChildren.childNodes[x].childNodes[0];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!treeItem)
|
||||
{
|
||||
dropAction = "on";
|
||||
containerItem = treeItem.parentNode.parentNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var targetID = getAbsoluteID("bookmarksTree", treeItem);
|
||||
if (!targetID) return(false);
|
||||
var targetNode = RDF.GetResource(targetID, true);
|
||||
if (!targetNode) return(false);
|
||||
|
||||
var containerID = getAbsoluteID("bookmarksTree", containerItem);
|
||||
if (!containerID) return(false);
|
||||
var containerNode = RDF.GetResource(containerID);
|
||||
if (!containerNode) return(false);
|
||||
|
||||
var dragService =
|
||||
Components.classes["@mozilla.org/widget/dragservice;1"].getService(Components.interfaces.nsIDragService);
|
||||
if ( !dragService ) return(false);
|
||||
|
||||
var dragSession = dragService.getCurrentSession();
|
||||
if ( !dragSession ) return(false);
|
||||
|
||||
var trans =
|
||||
Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
|
||||
if ( !trans ) return(false);
|
||||
trans.addDataFlavor("moz/rdfitem");
|
||||
trans.addDataFlavor("text/x-moz-url");
|
||||
trans.addDataFlavor("text/unicode");
|
||||
|
||||
var typeRes = RDF.GetResource(RDF_NS + "type");
|
||||
if (!typeRes) return false;
|
||||
var bmTypeRes = RDF.GetResource(NC_NS + "Bookmark");
|
||||
if (!bmTypeRes) return false;
|
||||
|
||||
var dirty = false;
|
||||
|
||||
for ( var i = 0; i < dragSession.numDropItems; ++i )
|
||||
{
|
||||
dragSession.getData ( trans, i );
|
||||
var dataObj = new Object();
|
||||
var bestFlavor = new Object();
|
||||
var len = new Object();
|
||||
trans.getAnyTransferData ( bestFlavor, dataObj, len );
|
||||
if ( dataObj ) dataObj = dataObj.value.QueryInterface(Components.interfaces.nsISupportsWString);
|
||||
if ( !dataObj ) continue;
|
||||
|
||||
var sourceID = null;
|
||||
var parentID = null;
|
||||
var checkNameHack = false;
|
||||
var name=null;
|
||||
|
||||
if (bestFlavor.value == "moz/rdfitem")
|
||||
{
|
||||
// pull the URL out of the data object
|
||||
var data = dataObj.data.substring(0, len.value / 2);
|
||||
|
||||
// moz/rdfitem allows parent ID specified on next line; check for it
|
||||
var cr = data.indexOf("\n");
|
||||
if (cr >= 0)
|
||||
{
|
||||
sourceID = data.substr(0, cr);
|
||||
parentID = data.substr(cr+1);
|
||||
}
|
||||
else
|
||||
{
|
||||
sourceID = data;
|
||||
}
|
||||
}
|
||||
else if (bestFlavor.value == "text/x-moz-url")
|
||||
{
|
||||
// pull the URL out of the data object
|
||||
data = dataObj.data.substring(0, len.value / 2);
|
||||
sourceID = data;
|
||||
|
||||
// we may need to synthesize a name (just use the URL)
|
||||
checkNameHack = true;
|
||||
}
|
||||
else if (bestFlavor.value == "text/unicode")
|
||||
{
|
||||
sourceID = dataObj.data;
|
||||
|
||||
// we may need to synthesize a name (just use the URL)
|
||||
checkNameHack = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// unknown flavor, skip
|
||||
continue;
|
||||
}
|
||||
|
||||
// pull the (optional) name out of the URL
|
||||
var separator = sourceID.indexOf("\n");
|
||||
if (separator >= 0)
|
||||
{
|
||||
name = sourceID.substr(separator+1);
|
||||
sourceID = sourceID.substr(0, separator);
|
||||
}
|
||||
|
||||
var sourceNode = RDF.GetResource(sourceID, true);
|
||||
if (!sourceNode) continue;
|
||||
|
||||
var parentNode = null;
|
||||
if (parentID != null)
|
||||
{
|
||||
parentNode = RDF.GetResource(parentID, true);
|
||||
}
|
||||
|
||||
// Prevent dropping of a node before, after, or on itself
|
||||
if (sourceNode == targetNode) continue;
|
||||
// Prevent dropping of a node onto its parent container
|
||||
if ((dropAction == "on") && (containerID) && (containerID == parentID)) continue;
|
||||
|
||||
RDFC.Init(Bookmarks, containerNode);
|
||||
|
||||
// make sure appropriate bookmark type is set
|
||||
var bmTypeNode = Bookmarks.GetTarget( sourceNode, typeRes, true );
|
||||
if (!bmTypeNode)
|
||||
{
|
||||
// set default bookmark type
|
||||
Bookmarks.Assert(sourceNode, typeRes, bmTypeRes, true);
|
||||
}
|
||||
|
||||
if ((dropAction == "before") || (dropAction == "after"))
|
||||
{
|
||||
// drop before or after
|
||||
var nodeIndex;
|
||||
|
||||
nodeIndex = RDFC.IndexOf(sourceNode);
|
||||
|
||||
if (nodeIndex >= 1)
|
||||
{
|
||||
// moving a node around inside of the container
|
||||
// so remove, then re-add the node
|
||||
RDFC.RemoveElementAt(nodeIndex, true, sourceNode);
|
||||
}
|
||||
|
||||
nodeIndex = RDFC.IndexOf(targetNode);
|
||||
|
||||
if (nodeIndex < 1) return(false);
|
||||
if (dropAction == "after") ++nodeIndex;
|
||||
|
||||
RDFC.InsertElementAt(sourceNode, nodeIndex, true);
|
||||
|
||||
// select the newly added node
|
||||
if (parentID)
|
||||
{
|
||||
selectDroppedItems(treeRoot, containerID, sourceID);
|
||||
}
|
||||
|
||||
dirty = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// drop on
|
||||
RDFC.AppendElement(sourceNode);
|
||||
|
||||
// select the newly added node
|
||||
if (parentID)
|
||||
{
|
||||
selectDroppedItems(treeRoot, containerID, sourceID);
|
||||
}
|
||||
|
||||
dirty = true;
|
||||
}
|
||||
|
||||
if ((checkNameHack == true) || (name != null))
|
||||
{
|
||||
var srcArc = RDF.GetResource(sourceID, true);
|
||||
var propArc = RDF.GetResource(NC_NS + "Name", true);
|
||||
if (srcArc && propArc && Bookmarks)
|
||||
{
|
||||
var targetArc = Bookmarks.GetTarget(srcArc, propArc, true);
|
||||
if (!targetArc)
|
||||
{
|
||||
// if no name, fallback to using the URL as the name
|
||||
var defaultNameArc = RDF.GetLiteral((name != null && name != "") ? name : sourceID);
|
||||
if (defaultNameArc)
|
||||
{
|
||||
Bookmarks.Assert(srcArc, propArc, defaultNameArc, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// should we move the node? (i.e. take it out of the source container?)
|
||||
if ((parentNode != null) && (containerNode != parentNode))
|
||||
{
|
||||
try
|
||||
{
|
||||
RDFC.Init(Bookmarks, parentNode);
|
||||
nodeIndex = RDFC.IndexOf(sourceNode);
|
||||
|
||||
if (nodeIndex >= 1)
|
||||
{
|
||||
RDFC.RemoveElementAt(nodeIndex, true, sourceNode);
|
||||
}
|
||||
}
|
||||
catch(ex)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
if (dirty == true)
|
||||
{
|
||||
var remote = Bookmarks.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
||||
if (remote)
|
||||
{
|
||||
remote.Flush();
|
||||
}
|
||||
}
|
||||
|
||||
return(false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function selectDroppedItems(treeRoot, containerID, targetID)
|
||||
{
|
||||
var select_list = treeRoot.getElementsByAttribute("id", targetID);
|
||||
for (var x=0; x<select_list.length; x++)
|
||||
{
|
||||
var node = select_list[x];
|
||||
if (!node) continue;
|
||||
|
||||
var parent = node.parentNode.parentNode;
|
||||
if (!parent) continue;
|
||||
|
||||
var id = parent.getAttribute("ref");
|
||||
if (!id || id=="")
|
||||
{
|
||||
id = parent.getAttribute("id");
|
||||
}
|
||||
if (!id || id=="") continue;
|
||||
|
||||
if (id == containerID)
|
||||
{
|
||||
treeRoot.selectItem(node);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
397
mozilla/xpfe/components/bookmarks/resources/bookmarksDD.js
Normal file
@@ -0,0 +1,397 @@
|
||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben Goodger <ben@netscape.com> (Original Author, v2.0)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
var NC_NS = "http://home.netscape.com/NC-rdf#";
|
||||
var RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
|
||||
|
||||
var gSpringLoadTracker = {
|
||||
timeout: 0,
|
||||
element: null,
|
||||
|
||||
open: function (aRDFNode)
|
||||
{
|
||||
if (this.element)
|
||||
this.element.setAttribute("open", "true");
|
||||
clearTimeout(this.timeout);
|
||||
}
|
||||
};
|
||||
|
||||
var bookmarksDNDObserver = {
|
||||
_RDF: null,
|
||||
get RDF ()
|
||||
{
|
||||
if (!this._RDF) {
|
||||
const kRDFContractID = "@mozilla.org/rdf/rdf-service;1";
|
||||
const kRDFIID = Components.interfaces.nsIRDFService;
|
||||
this._RDF = Components.classes[kRDFContractID].getService(kRDFIID);
|
||||
}
|
||||
return this._RDF;
|
||||
},
|
||||
|
||||
// XXX I belong somewhere shared.
|
||||
getResource: function(aString)
|
||||
{
|
||||
return this.RDF.GetResource(aString, true);
|
||||
},
|
||||
|
||||
getTarget: function(aDS, aSourceID, aPropertyID)
|
||||
{
|
||||
var source = this.getResource(aSourceID);
|
||||
var property = this.getResource(aPropertyID);
|
||||
return aDS.GetTarget(source, property, true);
|
||||
},
|
||||
|
||||
onDragStart: function (aEvent, aXferData, aDragAction)
|
||||
{
|
||||
var bookmarksTree = document.getElementById("bookmarksTree");
|
||||
if (aEvent.target == bookmarksTree || aEvent.target.localName == "treechildren" ||
|
||||
aEvent.target.localName == "splitter" || aEvent.target.localName == "menu")
|
||||
throw Components.results.NS_OK; // not a draggable item.
|
||||
if (aEvent.target.parentNode && aEvent.target.parentNode.parentNode &&
|
||||
aEvent.target.parentNode.parentNode.localName == "treehead")
|
||||
throw Components.results.NS_OK; // don't drag treehead cells.
|
||||
if (bookmarksTree.getAttribute("sortActive") == "true")
|
||||
throw Components.results.NS_OK;
|
||||
|
||||
var selItems = null;
|
||||
if (bookmarksTree.selectedItems.length <= 0)
|
||||
selItems = [aEvent.target.parentNode.parentNode];
|
||||
else
|
||||
selItems = bookmarksTree.selectedItems;
|
||||
aXferData.data = new TransferDataSet();
|
||||
for (var i = 0; i < selItems.length; ++i) {
|
||||
var currItem = selItems[i];
|
||||
var currURI = NODE_ID(currItem);
|
||||
|
||||
var parentItem = currItem.parentNode.parentNode;
|
||||
var parentURI = NODE_ID(parentItem);
|
||||
|
||||
var type = this.getTarget(bookmarksTree.database, currURI, RDF_NS + "type");
|
||||
type = type.QueryInterface(Components.interfaces.nsIRDFResource).Value;
|
||||
if (!type || (type != (NC_NS + "BookmarkSeparator") &&
|
||||
type != (NC_NS + "Bookmark") &&
|
||||
type != (NC_NS + "Folder")))
|
||||
throw Components.results.NS_OK;
|
||||
var name = this.getTarget(bookmarksTree.database, currURI, NC_NS + "Name");
|
||||
var data = new TransferData();
|
||||
if (name) {
|
||||
name = name.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
|
||||
data.addDataForFlavour("text/x-moz-url", currURI + "\n" + name);
|
||||
}
|
||||
else {
|
||||
data.addDataForFlavour("text/x-moz-url", currURI);
|
||||
}
|
||||
data.addDataForFlavour("moz/rdfitem", currURI + "\n" + parentURI);
|
||||
|
||||
data.addDataForFlavour("text/unicode", currURI);
|
||||
aXferData.data.push(data);
|
||||
}
|
||||
|
||||
if (aEvent.ctrlKey) {
|
||||
const kDSIID = Components.interfaces.nsIDragService;
|
||||
aDragAction.action = kDSIID.DRAGDROP_ACTION_COPY + kDSIID.DRAGDROP_ACTION_LINK;
|
||||
}
|
||||
},
|
||||
|
||||
onDragOver: function (aEvent, aFlavour, aDragSession)
|
||||
{
|
||||
var bookmarksTree = document.getElementById("bookmarksTree");
|
||||
var rowGroup = aEvent.target.parentNode.parentNode;
|
||||
if (rowGroup)
|
||||
rowGroup.setAttribute("dd-triggerrepaint" +
|
||||
(bookmarksTree.getAttribute("sortActive") == "true" ? "sorted" : ""), 0);
|
||||
|
||||
var rdfNode = gBookmarksShell.findRDFNode(aEvent.target, true);
|
||||
var rdfParent = rdfNode.parentNode.parentNode;
|
||||
var isContainer = false;
|
||||
if (rdfParent && rdfParent.getAttribute("container") == "true") {
|
||||
var rDragOverContainer = this.RDF.GetResource(NODE_ID(rdfParent));
|
||||
|
||||
const kBMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
const kRDFCUtilsContractID = "@mozilla.org/rdf/container-utils;1";
|
||||
const kRDFCUtilsIID = Components.interfaces.nsIRDFContainerUtils;
|
||||
const kRDFCUtils = Components.classes[kRDFCUtilsContractID].getService(kRDFCUtilsIID);
|
||||
isContainer = kRDFCUtils.IsContainer(kBMDS, rDragOverContainer);
|
||||
}
|
||||
|
||||
if (!isContainer || rowGroup.id == "headRow") {
|
||||
// Not a container, or dropping onto something that isn't designed to take drops
|
||||
// (e.g. the tree header)
|
||||
aDragSession.canDrop = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Springloaded folders.
|
||||
/* XXX - not yet.
|
||||
if (rdfNode && rdfNode.getAttribute("container") == "true" &&
|
||||
rdfNode.getAttribute("open") != "true") {
|
||||
if (!gSpringLoadTracker.element || gSpringLoadTracker.element.id != rdfNode.id) {
|
||||
// XXX - this is not good enough. We need to keep track of nesting and close up
|
||||
// folders after the user has dragged out of them otherwise we end up with
|
||||
// everything open and a big mess!
|
||||
if (gSpringLoadTracker.timeout)
|
||||
clearTimeout(gSpringLoadTracker.timeout);
|
||||
gSpringLoadTracker.element = rdfNode;
|
||||
gSpringLoadTracker.timeout = setTimeout("gSpringLoadTracker.open()", 100);
|
||||
}
|
||||
}
|
||||
*/
|
||||
},
|
||||
|
||||
_flavourSet: null,
|
||||
getSupportedFlavours: function ()
|
||||
{
|
||||
if (!this._flavourSet) {
|
||||
this._flavourSet = new FlavourSet();
|
||||
this._flavourSet.appendFlavour("moz/rdfitem");
|
||||
this._flavourSet.appendFlavour("text/x-moz-url");
|
||||
this._flavourSet.appendFlavour("text/unicode");
|
||||
}
|
||||
return this._flavourSet;
|
||||
},
|
||||
|
||||
canHandleMultipleItems: true,
|
||||
|
||||
onDrop: function (aEvent, aXferData, aDragSession)
|
||||
{
|
||||
var bookmarksTree = document.getElementById("bookmarksTree");
|
||||
// XXX lame
|
||||
if (bookmarksTree.getAttribute("sortActive") == "true") return;
|
||||
|
||||
const kRDFCContractID = "@mozilla.org/rdf/container;1";
|
||||
const kRDFIID = Components.interfaces.nsIRDFContainer;
|
||||
var RDFC = Components.classes[kRDFCContractID].getService(kRDFIID);
|
||||
|
||||
const kBMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
|
||||
var dropItem = aEvent.target.parentNode.parentNode;
|
||||
if (aEvent.target.localName == "treechildren")
|
||||
dropItem = aEvent.target.parentNode; // handle drop on blank space.
|
||||
|
||||
// In the default view, the root node is the NC root, and we don't want to append
|
||||
// to that. Adjust accordingly...
|
||||
if (NODE_ID(dropItem) == "NC:NavCenter")
|
||||
dropItem = document.getElementById("treechildren-bookmarks").firstChild;
|
||||
|
||||
// Don't allow drops on the header row & prevent catastrophe
|
||||
if (dropItem.id == "headRow" || !dropItem) return;
|
||||
|
||||
// XXX we could probably compute this ourselves, but let the tree do this
|
||||
// automagically for now.
|
||||
var dropBefore = dropItem.getAttribute("dd-droplocation");
|
||||
var dropOn = dropItem.getAttribute("dd-dropon");
|
||||
|
||||
var dropAction = dropBefore == "true" ? "before" : dropOn == "true" ? "on" : "after";
|
||||
if (aEvent.target.localName == "treechildren")
|
||||
dropAction = "on"; // handle drop on blank space.
|
||||
var containerItem = dropAction == "on" ? dropItem : dropItem.parentNode.parentNode;
|
||||
|
||||
// XXX magical fix for bug # 33546: handle dropping after open container
|
||||
if (dropItem.getAttribute("container") && dropItem.getAttribute("open") &&
|
||||
dropAction == "after") {
|
||||
dropAction = "before";
|
||||
containerItem = dropItem;
|
||||
|
||||
dropItem = null;
|
||||
for (var i = 0; i < containerItem.childNodes.length; ++i) {
|
||||
if (containerItem.childNodes[i].localName == "treechildren") {
|
||||
dropItem = containerItem.childNodes[i].firstChild;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!dropItem) {
|
||||
dropAction = "on";
|
||||
dropItem = containerItem.parentNode.parentNode;
|
||||
}
|
||||
}
|
||||
|
||||
var rTarget = this.getResource(NODE_ID(dropItem));
|
||||
var rContainer = this.getResource(NODE_ID(containerItem));
|
||||
|
||||
const kRDFCUtilsContractID = "@mozilla.org/rdf/container-utils;1";
|
||||
const kRDFCUtilsIID = Components.interfaces.nsIRDFContainerUtils;
|
||||
const kRDFCUtils = Components.classes[kRDFCUtilsContractID].getService(kRDFCUtilsIID);
|
||||
var isContainer = kRDFCUtils.IsContainer(kBMDS, rContainer);
|
||||
|
||||
// XXX
|
||||
var rType = this.getResource(RDF_NS + "type");
|
||||
var rBookmark = this.getResource(NC_NS + "Bookmark");
|
||||
|
||||
var dirty = false;
|
||||
var additiveFlag = false;
|
||||
var numObjects = aXferData.dataList.length;
|
||||
/*
|
||||
if (numObjects > 1) {
|
||||
var bo = bookmarksTree.boxObject.QueryInterface(Components.interfaces.nsITreeBoxObject);
|
||||
bo.beginBatch();
|
||||
}
|
||||
*/
|
||||
|
||||
var sourceID = [], parentID = [], nameRequired = [], name = [];
|
||||
var flavourData;
|
||||
for (i = 0; i < numObjects; ++i) {
|
||||
flavourData = aXferData.dataList[i].first;
|
||||
nameRequired[i] = false;
|
||||
name[i] = null;
|
||||
var data = flavourData.data;
|
||||
switch (flavourData.flavour.contentType) {
|
||||
case "moz/rdfitem":
|
||||
var ix = data.indexOf("\n");
|
||||
sourceID[i] = ix >= 0 ? (parentID[i] = data.substr(ix+1), data.substr(0, ix)) : data;
|
||||
break;
|
||||
case "text/x-moz-url":
|
||||
ix = data.indexOf("\n");
|
||||
sourceID[i] = ix >= 0 ? (name[i] = data.substr(ix+1), data.substr(0, ix)) : data;
|
||||
break;
|
||||
case "text/unicode":
|
||||
sourceID[i] = data;
|
||||
nameRequired[i] = true;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
|
||||
var rSource = this.getResource(sourceID[i]);
|
||||
var rParent = parentID[i] ? this.getResource(parentID[i]) : null;
|
||||
|
||||
// Prevent dropping node on itself, before or after itself, on its parent
|
||||
// container, or a weird situation when an open container is dropped into
|
||||
// itself (which results in data loss!).
|
||||
// Also prevent dropping into a folder that isn't actually a container
|
||||
// (and is thus probably a pseudo-container from an aggregated datasource,
|
||||
// see bug 68656 fir details).
|
||||
if (rSource == rTarget || (dropAction == "on" && rContainer == rParent) ||
|
||||
rContainer == rSource || !isContainer)
|
||||
return;
|
||||
|
||||
// Prevent dropping node into one of its own subfolders
|
||||
var dropItem2 = dropItem;
|
||||
do {
|
||||
var targetAncestor = NODE_ID(dropItem2);
|
||||
dropItem2 = dropItem2.parentNode;
|
||||
} while (targetAncestor != "NC:BookmarksRoot" && targetAncestor != sourceID[i]);
|
||||
if (targetAncestor == sourceID[i]) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < numObjects; ++i) {
|
||||
flavourData = aXferData.dataList[i].first;
|
||||
rSource = this.getResource(sourceID[i]);
|
||||
rParent = parentID[i] ? this.getResource(parentID[i]) : null;
|
||||
|
||||
// XXX if any of the following fails, the nodes are gone for good!
|
||||
const kDSIID = Components.interfaces.nsIDragService;
|
||||
const kCopyAction = kDSIID.DRAGDROP_ACTION_COPY + kDSIID.DRAGDROP_ACTION_LINK;
|
||||
if (rParent) {
|
||||
if (!(aDragSession.dragAction & kCopyAction)) {
|
||||
try {
|
||||
RDFC.Init(kBMDS, rParent);
|
||||
ix = RDFC.IndexOf(rSource);
|
||||
if (ix >= 1)
|
||||
RDFC.RemoveElementAt(ix, true);
|
||||
}
|
||||
catch (ex) { }
|
||||
}
|
||||
}
|
||||
|
||||
RDFC.Init(kBMDS, rContainer);
|
||||
|
||||
// If this item already exists in this container, don't paste, as
|
||||
// this will result in the creation of multiple copies in the datasource
|
||||
// but will not result in an update of the UI. (In Short: we don't
|
||||
// handle multiple bookmarks well)
|
||||
ix = RDFC.IndexOf(rSource);
|
||||
if (ix != -1)
|
||||
continue;
|
||||
|
||||
var bmType = this.getTarget(bookmarksTree.database, sourceID[i], RDF_NS + "type");
|
||||
if (!bmType)
|
||||
kBMDS.Assert(rSource, rType, rBookmark, true);
|
||||
if (bmType == NC_NS + "Folder") {
|
||||
// If we're going to copy a folder type, we need to clone the folder
|
||||
// rather than just asserting the new node as a child of the drop folder.
|
||||
if (aDragSession.dragAction & kCopyAction)
|
||||
rSource = BookmarksUtils.cloneFolder(rSource, rContainer, rTarget);
|
||||
}
|
||||
|
||||
if (dropAction == "before" || dropAction == "after") {
|
||||
var dropIx = RDFC.IndexOf(rTarget);
|
||||
RDFC.InsertElementAt(rSource, dropAction == "after" ? ++dropIx : dropIx, true);
|
||||
}
|
||||
else
|
||||
RDFC.AppendElement(rSource); // drop on
|
||||
|
||||
dirty = true;
|
||||
|
||||
if (rParent) {
|
||||
gBookmarksShell.selectFolderItem(rContainer.Value, sourceID[i], additiveFlag);
|
||||
if (!additiveFlag) additiveFlag = true;
|
||||
}
|
||||
|
||||
// If a name is supplied, we want to assert this information into the
|
||||
// graph. E.g. user drags an internet shortcut to the app, we want to
|
||||
// preserve not only the URL but the name of the shortcut. The other case
|
||||
// where we need to assert a name is when the node does not already exist
|
||||
// in the graph, in this case we'll just use the URL as the name.
|
||||
if (name[i] || nameRequired[i]) {
|
||||
var currentName = this.getTarget(bookmarksTree.database, sourceID[i], NC_NS + "Name");
|
||||
if (!currentName) {
|
||||
var rDefaultName = this.RDF.GetLiteral(name[i] || sourceID[i]);
|
||||
if (rDefaultName) {
|
||||
var rName = this.RDF.GetResource(NC_NS + "Name");
|
||||
kBMDS.Assert(rSource, rName, rDefaultName, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if (numObjects > 1) {
|
||||
var bo = bookmarksTree.boxObject.QueryInterface(Components.interfaces.nsITreeBoxObject);
|
||||
bo.endBatch();
|
||||
}
|
||||
*/
|
||||
|
||||
if (dirty) {
|
||||
var remoteDS = kBMDS.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
||||
remoteDS.Flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
954
mozilla/xpfe/components/bookmarks/resources/bookmarksOverlay.js
Normal file
@@ -0,0 +1,954 @@
|
||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben Goodger <ben@netscape.com> (Original Author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
var NC_NS = "http://home.netscape.com/NC-rdf#";
|
||||
var RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
|
||||
const NC_NS_CMD = NC_NS + "command?cmd=";
|
||||
|
||||
/**
|
||||
* XXX - 04/16/01
|
||||
* ACK! massive command name collision problems are causing big issues
|
||||
* in getting this stuff to work in the Navigator window. For sanity's
|
||||
* sake, we need to rename all the commands to be of the form cmd_bm_*
|
||||
* otherwise there'll continue to be problems. For now, we're just
|
||||
* renaming those that affect the personal toolbar (edit operations,
|
||||
* which were clashing with the textfield controller)
|
||||
*
|
||||
* There are also several places that need to be updated if you need
|
||||
* to change a command name.
|
||||
* 1) the controller in ALL clients (bookmarksTree.js, personalToolbar.js)
|
||||
* 2) the command nodes in the overlay
|
||||
* 3) the command human-readable name key in bookmark.properties
|
||||
* 4) the function 'getAllCmds' in bookmarksOverlay.js
|
||||
* 5) the function 'execCommand' in bookmarksOverlay.js
|
||||
* Yes, this blows crusty dead goats through straws, and I should probably
|
||||
* create some constants somewhere to bring this number down to 3.
|
||||
* However, if you fail to do one of these, you WILL break something
|
||||
* and I WILL come after you with a knife.
|
||||
*/
|
||||
|
||||
function LITERAL (aDB, aElement, aPropertyID)
|
||||
{
|
||||
var RDF = BookmarksUIElement.prototype.RDF;
|
||||
var rSource = RDF.GetResource(aElement.id);
|
||||
var rProperty = RDF.GetResource(aPropertyID);
|
||||
var node = aDB.GetTarget(rSource, rProperty, true);
|
||||
return node ? node.QueryInterface(Components.interfaces.nsIRDFLiteral).Value : "";
|
||||
}
|
||||
|
||||
function BookmarksUIElement () { }
|
||||
BookmarksUIElement.prototype = {
|
||||
_rdf: null,
|
||||
get RDF ()
|
||||
{
|
||||
if (!this._rdf) {
|
||||
const kRDFContractID = "@mozilla.org/rdf/rdf-service;1";
|
||||
const kRDFIID = Components.interfaces.nsIRDFService;
|
||||
this._rdf = Components.classes[kRDFContractID].getService(kRDFIID);
|
||||
}
|
||||
return this._rdf;
|
||||
},
|
||||
|
||||
propertySet: function (sourceID, propertyID, newValue)
|
||||
{
|
||||
if (!newValue) return;
|
||||
const kRDFContractID = "@mozilla.org/rdf/rdf-service;1";
|
||||
const kRDFIID = Components.interfaces.nsIRDFService;
|
||||
const kRDF = Components.classes[kRDFContractID].getService(kRDFIID);
|
||||
// need to shuffle this into an API.
|
||||
const kBMDS = kRDF.GetDataSource("rdf:bookmarks");
|
||||
const krProperty = kRDF.GetResource(propertyID);
|
||||
const krItem = kRDF.GetResource(sourceID);
|
||||
var rCurrValue = kBMDS.GetTarget(krItem, krProperty, true);
|
||||
const krNewValue = kRDF.GetLiteral(newValue);
|
||||
if (!rCurrValue)
|
||||
kBMDS.Assert(krItem, krProperty, krNewValue, true);
|
||||
else {
|
||||
rCurrValue = rCurrValue.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
if (rCurrValue.Value != newValue)
|
||||
kBMDS.Change(krItem, krProperty, rCurrValue, krNewValue);
|
||||
}
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Fill a context menu popup with menuitems that are appropriate for the current
|
||||
// selection.
|
||||
createContextMenu: function (aEvent)
|
||||
{
|
||||
var popup = aEvent.target;
|
||||
// clear out the old context menu contents (if any)
|
||||
while (popup.hasChildNodes())
|
||||
popup.removeChild(popup.firstChild);
|
||||
|
||||
var popupNode = document.popupNode;
|
||||
|
||||
if (!("findRDFNode" in this))
|
||||
throw "Clients must implement findRDFNode!";
|
||||
var itemNode = this.findRDFNode(popupNode, true);
|
||||
if (!itemNode || !itemNode.getAttributeNS(RDF_NS, "type") || itemNode.getAttribute("mode") == "edit") {
|
||||
aEvent.preventDefault();
|
||||
return;
|
||||
}
|
||||
if (!("getContextSelection" in this))
|
||||
throw "Clients must implement getContextSelection!";
|
||||
var selection = this.getContextSelection (itemNode);
|
||||
var commonCommands = [];
|
||||
for (var i = 0; i < selection.length; ++i) {
|
||||
var commands = this.getAllCmds(selection[i].id);
|
||||
if (!commands) {
|
||||
aEvent.preventDefault();
|
||||
return;
|
||||
}
|
||||
commands = this.flattenEnumerator(commands);
|
||||
if (!commonCommands.length) commonCommands = commands;
|
||||
commonCommands = this.findCommonNodes(commands, commonCommands);
|
||||
}
|
||||
|
||||
if (!commonCommands.length) {
|
||||
aEvent.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
// Now that we should have generated a list of commands that is valid
|
||||
// for the entire selection, build a context menu.
|
||||
for (i = 0; i < commonCommands.length; ++i) {
|
||||
const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
var currCommand = commonCommands[i].QueryInterface(Components.interfaces.nsIRDFResource).Value;
|
||||
var element = null;
|
||||
if (currCommand != NC_NS_CMD + "bm_separator") {
|
||||
var commandName = this.getCommandName(currCommand);
|
||||
element = this.createMenuItem(commandName, currCommand, itemNode);
|
||||
}
|
||||
else if (i != 0 && i < commonCommands.length-1) {
|
||||
// Never append a separator as the first or last element in a context
|
||||
// menu.
|
||||
element = document.createElementNS(kXULNS, "menuseparator");
|
||||
}
|
||||
|
||||
if (element)
|
||||
popup.appendChild(element);
|
||||
}
|
||||
return;
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Given two unique arrays, return an array that contains only the elements
|
||||
// common to both.
|
||||
findCommonNodes: function (aNewArray, aOldArray)
|
||||
{
|
||||
var common = [];
|
||||
for (var i = 0; i < aNewArray.length; ++i) {
|
||||
for (var j = 0; j < aOldArray.length; ++j) {
|
||||
if (common.length > 0 && common[common.length-1] == aNewArray[i])
|
||||
continue;
|
||||
if (aNewArray[i] == aOldArray[j])
|
||||
common.push(aNewArray[i]);
|
||||
}
|
||||
}
|
||||
return common;
|
||||
},
|
||||
|
||||
flattenEnumerator: function (aEnumerator)
|
||||
{
|
||||
if ("_index" in aEnumerator)
|
||||
return aEnumerator._inner;
|
||||
|
||||
var temp = [];
|
||||
while (aEnumerator.hasMoreElements())
|
||||
temp.push(aEnumerator.getNext());
|
||||
return temp;
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// For a given URI (a unique identifier of a resource in the graph) return
|
||||
// an enumeration of applicable commands for that URI.
|
||||
getAllCmds: function (aNodeID)
|
||||
{
|
||||
var type = this.resolveType(aNodeID);
|
||||
if (!type) {
|
||||
if (aNodeID == "NC:PersonalToolbarFolder" || aNodeID == "NC:BookmarksRoot")
|
||||
type = "http://home.netscape.com/NC-rdf#Folder";
|
||||
else
|
||||
return null;
|
||||
}
|
||||
var commands = [];
|
||||
// menu order:
|
||||
//
|
||||
// bm_open
|
||||
// bm_openfolder
|
||||
// bm_openinnewwindow
|
||||
// /* bm_openinnewtab not yet supported */
|
||||
// ---------------------
|
||||
// /* bm_find removed */
|
||||
// bm_newfolder
|
||||
// ---------------------
|
||||
// bm_cut
|
||||
// bm_copy
|
||||
// bm_paste
|
||||
// bm_fileBookmark
|
||||
// ---------------------
|
||||
// bm_delete
|
||||
// bm_rename
|
||||
// ---------------------
|
||||
// bm_properties
|
||||
switch (type) {
|
||||
case "http://home.netscape.com/NC-rdf#BookmarkSeparator":
|
||||
commands = ["bm_newfolder", "bm_separator",
|
||||
"bm_cut", "bm_copy", "bm_paste", "bm_separator",
|
||||
"bm_delete"];
|
||||
break;
|
||||
case "http://home.netscape.com/NC-rdf#Bookmark":
|
||||
commands = ["bm_open", "bm_openinnewwindow", /* "bm_openinnewtab", */ "bm_separator",
|
||||
"bm_newfolder", "bm_separator",
|
||||
"bm_cut", "bm_copy", "bm_paste", "bm_fileBookmark", "bm_separator",
|
||||
"bm_delete", "bm_rename", "bm_separator",
|
||||
"bm_properties"];
|
||||
break;
|
||||
case "http://home.netscape.com/NC-rdf#Folder":
|
||||
commands = ["bm_openfolder", "bm_openinnewwindow", "bm_separator",
|
||||
"bm_newfolder", "bm_separator",
|
||||
"bm_cut", "bm_copy", "bm_paste", "bm_fileBookmark", "bm_separator",
|
||||
"bm_delete", "bm_rename", "bm_separator",
|
||||
"bm_properties"];
|
||||
break;
|
||||
case "http://home.netscape.com/NC-rdf#IEFavoriteFolder":
|
||||
commands = ["bm_openfolder", "bm_separator",
|
||||
"bm_delete"];
|
||||
break;
|
||||
case "http://home.netscape.com/NC-rdf#IEFavorite":
|
||||
commands = ["bm_open", "bm_openinnewwindow", /* "bm_openinnewtab", */ "bm_separator",
|
||||
"bm_copy"];
|
||||
break;
|
||||
case "http://home.netscape.com/NC-rdf#FileSystemObject":
|
||||
commands = ["bm_open", "bm_openinnewwindow", /* "bm_openinnewtab", */ "bm_separator",
|
||||
"bm_copy"];
|
||||
break;
|
||||
default:
|
||||
var source = this.RDF.GetResource(aNodeID);
|
||||
return this.db.GetAllCmds(source);
|
||||
}
|
||||
return new CommandArrayEnumerator(commands);
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Retrieve the human-readable name for a particular command. Used when
|
||||
// manufacturing a UI to invoke commands.
|
||||
getCommandName: function (aCommand)
|
||||
{
|
||||
var cmdName = aCommand.substring(NC_NS_CMD.length);
|
||||
try {
|
||||
// Note: this will succeed only if there's a string in the bookmarks
|
||||
// string bundle for this command name. Otherwise, <xul:stringbundle/>
|
||||
// will throw, we'll catch & stifle the error, and look up the command
|
||||
// name in the datasource.
|
||||
return this.getLocaleString ("cmd_" + cmdName);
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
// XXX - WORK TO DO HERE! (rjc will cry if we don't fix this)
|
||||
// need to ask the ds for the commands for this node, however we don't
|
||||
// have the right params. This is kind of a problem.
|
||||
dump("*** BAD! EVIL! WICKED! NO! ACK! ARGH! ORGH!\n");
|
||||
const rName = this.RDF.GetResource(NC_NS + "Name");
|
||||
const rSource = this.RDF.GetResource(aNodeID);
|
||||
return this.db.GetTarget(rSource, rName, true).Value;
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Perform a command based on a UI event. XXX - work to do here.
|
||||
preExecCommand: function (aEvent)
|
||||
{
|
||||
var commandID = aEvent.target.getAttribute("cmd");
|
||||
if (!commandID) return;
|
||||
goDoCommand("cmd_" + commandID.substring(NC_NS_CMD.length));
|
||||
},
|
||||
|
||||
execCommand: function (aCommandID)
|
||||
{
|
||||
var args = [];
|
||||
var selection = this.getSelection ();
|
||||
if (selection.length >= 1)
|
||||
var selectedItem = selection[0];
|
||||
switch (aCommandID) {
|
||||
case "bm_open":
|
||||
this.open(null, selectedItem, false);
|
||||
break;
|
||||
case "bm_openfolder":
|
||||
this.commands.openFolder(selectedItem);
|
||||
break;
|
||||
case "bm_openinnewwindow":
|
||||
if (this.resolveType(selectedItem.id) == NC_NS + "Folder")
|
||||
this.openFolderInNewWindow(selectedItem);
|
||||
else
|
||||
this.open(null, selectedItem, true);
|
||||
break;
|
||||
case "bm_rename":
|
||||
// XXX - this is SO going to break if we ever do column re-ordering.
|
||||
this.commands.editCell(selectedItem, 0);
|
||||
break;
|
||||
case "bm_editurl":
|
||||
this.commands.editCell(selectedItem, 1);
|
||||
break;
|
||||
case "bm_setnewbookmarkfolder":
|
||||
case "bm_setpersonaltoolbarfolder":
|
||||
case "bm_setnewsearchfolder":
|
||||
BookmarksUtils.doBookmarksCommand(selectedItem.id, NC_NS_CMD + aCommandID, args);
|
||||
// XXX - The containing node seems to be closed here and the
|
||||
// focus/selection is destroyed.
|
||||
this.selectElement(selectedItem);
|
||||
break;
|
||||
case "bm_properties":
|
||||
this.showPropertiesForNode(selectedItem);
|
||||
break;
|
||||
case "bm_find":
|
||||
this.findInBookmarks();
|
||||
break;
|
||||
case "bm_cut":
|
||||
this.copySelection(selection);
|
||||
this.deleteSelection(selection);
|
||||
break;
|
||||
case "bm_copy":
|
||||
this.copySelection(selection);
|
||||
break;
|
||||
case "bm_paste":
|
||||
this.paste(selection);
|
||||
break;
|
||||
case "bm_delete":
|
||||
this.deleteSelection(selection);
|
||||
break;
|
||||
case "bm_fileBookmark":
|
||||
var rv = { selectedFolder: null };
|
||||
openDialog("chrome://communicator/content/bookmarks/addBookmark.xul", "",
|
||||
"centerscreen,chrome,modal=yes,dialog=yes,resizable=yes", null, null, folder, null, "selectFolder", rv);
|
||||
if (rv.selectedFolder) {
|
||||
for (var k = 0; k < selection.length; ++k) {
|
||||
if (selection[k].id == rv.selectedFolder)
|
||||
return; // Selection contains the target folder. Just fail silently.
|
||||
}
|
||||
var additiveFlag = false;
|
||||
var selectedItems = [].concat(this.getSelection())
|
||||
for (var i = 0; i < selectedItems.length; ++i) {
|
||||
var currItem = selectedItems[i];
|
||||
var currURI = currItem.id;
|
||||
var parent = gBookmarksShell.findRDFNode(currItem, false);
|
||||
gBookmarksShell.moveBookmark(currURI, parent.id, rv.selectedFolder);
|
||||
gBookmarksShell.selectFolderItem(rv.selectedFolder, currURI, additiveFlag);
|
||||
if (!additiveFlag) additiveFlag = true;
|
||||
}
|
||||
gBookmarksShell.flushDataSource();
|
||||
}
|
||||
break;
|
||||
case "bm_newfolder":
|
||||
var nfseln = this.getBestItem();
|
||||
this.commands.createBookmarkItem("folder", nfseln);
|
||||
break;
|
||||
case "bm_newbookmark":
|
||||
var folder = this.getSelectedFolder();
|
||||
openDialog("chrome://communicator/content/bookmarks/addBookmark.xul", "",
|
||||
"centerscreen,chrome,modal=yes,dialog=yes,resizable=no", null, null, folder, null, "newBookmark");
|
||||
break;
|
||||
case "bm_newseparator":
|
||||
nfseln = this.getBestItem();
|
||||
var parentNode = this.findRDFNode(nfseln, false);
|
||||
args = [{ property: NC_NS + "parent",
|
||||
resource: parentNode.id }];
|
||||
BookmarksUtils.doBookmarksCommand(nfseln.id, NC_NS_CMD + "newseparator", args);
|
||||
break;
|
||||
case "bm_import":
|
||||
case "bm_export":
|
||||
const isImport = aCommandID == "bm_import";
|
||||
try {
|
||||
const kFilePickerContractID = "@mozilla.org/filepicker;1";
|
||||
const kFilePickerIID = Components.interfaces.nsIFilePicker;
|
||||
const kFilePicker = Components.classes[kFilePickerContractID].createInstance(kFilePickerIID);
|
||||
|
||||
const kTitle = this.getLocaleString(isImport ? "SelectImport": "EnterExport");
|
||||
kFilePicker.init(window, kTitle, kFilePickerIID[isImport ? "modeOpen" : "modeSave"]);
|
||||
kFilePicker.appendFilters(kFilePickerIID.filterHTML | kFilePickerIID.filterAll);
|
||||
if (!isImport) kFilePicker.defaultString = "bookmarks.html";
|
||||
if (kFilePicker.show() != kFilePickerIID.returnCancel) {
|
||||
var fileName = kFilePicker.fileURL.spec;
|
||||
if (!fileName) break;
|
||||
}
|
||||
else break;
|
||||
}
|
||||
catch (e) {
|
||||
break;
|
||||
}
|
||||
var seln = this.getBestItem();
|
||||
args = [{ property: NC_NS + "URL", literal: fileName}];
|
||||
BookmarksUtils.doBookmarksCommand(seln.id, NC_NS_CMD + aCommandID, args);
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
openFolderInNewWindow: function (aSelectedItem)
|
||||
{
|
||||
openDialog("chrome://communicator/content/bookmarks/bookmarks.xul",
|
||||
"", "chrome,all,dialog=no", aSelectedItem.id);
|
||||
},
|
||||
|
||||
copySelection: function (aSelection)
|
||||
{
|
||||
const kSuppArrayContractID = "@mozilla.org/supports-array;1";
|
||||
const kSuppArrayIID = Components.interfaces.nsISupportsArray;
|
||||
var itemArray = Components.classes[kSuppArrayContractID].createInstance(kSuppArrayIID);
|
||||
|
||||
const kSuppWStringContractID = "@mozilla.org/supports-wstring;1";
|
||||
const kSuppWStringIID = Components.interfaces.nsISupportsWString;
|
||||
var bmstring = Components.classes[kSuppWStringContractID].createInstance(kSuppWStringIID);
|
||||
var unicodestring = Components.classes[kSuppWStringContractID].createInstance(kSuppWStringIID);
|
||||
var htmlstring = Components.classes[kSuppWStringContractID].createInstance(kSuppWStringIID);
|
||||
|
||||
var sBookmarkItem = ""; var sTextUnicode = ""; var sTextHTML = "";
|
||||
for (var i = 0; i < aSelection.length; ++i) {
|
||||
var url = LITERAL(this.db, aSelection[i], NC_NS + "URL");
|
||||
var name = LITERAL(this.db, aSelection[i], NC_NS + "Name");
|
||||
sBookmarkItem += aSelection[i].id + "\n";
|
||||
sTextUnicode += url + "\n";
|
||||
sTextHTML += "<A HREF=\"" + url + "\">" + name + "</A>";
|
||||
}
|
||||
|
||||
const kXferableContractID = "@mozilla.org/widget/transferable;1";
|
||||
const kXferableIID = Components.interfaces.nsITransferable;
|
||||
var xferable = Components.classes[kXferableContractID].createInstance(kXferableIID);
|
||||
|
||||
xferable.addDataFlavor("moz/bookmarkclipboarditem");
|
||||
bmstring.data = sBookmarkItem;
|
||||
xferable.setTransferData("moz/bookmarkclipboarditem", bmstring, sBookmarkItem.length*2)
|
||||
|
||||
xferable.addDataFlavor("text/html");
|
||||
htmlstring.data = sTextHTML;
|
||||
xferable.setTransferData("text/html", htmlstring, sTextHTML.length*2)
|
||||
|
||||
xferable.addDataFlavor("text/unicode");
|
||||
unicodestring.data = sTextUnicode;
|
||||
xferable.setTransferData("text/unicode", unicodestring, sTextUnicode.length*2)
|
||||
|
||||
const kClipboardContractID = "@mozilla.org/widget/clipboard;1";
|
||||
const kClipboardIID = Components.interfaces.nsIClipboard;
|
||||
var clipboard = Components.classes[kClipboardContractID].getService(kClipboardIID);
|
||||
clipboard.setData(xferable, null, kClipboardIID.kGlobalClipboard);
|
||||
},
|
||||
|
||||
paste: function (aSelection)
|
||||
{
|
||||
const kXferableContractID = "@mozilla.org/widget/transferable;1";
|
||||
const kXferableIID = Components.interfaces.nsITransferable;
|
||||
var xferable = Components.classes[kXferableContractID].createInstance(kXferableIID);
|
||||
xferable.addDataFlavor("moz/bookmarkclipboarditem");
|
||||
xferable.addDataFlavor("text/x-moz-url");
|
||||
xferable.addDataFlavor("text/unicode");
|
||||
|
||||
const kClipboardContractID = "@mozilla.org/widget/clipboard;1";
|
||||
const kClipboardIID = Components.interfaces.nsIClipboard;
|
||||
var clipboard = Components.classes[kClipboardContractID].getService(kClipboardIID);
|
||||
clipboard.getData(xferable, kClipboardIID.kGlobalClipboard);
|
||||
|
||||
var flavour = { };
|
||||
var data = { };
|
||||
var length = { };
|
||||
xferable.getAnyTransferData(flavour, data, length);
|
||||
var nodes = []; var names = [];
|
||||
data = data.value.QueryInterface(Components.interfaces.nsISupportsWString).data;
|
||||
switch (flavour.value) {
|
||||
case "moz/bookmarkclipboarditem":
|
||||
nodes = data.split("\n");
|
||||
break;
|
||||
case "text/x-moz-url":
|
||||
var ix = data.indexOf("\n");
|
||||
nodes.push(data.substring(0, ix != -1 ? ix : data.length));
|
||||
names.push(data.substring(ix));
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
const lastSelected = aSelection[aSelection.length-1];
|
||||
const kParentNode = this.resolvePasteFolder(aSelection);
|
||||
const krParent = this.RDF.GetResource(kParentNode.id);
|
||||
const krSource = this.RDF.GetResource(lastSelected.id);
|
||||
|
||||
const kRDFCContractID = "@mozilla.org/rdf/container;1";
|
||||
const kRDFCIID = Components.interfaces.nsIRDFContainer;
|
||||
const ksRDFC = Components.classes[kRDFCContractID].getService(kRDFCIID);
|
||||
const kBMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
|
||||
var additiveFlag = false;
|
||||
for (var i = 0; i < nodes.length; ++i) {
|
||||
if (!nodes[i]) continue;
|
||||
var rCurrent = this.RDF.GetResource(nodes[i]);
|
||||
const krTypeProperty = this.RDF.GetResource(RDF_NS + "type");
|
||||
var rType = this.db.GetTarget(rCurrent, krTypeProperty, true);
|
||||
try {
|
||||
rType = rType.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
}
|
||||
catch (e) {
|
||||
try {
|
||||
rType = rType.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
}
|
||||
catch (e) {
|
||||
// OK, no type exists, so node does not exist in the graph.
|
||||
// (e.g. user pastes url as text)
|
||||
// Do some housekeeping.
|
||||
const krName = this.RDF.GetResource(names[i]);
|
||||
const krNameProperty = this.RDF.GetResource(NC_NS + "Name");
|
||||
const krBookmark = this.RDF.GetResource(NC_NS + "Bookmark");
|
||||
kBMDS.Assert(rCurrent, krNameProperty, krName, true);
|
||||
kBMDS.Assert(rCurrent, krTypeProperty, krBookmark, true);
|
||||
}
|
||||
}
|
||||
|
||||
// If the node is a folder, then we need to create a new anonymous
|
||||
// resource and copy all the arcs over.
|
||||
if (rType && rType.Value == NC_NS + "Folder")
|
||||
rCurrent = BookmarksUtils.cloneFolder(rCurrent, krParent, krSource);
|
||||
|
||||
// If this item already exists in this container, don't paste, as
|
||||
// this will result in the creation of multiple copies in the datasource
|
||||
// but will not result in an update of the UI. (In Short: we don't
|
||||
// handle multiple bookmarks well)
|
||||
ksRDFC.Init(kBMDS, krParent);
|
||||
ix = ksRDFC.IndexOf(rCurrent);
|
||||
if (ix != -1)
|
||||
continue;
|
||||
|
||||
ix = ksRDFC.IndexOf(krSource);
|
||||
if (ix != -1)
|
||||
ksRDFC.InsertElementAt(rCurrent, ix+1, true);
|
||||
else
|
||||
ksRDFC.AppendElement(rCurrent);
|
||||
this.selectFolderItem(krSource.Value, rCurrent.Value, additiveFlag);
|
||||
if (!additiveFlag) additiveFlag = true;
|
||||
|
||||
var rds = kBMDS.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
||||
rds.Flush();
|
||||
}
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// For the given selection, determines the element that should form the
|
||||
// container to paste items into.
|
||||
resolvePasteFolder: function (aSelection)
|
||||
{
|
||||
const lastSelected = aSelection[aSelection.length-1];
|
||||
if (lastSelected.getAttribute("container") == "true" &&
|
||||
aSelection.length == 1)
|
||||
return lastSelected;
|
||||
return this.findRDFNode(lastSelected, false);
|
||||
},
|
||||
|
||||
canPaste: function ()
|
||||
{
|
||||
const kClipboardContractID = "@mozilla.org/widget/clipboard;1";
|
||||
const kClipboardIID = Components.interfaces.nsIClipboard;
|
||||
var clipboard = Components.classes[kClipboardContractID].getService(kClipboardIID);
|
||||
const kSuppArrayContractID = "@mozilla.org/supports-array;1";
|
||||
const kSuppArrayIID = Components.interfaces.nsISupportsArray;
|
||||
var flavourArray = Components.classes[kSuppArrayContractID].createInstance(kSuppArrayIID);
|
||||
const kSuppStringContractID = "@mozilla.org/supports-string;1";
|
||||
const kSuppStringIID = Components.interfaces.nsISupportsString;
|
||||
|
||||
var flavours = ["moz/bookmarkclipboarditem", "text/x-moz-url"];
|
||||
for (var i = 0; i < flavours.length; ++i) {
|
||||
const kSuppString = Components.classes[kSuppStringContractID].createInstance(kSuppStringIID);
|
||||
kSuppString.data = flavours[i];
|
||||
flavourArray.AppendElement(kSuppString);
|
||||
}
|
||||
var hasFlavours = clipboard.hasDataMatchingFlavors(flavourArray, kClipboardIID.kGlobalClipboard);
|
||||
return hasFlavours;
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// aSelection is a mutable array, not a NodeList.
|
||||
deleteSelection: function (aSelection)
|
||||
{
|
||||
const kRDFCContractID = "@mozilla.org/rdf/container;1";
|
||||
const kRDFCIID = Components.interfaces.nsIRDFContainer;
|
||||
const ksRDFC = Components.classes[kRDFCContractID].getService(kRDFCIID);
|
||||
|
||||
var nextElement;
|
||||
var count = 0;
|
||||
|
||||
var selectionLength = aSelection.length;
|
||||
while (aSelection.length && aSelection[count]) {
|
||||
const currParent = this.findRDFNode(aSelection[count], false);
|
||||
const kSelectionURI = aSelection[count].id;
|
||||
|
||||
// Disallow the removal of certain 'special' nodes
|
||||
if (kSelectionURI == "NC:BookmarksRoot") {
|
||||
aSelection.splice(count++,1);
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the current bookmark is the IE Favorites folder, we have a little
|
||||
// extra work to do - set the pref |browser.bookmarks.import_system_favorites|
|
||||
// to ensure that we don't re-import next time.
|
||||
if (aSelection[count].getAttribute("type") == (NC_NS + "IEFavoriteFolder")) {
|
||||
const kPrefSvcContractID = "@mozilla.org/preferences-service;1";
|
||||
const kPrefSvcIID = Components.interfaces.nsIPrefBranch;
|
||||
const kPrefSvc = Components.classes[kPrefSvcContractID].getService(kPrefSvcIID);
|
||||
kPrefSvc.setBoolPref("browser.bookmarks.import_system_favorites", false);
|
||||
}
|
||||
|
||||
const krParent = this.RDF.GetResource(currParent.id);
|
||||
const krBookmark = this.RDF.GetResource(kSelectionURI);
|
||||
const kBMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
|
||||
ksRDFC.Init(kBMDS, krParent);
|
||||
nextElement = this.getNextElement(aSelection[count]);
|
||||
ksRDFC.RemoveElement(krBookmark, true);
|
||||
|
||||
try {
|
||||
// XXX - UGH. Template builder is NOT removing the element from the
|
||||
// tree, and so selection remains non-zero in length and we go into
|
||||
// an infinite loop here. Tear the node out of the document.
|
||||
var parent = aSelection[count].parentNode;
|
||||
parent.removeChild(aSelection[count]);
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
// Manipulate the selection array ourselves.
|
||||
aSelection.splice(count,1);
|
||||
}
|
||||
this.selectElement(nextElement);
|
||||
},
|
||||
|
||||
moveBookmark: function (aBookmarkURI, aFromFolderURI, aToFolderURI)
|
||||
{
|
||||
const kBMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
const kRDFCContractID = "@mozilla.org/rdf/container;1";
|
||||
const kRDFCIID = Components.interfaces.nsIRDFContainer;
|
||||
const kRDFC = Components.classes[kRDFCContractID].getService(kRDFCIID);
|
||||
const krSrc = this.RDF.GetResource(aBookmarkURI);
|
||||
const krOldParent = this.RDF.GetResource(aFromFolderURI);
|
||||
const krNewParent = this.RDF.GetResource(aToFolderURI);
|
||||
kRDFC.Init(kBMDS, krNewParent);
|
||||
kRDFC.AppendElement(krSrc);
|
||||
kRDFC.Init(kBMDS, krOldParent);
|
||||
kRDFC.RemoveElement(krSrc, true);
|
||||
},
|
||||
|
||||
open: function (aEvent, aRDFNode, aInNewWindow)
|
||||
{
|
||||
var urlValue = LITERAL(this.db, aRDFNode, NC_NS + "URL");
|
||||
|
||||
// Ignore "NC:" and empty urls.
|
||||
if (urlValue.substring(0,3) == "NC:" || !urlValue) return;
|
||||
|
||||
if (aEvent && aEvent.altKey)
|
||||
this.showPropertiesForNode (aRDFNode);
|
||||
else if (aInNewWindow)
|
||||
openDialog (getBrowserURL(), "_blank", "chrome,all,dialog=no", urlValue);
|
||||
else
|
||||
openTopWin (urlValue);
|
||||
if (aEvent)
|
||||
aEvent.preventBubble();
|
||||
},
|
||||
|
||||
showPropertiesForNode: function (aBookmarkItem)
|
||||
{
|
||||
if (aBookmarkItem.getAttribute("type") != NC_NS + "BookmarkSeparator")
|
||||
openDialog("chrome://communicator/content/bookmarks/bm-props.xul",
|
||||
"", "centerscreen,chrome,resizable=no", aBookmarkItem.id);
|
||||
},
|
||||
|
||||
findInBookmarks: function ()
|
||||
{
|
||||
openDialog("chrome://communicator/content/bookmarks/findBookmark.xul",
|
||||
"FindBookmarksWindow",
|
||||
"centerscreen,resizable=no,chrome,dependent");
|
||||
},
|
||||
|
||||
getLocaleString: function (aStringKey)
|
||||
{
|
||||
var bundle = document.getElementById("bookmarksbundle");
|
||||
return bundle.getString (aStringKey);
|
||||
},
|
||||
|
||||
flushDataSource: function ()
|
||||
{
|
||||
const kBMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
var remoteDS = kBMDS.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
|
||||
remoteDS.Flush();
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Determine the rdf:type property for the given resource.
|
||||
resolveType: function (aID)
|
||||
{
|
||||
const krType = this.RDF.GetResource(RDF_NS + "type");
|
||||
const krElement = this.RDF.GetResource(aID);
|
||||
const type = gBookmarksShell.db.GetTarget(krElement, krType, true);
|
||||
try {
|
||||
return type.QueryInterface(Components.interfaces.nsIRDFResource).Value;
|
||||
}
|
||||
catch (e) {
|
||||
try {
|
||||
return type.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
|
||||
}
|
||||
catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// takes a node and adds the appropriate adornments for a bookmark container.
|
||||
createBookmarkFolderDecorations: function (aNode)
|
||||
{
|
||||
aNode.setAttribute("type", "http://home.netscape.com/NC-rdf#Folder");
|
||||
aNode.setAttribute("container", "true");
|
||||
return aNode;
|
||||
}
|
||||
};
|
||||
|
||||
function CommandArrayEnumerator (aCommandArray)
|
||||
{
|
||||
this._inner = [];
|
||||
const kRDFContractID = "@mozilla.org/rdf/rdf-service;1";
|
||||
const kRDFIID = Components.interfaces.nsIRDFService;
|
||||
const RDF = Components.classes[kRDFContractID].getService(kRDFIID);
|
||||
for (var i = 0; i < aCommandArray.length; ++i)
|
||||
this._inner.push(RDF.GetResource(NC_NS_CMD + aCommandArray[i]));
|
||||
|
||||
this._index = 0;
|
||||
}
|
||||
|
||||
CommandArrayEnumerator.prototype = {
|
||||
getNext: function ()
|
||||
{
|
||||
return this._inner[this._index];
|
||||
},
|
||||
|
||||
hasMoreElements: function ()
|
||||
{
|
||||
return this._index < this._inner.length;
|
||||
}
|
||||
};
|
||||
|
||||
var BookmarksUtils = {
|
||||
_rdf: null,
|
||||
get RDF ()
|
||||
{
|
||||
if (!this._rdf) {
|
||||
const kRDFContractID = "@mozilla.org/rdf/rdf-service;1";
|
||||
const kRDFIID = Components.interfaces.nsIRDFService;
|
||||
this._rdf = Components.classes[kRDFContractID].getService(kRDFIID);
|
||||
}
|
||||
return this._rdf;
|
||||
},
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Execute a command with the given source and arguments
|
||||
doBookmarksCommand: function (aSourceURI, aCommand, aArgumentsArray)
|
||||
{
|
||||
var rCommand = this.RDF.GetResource(aCommand);
|
||||
|
||||
var kSuppArrayContractID = "@mozilla.org/supports-array;1";
|
||||
var kSuppArrayIID = Components.interfaces.nsISupportsArray;
|
||||
var sourcesArray = Components.classes[kSuppArrayContractID].createInstance(kSuppArrayIID);
|
||||
if (aSourceURI) {
|
||||
var rSource = this.RDF.GetResource(aSourceURI);
|
||||
sourcesArray.AppendElement (rSource);
|
||||
}
|
||||
|
||||
var argsArray = Components.classes[kSuppArrayContractID].createInstance(kSuppArrayIID);
|
||||
for (var i = 0; i < aArgumentsArray.length; ++i) {
|
||||
var rArc = this.RDF.GetResource(aArgumentsArray[i].property);
|
||||
argsArray.AppendElement(rArc);
|
||||
var rValue = null;
|
||||
if ("resource" in aArgumentsArray[i]) {
|
||||
rValue = this.RDF.GetResource(aArgumentsArray[i].resource);
|
||||
}
|
||||
else
|
||||
rValue = this.RDF.GetLiteral(aArgumentsArray[i].literal);
|
||||
argsArray.AppendElement(rValue);
|
||||
}
|
||||
|
||||
// Exec the command in the Bookmarks datasource.
|
||||
const kBMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
kBMDS.DoCommand(sourcesArray, rCommand, argsArray);
|
||||
},
|
||||
|
||||
cloneFolder: function (aFolder, aParent, aRelativeItem)
|
||||
{
|
||||
var BMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
|
||||
var nameArc = this.RDF.GetResource(NC_NS + "Name");
|
||||
var rName = BMDS.GetTarget(aFolder, nameArc, true);
|
||||
rName = rName.QueryInterface(Components.interfaces.nsIRDFLiteral);
|
||||
|
||||
var newFolder = this.createFolderWithID(rName.Value, aRelativeItem, aParent);
|
||||
|
||||
// Now need to append kiddies.
|
||||
try {
|
||||
const kRDFCContractID = "@mozilla.org/rdf/container;1";
|
||||
const kRDFCIID = Components.interfaces.nsIRDFContainer;
|
||||
var RDFC = Components.classes[kRDFCContractID].getService(kRDFCIID);
|
||||
const kRDFCUContractID = "@mozilla.org/rdf/container-utils;1";
|
||||
const kRDFCUIID = Components.interfaces.nsIRDFContainerUtils;
|
||||
var RDFCU = Components.classes[kRDFCUContractID].getService(kRDFCUIID);
|
||||
|
||||
RDFC.Init(BMDS, aFolder);
|
||||
var elts = RDFC.GetElements();
|
||||
RDFC.Init(BMDS, newFolder);
|
||||
|
||||
while (elts.hasMoreElements()) {
|
||||
var curr = elts.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
if (RDFCU.IsContainer(BMDS, curr))
|
||||
BookmarksUtils.cloneFolder(curr, newFolder);
|
||||
else
|
||||
RDFC.AppendElement(curr);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
return newFolder;
|
||||
},
|
||||
|
||||
createFolderWithID: function (aTitle, aRelativeItem, aParentFolder)
|
||||
{
|
||||
const kRDFCContractID = "@mozilla.org/rdf/container;1";
|
||||
const kRDFCIID = Components.interfaces.nsIRDFContainer;
|
||||
var RDFC = Components.classes[kRDFCContractID].createInstance(kRDFCIID);
|
||||
var BMDS = this.RDF.GetDataSource("rdf:bookmarks");
|
||||
try {
|
||||
RDFC.Init(BMDS, aParentFolder);
|
||||
}
|
||||
catch (e) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var ix = RDFC.IndexOf(aRelativeItem);
|
||||
var BMSvc = BMDS.QueryInterface(Components.interfaces.nsIBookmarksService);
|
||||
return BMSvc.createFolderWithDetails(aTitle, aParentFolder, ix);
|
||||
},
|
||||
|
||||
|
||||
addBookmarkForTabBrowser: function( aTabBrowser, aSelect )
|
||||
{
|
||||
var tabsInfo = [];
|
||||
var currentTabInfo = { name: "", url: "", charset: null };
|
||||
|
||||
const activeBrowser = aTabBrowser.selectedBrowser;
|
||||
const browsers = aTabBrowser.browsers;
|
||||
for (var i = 0; i < browsers.length; ++i) {
|
||||
var webNav = browsers[i].webNavigation;
|
||||
var url = webNav.currentURI.spec;
|
||||
var name = "";
|
||||
var charset;
|
||||
try {
|
||||
var doc = webNav.document;
|
||||
name = doc.title || url;
|
||||
charset = doc.characterSet;
|
||||
} catch (e) {
|
||||
name = url;
|
||||
}
|
||||
|
||||
tabsInfo[i] = { name: name, url: url, charset: charset };
|
||||
|
||||
if (browsers[i] == activeBrowser)
|
||||
currentTabInfo = tabsInfo[i];
|
||||
}
|
||||
|
||||
openDialog("chrome://communicator/content/bookmarks/addBookmark.xul", "",
|
||||
"centerscreen,chrome,dialog=yes,resizable,dependent",
|
||||
currentTabInfo.name, currentTabInfo.url, null,
|
||||
currentTabInfo.charset, "addGroup" + (aSelect ? ",group" : ""), tabsInfo);
|
||||
},
|
||||
|
||||
addBookmarkForBrowser: function (aDocShell, aShowDialog)
|
||||
{
|
||||
// Bug 52536: We obtain the URL and title from the nsIWebNavigation
|
||||
// associated with a <browser/> rather than from a DOMWindow.
|
||||
// This is because when a full page plugin is loaded, there is
|
||||
// no DOMWindow (?) but information about the loaded document
|
||||
// may still be obtained from the webNavigation.
|
||||
var url = aDocShell.currentURI.spec;
|
||||
var title, docCharset = null;
|
||||
try {
|
||||
title = aDocShell.document.title || url;
|
||||
docCharset = aDocShell.document.characterSet;
|
||||
}
|
||||
catch (e) {
|
||||
title = url;
|
||||
}
|
||||
|
||||
this.addBookmark(url, title, docCharset, aShowDialog);
|
||||
},
|
||||
|
||||
addBookmark: function (aURL, aTitle, aCharset, aShowDialog)
|
||||
{
|
||||
if (aCharset === undefined) {
|
||||
var fw = document.commandDispatcher.focusedWindow;
|
||||
aCharset = fw.document.characterSet;
|
||||
}
|
||||
|
||||
if (aShowDialog)
|
||||
openDialog("chrome://communicator/content/bookmarks/addBookmark.xul", "",
|
||||
"centerscreen,chrome,dialog=yes,resizable,dependent", aTitle, aURL, null, aCharset);
|
||||
else {
|
||||
// User has elected to override the file dialog and always file bookmarks
|
||||
// into the default bookmark folder.
|
||||
const kBMSvcContractID = "@mozilla.org/browser/bookmarks-service;1";
|
||||
const kBMSvcIID = Components.interfaces.nsIBookmarksService;
|
||||
const kBMSvc = Components.classes[kBMSvcContractID].getService(kBMSvcIID);
|
||||
kBMSvc.addBookmarkImmediately(aURL, aTitle, kBMSvcIID.BOOKMARK_DEFAULT_TYPE, aCharset);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var ContentUtils = {
|
||||
childByLocalName: function (aSelectedItem, aLocalName)
|
||||
{
|
||||
var temp = aSelectedItem.firstChild;
|
||||
while (temp) {
|
||||
if (temp.localName == aLocalName)
|
||||
return temp;
|
||||
temp = temp.nextSibling;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<!-- -*- Mode: HTML; indent-tabs-mode: nil; -*- -->
|
||||
<!--
|
||||
|
||||
The contents of this file are subject to the Netscape Public
|
||||
License Version 1.1 (the "License"); you may not use this file
|
||||
except in compliance with the License. You may obtain a copy of
|
||||
the License at http://www.mozilla.org/NPL/
|
||||
|
||||
Software distributed under the License is distributed on an "AS
|
||||
IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
||||
implied. See the License for the specific language governing
|
||||
rights and limitations under the License.
|
||||
|
||||
The Original Code is mozilla.org code.
|
||||
|
||||
The Initial Developer of the Original Code is Netscape
|
||||
Communications Corporation. Portions created by Netscape are
|
||||
Copyright (C) 1998 Netscape Communications Corporation. All
|
||||
Rights Reserved.
|
||||
|
||||
Contributor(s):
|
||||
Ben Goodger <ben@netscape.com> (Original Author)
|
||||
-->
|
||||
|
||||
<!DOCTYPE window SYSTEM "chrome://communicator/locale/bookmarks/bookmarksOverlay.dtd">
|
||||
|
||||
<overlay id="bookmarksOverlay"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
|
||||
<stringbundleset id="stringbundleset">
|
||||
<stringbundle id="bookmarksbundle"
|
||||
src="chrome://communicator/locale/bookmarks/bookmark.properties"/>
|
||||
</stringbundleset>
|
||||
|
||||
<popupset id="bookmarksPopupset">
|
||||
<popup id="bmContext"
|
||||
onpopupshowing="gBookmarksShell.createContextMenu(event);"/>
|
||||
</popupset>
|
||||
|
||||
<commands id="commands">
|
||||
<commandset id="bookmarksItems">
|
||||
<command id="cmd_bm_open" oncommand="goDoCommand('cmd_bm_open');"/>
|
||||
<command id="cmd_bm_openfolder" oncommand="goDoCommand('cmd_bm_openfolder');"/>
|
||||
<command id="cmd_bm_newfolder" oncommand="goDoCommand('cmd_bm_newfolder');"/>
|
||||
<command id="cmd_bm_newbookmark" oncommand="goDoCommand('cmd_bm_newbookmark');"/>
|
||||
<command id="cmd_bm_newseparator" oncommand="goDoCommand('cmd_bm_newseparator');"/>
|
||||
<command id="cmd_bm_find" oncommand="goDoCommand('cmd_bm_find');"/>
|
||||
<command id="cmd_bm_setnewbookmarkfolder" oncommand="goDoCommand('cmd_bm_setnewbookmarkfolder');"/>
|
||||
<command id="cmd_bm_setpersonaltoolbarfolder" oncommand="goDoCommand('cmd_bm_setpersonaltoolbarfolder');"/>
|
||||
<command id="cmd_bm_setnewsearchfolder" oncommand="goDoCommand('cmd_bm_setnewsearchfolder');"/>
|
||||
<command id="cmd_bm_properties" oncommand="goDoCommand('cmd_bm_properties');"/>
|
||||
<command id="cmd_bm_rename" oncommand="goDoCommand('cmd_bm_rename');"/>
|
||||
<command id="cmd_bm_openinnewwindow" oncommand="goDoCommand('cmd_bm_openinnewwindow');"/>
|
||||
<command id="cmd_bm_import" oncommand="goDoCommand('cmd_bm_import');"/>
|
||||
<command id="cmd_bm_export" oncommand="goDoCommand('cmd_bm_export');"/>
|
||||
<command id="cmd_bm_fileBookmark" oncommand="goDoCommand('cmd_bm_fileBookmark');"/>
|
||||
|
||||
<command id="cmd_bm_cut" oncommand="goDoCommand('cmd_bm_cut');"/>
|
||||
<command id="cmd_bm_copy" oncommand="goDoCommand('cmd_bm_copy');"/>
|
||||
<command id="cmd_bm_paste" oncommand="goDoCommand('cmd_bm_paste');"/>
|
||||
<command id="cmd_bm_delete" oncommand="goDoCommand('cmd_bm_delete');"/>
|
||||
<command id="cmd_bm_selectAll" oncommand="goDoCommand('cmd_bm_selectAll');"/>
|
||||
</commandset>
|
||||
<commandset id="selectEditMenuItems"/>
|
||||
<commandset id="globalEditMenuItems"/>
|
||||
</commands>
|
||||
|
||||
</overlay>
|
||||
@@ -0,0 +1,64 @@
|
||||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben Goodger <ben@netscape.com> (Original Author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Get the two bookmarks utility libraries running, attach controllers, focus
|
||||
// tree widget, etc.
|
||||
function Startup()
|
||||
{
|
||||
var bookmarksView = document.getElementById("bookmarks-view");
|
||||
bookmarksView.treeBoxObject.selection.select(0);
|
||||
}
|
||||
|
||||
function manageBookmarks() {
|
||||
openDialog("chrome://communicator/content/bookmarks/bookmarks.xul", "", "chrome,dialog=no,resizable=yes");
|
||||
}
|
||||
|
||||
function addBookmark() {
|
||||
var contentArea = top.document.getElementById('content');
|
||||
if (contentArea) {
|
||||
const browsers = contentArea.browsers;
|
||||
if (browsers.length > 1)
|
||||
BookmarksUtils.addBookmarkForTabBrowser(contentArea);
|
||||
else
|
||||
BookmarksUtils.addBookmarkForBrowser(contentArea.webNavigation, true);
|
||||
}
|
||||
else
|
||||
BookmarksUtils.addBookmark(null, null, undefined, true);
|
||||
}
|
||||
759
mozilla/xpfe/components/bookmarks/resources/bookmarksTree.js
Normal file
@@ -0,0 +1,759 @@
|
||||
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben Goodger <ben@netscape.com> (Original Author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
var gBookmarksShell = null;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Tracks the selected item, the cell last clicked on, and the number of clicks
|
||||
// given to it. Used to activate inline edit mode.
|
||||
var gSelectionTracker = { currentItem: null, currentCell: null, clickCount: 0 };
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Class which defines methods for a bookmarks UI implementation based around
|
||||
// a treeview. Subclasses BookmarksBase in bookmarksOverlay.js. Some methods
|
||||
// are required by the base class, others are for event handling. Window specific
|
||||
// glue code should go into the BookmarksWindow class in bookmarks.js
|
||||
function BookmarksTree (aID)
|
||||
{
|
||||
this.id = aID;
|
||||
}
|
||||
|
||||
BookmarksTree.prototype = {
|
||||
__proto__: BookmarksUIElement.prototype,
|
||||
|
||||
// XXX - change this to .element and move into base.
|
||||
get tree ()
|
||||
{
|
||||
return document.getElementById(this.id);
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// This method constructs a menuitem for a context menu for the given command.
|
||||
// This is implemented by the client so that it can intercept menuitem naming
|
||||
// as appropriate.
|
||||
createMenuItem: function (aDisplayName, aCommandName, aItemNode)
|
||||
{
|
||||
const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
var xulElement = document.createElementNS(kXULNS, "menuitem");
|
||||
xulElement.setAttribute("cmd", aCommandName);
|
||||
xulElement.setAttribute("command", "cmd_" + aCommandName.substring(NC_NS_CMD.length));
|
||||
|
||||
switch (aCommandName) {
|
||||
case NC_NS_CMD + "open":
|
||||
xulElement.setAttribute("label", aDisplayName);
|
||||
xulElement.setAttribute("default", "true");
|
||||
break;
|
||||
case NC_NS_CMD + "openfolder":
|
||||
aDisplayName = aItemNode.getAttribute("open") == "true" ? this.getLocaleString("cmd_openfolder2") : aDisplayName;
|
||||
xulElement.setAttribute("label", aDisplayName);
|
||||
xulElement.setAttribute("default", "true");
|
||||
break;
|
||||
case NC_NS_CMD + "renamebookmark":
|
||||
if (!document.popupNode.hasAttribute("type")) {
|
||||
xulElement.setAttribute("label", this.getLocaleString("cmd_renamebookmark2"));
|
||||
xulElement.setAttribute("cmd", (NC_NS_CMD + "editurl"));
|
||||
}
|
||||
else
|
||||
xulElement.setAttribute("label", aDisplayName);
|
||||
break;
|
||||
default:
|
||||
xulElement.setAttribute("label", aDisplayName);
|
||||
break;
|
||||
}
|
||||
return xulElement;
|
||||
},
|
||||
|
||||
// XXX - ideally this would be in the base. this.tree needs to change to
|
||||
// this.element and then we can do just that.
|
||||
setRoot: function (aRoot)
|
||||
{
|
||||
this.tree.setAttribute("ref", aRoot);
|
||||
},
|
||||
|
||||
// Command implementation
|
||||
commands: {
|
||||
openFolder: function (aSelectedItem)
|
||||
{
|
||||
if (aSelectedItem.getAttribute("open") == "true")
|
||||
aSelectedItem.removeAttribute("open");
|
||||
else
|
||||
aSelectedItem.setAttribute("open", "true");
|
||||
},
|
||||
|
||||
// Things Needed to Satisfy Mac Weenies:
|
||||
// 1) need to implement timed single click edit. This could be Hard.
|
||||
// 2) need to implement some other method of key access apart from F2.
|
||||
// mpt claims that 'Cmd+U' is the excel equivalent.
|
||||
editCell: function (aSelectedItem, aCell)
|
||||
{
|
||||
// XXX throw up properties dialog with name selected so user can rename
|
||||
// that way, until tree conversion allows us to use IL again.
|
||||
goDoCommand("cmd_properties");
|
||||
return; // Disable inline edit for now.
|
||||
|
||||
var editCell = aSelectedItem.firstChild.childNodes[aCell];
|
||||
if (editCell.getAttribute("editable") != "true")
|
||||
return;
|
||||
|
||||
// Cause the inline edit cell binding to be used.
|
||||
editCell.setAttribute("class", "treecell-indent treecell-editable");
|
||||
var editColGroup = document.getElementById("theColumns");
|
||||
var count = 0;
|
||||
var property = "";
|
||||
for (var i = 0; i < editColGroup.childNodes.length; ++i) {
|
||||
var currCol = editColGroup.childNodes[i];
|
||||
if (currCol.getAttribute("hidden") == "true")
|
||||
return;
|
||||
if (count == aCell) {
|
||||
property = currCol.getAttribute("resource");
|
||||
break;
|
||||
}
|
||||
++count;
|
||||
|
||||
// Deal with interleaved column resizer splitters
|
||||
if (currCol.nextSibling.localName == "splitter") ++i;
|
||||
}
|
||||
|
||||
if (property) {
|
||||
editCell.setMode("edit");
|
||||
editCell.addObserver(this.postModifyCallback, "accept",
|
||||
[editCell, aSelectedItem, property]);
|
||||
}
|
||||
},
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Called after an inline-edit cell has left inline-edit mode, and data
|
||||
// needs to be modified in the datasource.
|
||||
postModifyCallback: function (aParams)
|
||||
{
|
||||
var selItemURI = NODE_ID(aParams[1]);
|
||||
gBookmarksShell.propertySet(selItemURI, aParams[2], aParams[3]);
|
||||
gBookmarksShell.selectFolderItem(NODE_ID(gBookmarksShell.findRDFNode(aParams[1], false)),
|
||||
selItemURI, false);
|
||||
gBookmarksShell.tree.focus();
|
||||
gSelectionTracker.clickCount = 0;
|
||||
|
||||
// Set the cell back to use the standard treecell binding.
|
||||
var editCell = aParams[0];
|
||||
editCell.setAttribute("class", "treecell-indent");
|
||||
},
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// New Folder Creation
|
||||
// Strategy: create a dummy row with edit fields to harvest information
|
||||
// from the user, then destroy these rows and create an item
|
||||
// in its place.
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Edit folder name & update the datasource if name is valid
|
||||
onEditFolderName: function (aParams, aTopic)
|
||||
{
|
||||
var name = aParams[3];
|
||||
var shell = gBookmarksShell.commands; // suck
|
||||
var dummyItem = aParams[2];
|
||||
var relativeNode = aParams[1];
|
||||
var parentNode = relativeNode ? gBookmarksShell.findRDFNode(relativeNode, false) : gBookmarksShell.tree;
|
||||
|
||||
dummyItem.parentNode.removeChild(dummyItem);
|
||||
|
||||
if (!shell.validateNameAndTopic(name, aTopic, relativeNode, dummyItem)) {
|
||||
gBookmarksShell.tree.selectItem(relativeNode);
|
||||
gBookmarksShell.tree.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
if (relativeNode) {
|
||||
// If we're attempting to create a folder as a subfolder of an open folder,
|
||||
// we need to set the parentFolder to be relativeNode, which will be the
|
||||
// parent of the new folder, rather than the parent of the relativeNode,
|
||||
// which will result in the folder being created in an incorrect position
|
||||
// (adjacent to the relativeNode).
|
||||
var selKids = ContentUtils.childByLocalName(relativeNode, "treechildren");
|
||||
if (selKids && selKids.hasChildNodes() && selKids.lastChild == dummyItem)
|
||||
parentNode = relativeNode;
|
||||
}
|
||||
|
||||
var args = [{ property: NC_NS + "parent",
|
||||
resource: NODE_ID(parentNode) },
|
||||
{ property: NC_NS + "Name",
|
||||
literal: name }];
|
||||
|
||||
const kBMDS = gBookmarksShell.RDF.GetDataSource("rdf:bookmarks");
|
||||
kBMDS.AddObserver(newFolderRDFObserver);
|
||||
var relId = relativeNode ? NODE_ID(relativeNode) : "NC:BookmarksRoot";
|
||||
BookmarksUtils.doBookmarksCommand(relId, NC_NS_CMD + "newfolder", args);
|
||||
kBMDS.RemoveObserver(newFolderRDFObserver);
|
||||
var newFolderItem = document.getElementById(newFolderRDFObserver._newFolderURI);
|
||||
gBookmarksShell.tree.focus();
|
||||
gBookmarksShell.tree.selectItem(newFolderItem);
|
||||
// Can't use newFolderItem because it may not have been created yet. Hack, huh?
|
||||
var index = gBookmarksShell.tree.getIndexOfItem(relativeNode);
|
||||
gBookmarksShell.tree.ensureIndexIsVisible(index+1);
|
||||
gSelectionTracker.clickCount = 0;
|
||||
},
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Performs simple validation on what the user has entered:
|
||||
// 1) prevents entering an empty string
|
||||
// 2) in the case of a canceled operation, remove the dummy item and
|
||||
// restore selection.
|
||||
validateNameAndTopic: function (aName, aTopic, aOldSelectedItem, aDummyItem)
|
||||
{
|
||||
// Don't allow user to enter an empty string "";
|
||||
if (!aName) return false;
|
||||
|
||||
// If the user hit escape, go no further.
|
||||
if (aTopic == "reject") {
|
||||
if (aOldSelectedItem)
|
||||
gBookmarksShell.tree.selectItem(aOldSelectedItem);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Creates a dummy item that can be placed in edit mode to retrieve data
|
||||
// to create new bookmarks/folders.
|
||||
createBookmarkItem: function (aMode, aSelectedItem)
|
||||
{
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// HACK HACK HACK HACK HACK
|
||||
// Disable Inline-Edit for now and just use a dialog.
|
||||
|
||||
// XXX - most of this is just copy-pasted from the other two folder
|
||||
// creation functions. Yes it's ugly, but it'll do the trick for
|
||||
// now as this is in no way intended to be a long-term solution.
|
||||
|
||||
const kPromptSvcContractID = "@mozilla.org/embedcomp/prompt-service;1";
|
||||
const kPromptSvcIID = Components.interfaces.nsIPromptService;
|
||||
const kPromptSvc = Components.classes[kPromptSvcContractID].getService(kPromptSvcIID);
|
||||
|
||||
var defaultValue = gBookmarksShell.getLocaleString("ile_newfolder");
|
||||
var dialogTitle = gBookmarksShell.getLocaleString("newfolder_dialog_title");
|
||||
var dialogMsg = gBookmarksShell.getLocaleString("newfolder_dialog_msg");
|
||||
var stringValue = { value: defaultValue };
|
||||
if (kPromptSvc.prompt(window, dialogTitle, dialogMsg, stringValue, null, { value: 0 })) {
|
||||
var relativeNode = gBookmarksShell.tree;
|
||||
var parentNode;
|
||||
if (aSelectedItem && aSelectedItem.localName != "tree") {
|
||||
// By default, create adjacent to the selected item
|
||||
relativeNode = aSelectedItem;
|
||||
if (relativeNode.getAttribute("container") == "true" &&
|
||||
relativeNode.getAttribute("open") == "true") {
|
||||
// But if it's an open container, the relative node should be the last child.
|
||||
var treechildren = ContentUtils.childByLocalName(relativeNode, "treechildren");
|
||||
if (treechildren && treechildren.hasChildNodes())
|
||||
relativeNode = treechildren.lastChild; // folder non-empty, set relativeNode
|
||||
parentNode = aSelectedItem; // no matter what, folder is open, so make it parent
|
||||
} else {
|
||||
parentNode = relativeNode ? gBookmarksShell.findRDFNode(relativeNode, false) : gBookmarksShell.tree;
|
||||
}
|
||||
}
|
||||
|
||||
var args = [{ property: NC_NS + "parent",
|
||||
resource: NODE_ID(parentNode) },
|
||||
{ property: NC_NS + "Name",
|
||||
literal: stringValue.value }];
|
||||
|
||||
const kBMDS = gBookmarksShell.RDF.GetDataSource("rdf:bookmarks");
|
||||
kBMDS.AddObserver(newFolderRDFObserver);
|
||||
var relId = relativeNode ? NODE_ID(relativeNode) : "NC:BookmarksRoot";
|
||||
BookmarksUtils.doBookmarksCommand(relId, NC_NS_CMD + "newfolder", args);
|
||||
kBMDS.RemoveObserver(newFolderRDFObserver);
|
||||
var newFolderItem = document.getElementById(newFolderRDFObserver._newFolderURI);
|
||||
gBookmarksShell.tree.focus();
|
||||
gBookmarksShell.tree.selectItem(newFolderItem);
|
||||
// Can't use newFolderItem because it may not have been created yet. Hack, huh?
|
||||
var index = gBookmarksShell.tree.getIndexOfItem(relativeNode);
|
||||
gBookmarksShell.tree.ensureIndexIsVisible(index+1);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
// HACK HACK HACK HACK HACK
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/* Disable inline edit for now
|
||||
const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
var dummyItem = document.createElementNS(kXULNS, "treeitem");
|
||||
dummyItem = gBookmarksShell.createBookmarkFolderDecorations(dummyItem);
|
||||
dummyItem.setAttribute("class", "bookmark-item");
|
||||
|
||||
var dummyRow = document.createElementNS(kXULNS, "treerow");
|
||||
var dummyCell = document.createElementNS(kXULNS, "treecell");
|
||||
var dummyCell2 = document.createElementNS(kXULNS, "treecell");
|
||||
dummyCell.setAttribute("label", gBookmarksShell.getLocaleString("ile_newfolder") + " ");
|
||||
dummyCell.setAttribute("type", NC_NS + "Folder");
|
||||
dummyCell.setAttribute("editable", "true");
|
||||
dummyCell.setAttribute("class", "treecell-indent treecell-editable");
|
||||
dummyRow.appendChild(dummyCell);
|
||||
dummyItem.appendChild(dummyRow);
|
||||
|
||||
var relativeNode = null;
|
||||
|
||||
// If there are selected items, try to create the dummy item relative to the
|
||||
// best item, and position the bookmark there when created. Otherwise just
|
||||
// append to the root.
|
||||
if (aSelectedItem && aSelectedItem.localName != "tree") {
|
||||
// By default, create adjacent to the selected item
|
||||
relativeNode = aSelectedItem;
|
||||
if (relativeNode.getAttribute("container") == "true" &&
|
||||
relativeNode.getAttribute("open") == "true") {
|
||||
// But if it's an open container, the relative node should be the last child.
|
||||
var treechildren = ContentUtils.childByLocalName(relativeNode, "treechildren");
|
||||
if (treechildren && treechildren.hasChildNodes())
|
||||
relativeNode = treechildren.lastChild;
|
||||
}
|
||||
|
||||
if (aSelectedItem.getAttribute("container") == "true") {
|
||||
if (aSelectedItem.getAttribute("open") == "true") {
|
||||
var treechildren = ContentUtils.childByLocalName(aSelectedItem, "treechildren");
|
||||
if (!treechildren) {
|
||||
treechildren = document.createElementNS(kXULNS, "treechildren");
|
||||
aSelectedItem.appendChild(treechildren);
|
||||
}
|
||||
// Insert new item after last item.
|
||||
treechildren.appendChild(dummyItem);
|
||||
}
|
||||
else {
|
||||
if (aSelectedItem.nextSibling)
|
||||
aSelectedItem.parentNode.insertBefore(dummyItem, aSelectedItem.nextSibling);
|
||||
else
|
||||
aSelectedItem.parentNode.appendChild(dummyItem);
|
||||
}
|
||||
var index = gBookmarksShell.tree.getIndexOfItem(dummyItem);
|
||||
gBookmarksShell.tree.ensureIndexIsVisible(index);
|
||||
}
|
||||
else {
|
||||
if (aSelectedItem.nextSibling)
|
||||
aSelectedItem.parentNode.insertBefore(dummyItem, aSelectedItem.nextSibling);
|
||||
else
|
||||
aSelectedItem.parentNode.appendChild(dummyItem);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// No items in the tree. Append to the root.
|
||||
var rootKids = document.getElementById("treechildren-bookmarks");
|
||||
rootKids.appendChild(dummyItem);
|
||||
}
|
||||
|
||||
dummyCell.setMode("edit");
|
||||
dummyCell.addObserver(this.onEditFolderName, "accept", [dummyCell, relativeNode, dummyItem]);
|
||||
dummyCell.addObserver(this.onEditFolderName, "reject", [dummyCell, relativeNode, dummyItem]);
|
||||
*/
|
||||
}
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Evaluates an event to determine whether or not it affords opening a tree
|
||||
// item. Typically, this is when the left mouse button is used, and provided
|
||||
// the click-rate matches that specified by our owning tree class. For example,
|
||||
// some trees open an item when double clicked (bookmarks/history windows) and
|
||||
// others on a single click (sidebar panels).
|
||||
isValidOpenEvent: function (aEvent)
|
||||
{
|
||||
return !(aEvent.type == "click" &&
|
||||
(aEvent.button != 0 || aEvent.detail != this.openClickCount))
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// For the given selection, selects the best adjacent element. This method is
|
||||
// useful when an action such as a cut or a deletion is performed on a
|
||||
// selection, and focus/selection needs to be restored after the operation
|
||||
// is performed.
|
||||
getNextElement: function (aElement)
|
||||
{
|
||||
if (aElement.nextSibling)
|
||||
return aElement.nextSibling;
|
||||
else if (aElement.previousSibling)
|
||||
return aElement.previousSibling;
|
||||
else
|
||||
return aElement.parentNode.parentNode;
|
||||
},
|
||||
|
||||
selectElement: function (aElement)
|
||||
{
|
||||
this.tree.selectItem(aElement);
|
||||
},
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Add the treeitem element specified by aURI to the tree's current selection.
|
||||
addItemToSelection: function (aURI)
|
||||
{
|
||||
var item = document.getElementById(aURI) // XXX flawed for multiple ids
|
||||
this.tree.addItemToSelection(item);
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Return a set of DOM nodes that represent the selection in the tree widget.
|
||||
// This method is takes a node parameter which is the popupNode for the
|
||||
// document. If the popupNode is not contained by the selection, the
|
||||
// popupNode is selected and the new selection returned.
|
||||
getSelection: function ()
|
||||
{
|
||||
// Note that we don't just the selectedItems NodeList here because that
|
||||
// is a reference to a LIVE DOM NODE LIST. We want to maintain control
|
||||
// over what is in the selection array ourselves.
|
||||
return [].concat(this.tree.selectedItems);
|
||||
},
|
||||
|
||||
getBestItem: function ()
|
||||
{
|
||||
var seln = this.getSelection ();
|
||||
if (seln.length < 1) {
|
||||
var kids = ContentUtils.childByLocalName(this.tree, "treechildren");
|
||||
return kids.lastChild || this.tree;
|
||||
}
|
||||
else
|
||||
return seln[0];
|
||||
return this.tree;
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Return a set of DOM nodes that represent the selection in the tree widget.
|
||||
// This method is takes a node parameter which is the popupNode for the
|
||||
// document. If the popupNode is not contained by the selection, the
|
||||
// popupNode is selected and the new selection returned.
|
||||
getContextSelection: function (aItemNode)
|
||||
{
|
||||
// How a context-click works:
|
||||
// if the popup node is contained by the selection, the context menu is
|
||||
// built for that selection. However, if the popup node is invoked on a
|
||||
// non-selected node, unless modifiers are pressed**, the previous
|
||||
// selection is discarded and that node selected.
|
||||
var selectedItems = this.tree.selectedItems;
|
||||
for (var i = 0; i < selectedItems.length; ++i) {
|
||||
if (selectedItems[i] == aItemNode)
|
||||
return selectedItems;
|
||||
}
|
||||
if (aItemNode.localName == "treeitem")
|
||||
this.tree.selectItem(aItemNode);
|
||||
return this.tree.selectedItems.length ? this.tree.selectedItems : [this.tree];
|
||||
},
|
||||
|
||||
getSelectedFolder: function ()
|
||||
{
|
||||
var selectedItem = this.getBestItem();
|
||||
if (!selectedItem) return "NC:BookmarksRoot";
|
||||
while (selectedItem && selectedItem.nodeType == Node.ELEMENT_NODE) {
|
||||
if (selectedItem.getAttribute("container") == "true" &&
|
||||
selectedItem.getAttribute("open") == "true")
|
||||
return NODE_ID(selectedItem);
|
||||
selectedItem = selectedItem.parentNode.parentNode;
|
||||
}
|
||||
return "NC:BookmarksRoot";
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// For a given start DOM element, find the enclosing DOM element that contains
|
||||
// the template builder RDF resource decorations (id, ref, etc).
|
||||
findRDFNode: function (aStartNode, aIncludeStartNodeFlag)
|
||||
{
|
||||
var temp = aIncludeStartNodeFlag ? aStartNode : aStartNode.parentNode;
|
||||
while (temp && temp.localName != "treeitem")
|
||||
temp = temp.parentNode;
|
||||
return temp || this.tree;
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Tree click events. This handles when to go into inline-edit mode for
|
||||
// editable cells.
|
||||
treeClicked: function (aEvent)
|
||||
{
|
||||
// We are disabling Inline Edit for now. It's too buggy in the old XUL tree widget.
|
||||
// A more solid implementation will follow the conversion to tree
|
||||
/*
|
||||
if (this.tree.selectedItems.length > 1 || aEvent.detail > 1 || aEvent.button != 0) {
|
||||
gSelectionTracker.clickCount = 0;
|
||||
return;
|
||||
}
|
||||
if (gSelectionTracker.currentItem == this.tree.currentItem &&
|
||||
gSelectionTracker.currentCell == aEvent.target)
|
||||
++gSelectionTracker.clickCount;
|
||||
else
|
||||
gSelectionTracker.clickCount = 0;
|
||||
|
||||
if (!this.tree.currentItem)
|
||||
return;
|
||||
|
||||
gSelectionTracker.currentItem = this.tree.currentItem;
|
||||
gSelectionTracker.currentCell = aEvent.target;
|
||||
|
||||
if (gSelectionTracker.currentItem.getAttribute("type") != NC_NS + "Bookmark" &&
|
||||
gSelectionTracker.currentItem.getAttribute("type") != NC_NS + "Folder")
|
||||
return;
|
||||
|
||||
var row = gSelectionTracker.currentItem.firstChild;
|
||||
if (row) {
|
||||
for (var i = 0; i < row.childNodes.length; ++i) {
|
||||
if (row.childNodes[i] == gSelectionTracker.currentCell) {
|
||||
// Don't allow inline-edit of cells other than name for folders.
|
||||
// XXX - so so skeezy. Change this to look for NC:Name or some such.
|
||||
if (gSelectionTracker.currentItem.getAttribute("type") != NC_NS + "Bookmark" && i)
|
||||
return;
|
||||
// Don't allow editing of the root folder name
|
||||
if (gSelectionTracker.currentItem.id == "NC:BookmarksRoot")
|
||||
return;
|
||||
if (gSelectionTracker.clickCount == 1 && this.openClickCount > 1)
|
||||
gBookmarksShell.commands.editCell(this.tree.currentItem, i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
},
|
||||
|
||||
treeOpen: function (aEvent)
|
||||
{
|
||||
if (this.isValidOpenEvent(aEvent)) {
|
||||
var rdfNode = this.findRDFNode(aEvent.target, true);
|
||||
if (rdfNode.getAttribute("container") != "true")
|
||||
this.open(aEvent, rdfNode);
|
||||
}
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Tree key events. This handles when to go into inline-edit mode for editable
|
||||
// cells, when to load a URL, etc.
|
||||
treeKeyPress: function (aEvent)
|
||||
{
|
||||
if (this.tree.selectedItems.length > 1) return;
|
||||
|
||||
/* Disabling Inline Edit
|
||||
if (aEvent.keyCode == 113 && aEvent.shiftKey) {
|
||||
const kNodeId = NODE_ID(this.tree.currentItem);
|
||||
if (this.resolveType(kNodeId) == NC_NS + "Bookmark")
|
||||
gBookmarksShell.commands.editCell (this.tree.currentItem, 1);
|
||||
}
|
||||
else */
|
||||
if (aEvent.keyCode == 113)
|
||||
goDoCommand("cmd_rename");
|
||||
else if (aEvent.keyCode == 13) // && this.tree.currentItem.firstChild.getAttribute("inline-edit") != "true")
|
||||
goDoCommand(aEvent.altKey ? "cmd_properties" : "cmd_open");
|
||||
},
|
||||
|
||||
selectFolderItem: function (aFolderURI, aItemURI, aAdditiveFlag)
|
||||
{
|
||||
var folder = document.getElementById(aFolderURI);
|
||||
var kids = ContentUtils.childByLocalName(folder, "treechildren");
|
||||
if (!kids) return;
|
||||
|
||||
var item = kids.firstChild;
|
||||
while (item) {
|
||||
if (item.id == aItemURI) break;
|
||||
item = item.nextSibling;
|
||||
}
|
||||
if (!item) return;
|
||||
|
||||
this.tree[aAdditiveFlag ? "addItemToSelection" : "selectItem"](item);
|
||||
},
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Command handling & Updating.
|
||||
controller: {
|
||||
supportsCommand: function (aCommand)
|
||||
{
|
||||
switch(aCommand) {
|
||||
case "cmd_undo":
|
||||
case "cmd_redo":
|
||||
return false;
|
||||
case "cmd_bm_cut":
|
||||
case "cmd_bm_copy":
|
||||
case "cmd_bm_paste":
|
||||
case "cmd_bm_delete":
|
||||
case "cmd_bm_selectAll":
|
||||
return true;
|
||||
case "cmd_open":
|
||||
case "cmd_openfolder":
|
||||
case "cmd_openfolderinnewwindow":
|
||||
case "cmd_newbookmark":
|
||||
case "cmd_newfolder":
|
||||
case "cmd_newseparator":
|
||||
case "cmd_find":
|
||||
case "cmd_properties":
|
||||
case "cmd_rename":
|
||||
case "cmd_setnewbookmarkfolder":
|
||||
case "cmd_setpersonaltoolbarfolder":
|
||||
case "cmd_setnewsearchfolder":
|
||||
case "cmd_import":
|
||||
case "cmd_export":
|
||||
case "cmd_bm_fileBookmark":
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
isCommandEnabled: function (aCommand)
|
||||
{
|
||||
var numSelectedItems = gBookmarksShell.tree.selectedItems.length;
|
||||
var seln, firstSelected, folderType, bItemCountCorrect;
|
||||
switch(aCommand) {
|
||||
case "cmd_undo":
|
||||
case "cmd_redo":
|
||||
return false;
|
||||
case "cmd_bm_paste":
|
||||
return gBookmarksShell.canPaste();
|
||||
case "cmd_bm_cut":
|
||||
case "cmd_bm_copy":
|
||||
case "cmd_bm_delete":
|
||||
return numSelectedItems >= 1;
|
||||
case "cmd_bm_selectAll":
|
||||
return true;
|
||||
case "cmd_open":
|
||||
seln = gBookmarksShell.tree.selectedItems;
|
||||
return numSelectedItems == 1 && seln[0].getAttribute("type") == NC_NS + "Bookmark";
|
||||
case "cmd_openfolder":
|
||||
case "cmd_openfolderinnewwindow":
|
||||
seln = gBookmarksShell.tree.selectedItems;
|
||||
return numSelectedItems == 1 && seln[0].getAttribute("type") == NC_NS + "Folder";
|
||||
case "cmd_find":
|
||||
case "cmd_newbookmark":
|
||||
case "cmd_newfolder":
|
||||
case "cmd_newseparator":
|
||||
case "cmd_import":
|
||||
case "cmd_export":
|
||||
return true;
|
||||
case "cmd_properties":
|
||||
case "cmd_rename":
|
||||
seln = gBookmarksShell.tree.selectedItems;
|
||||
return numSelectedItems == 1 && seln[0].getAttribute("type") != NC_NS + "BookmarkSeparator";
|
||||
case "cmd_setnewbookmarkfolder":
|
||||
seln = gBookmarksShell.tree.selectedItems;
|
||||
firstSelected = seln.length ? seln[0] : gBookmarksShell.tree;
|
||||
folderType = firstSelected.getAttribute("type") == (NC_NS + "Folder");
|
||||
bItemCountCorrect = seln.length ? numSelectedItems == 1 : true;
|
||||
return bItemCountCorrect && !(NODE_ID(firstSelected) == "NC:NewBookmarkFolder") && folderType;
|
||||
case "cmd_setpersonaltoolbarfolder":
|
||||
seln = gBookmarksShell.tree.selectedItems;
|
||||
firstSelected = seln.length ? seln[0] : gBookmarksShell.tree;
|
||||
folderType = firstSelected.getAttribute("type") == (NC_NS + "Folder");
|
||||
bItemCountCorrect = seln.length ? numSelectedItems == 1 : true;
|
||||
return bItemCountCorrect && !(NODE_ID(firstSelected) == "NC:PersonalToolbarFolder") && folderType;
|
||||
case "cmd_setnewsearchfolder":
|
||||
seln = gBookmarksShell.tree.selectedItems;
|
||||
firstSelected = seln.length ? seln[0] : gBookmarksShell.tree;
|
||||
folderType = firstSelected.getAttribute("type") == (NC_NS + "Folder");
|
||||
bItemCountCorrect = seln.length ? numSelectedItems == 1 : true;
|
||||
return bItemCountCorrect == 1 && !(NODE_ID(firstSelected) == "NC:NewSearchFolder") && folderType;
|
||||
case "cmd_bm_fileBookmark":
|
||||
seln = gBookmarksShell.tree.selectedItems;
|
||||
return seln.length > 0;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
doCommand: function (aCommand)
|
||||
{
|
||||
switch(aCommand) {
|
||||
case "cmd_undo":
|
||||
case "cmd_redo":
|
||||
break;
|
||||
case "cmd_bm_paste":
|
||||
case "cmd_bm_copy":
|
||||
case "cmd_bm_cut":
|
||||
case "cmd_bm_delete":
|
||||
case "cmd_newbookmark":
|
||||
case "cmd_newfolder":
|
||||
case "cmd_newseparator":
|
||||
case "cmd_properties":
|
||||
case "cmd_rename":
|
||||
case "cmd_open":
|
||||
case "cmd_openfolder":
|
||||
case "cmd_openfolderinnewwindow":
|
||||
case "cmd_setnewbookmarkfolder":
|
||||
case "cmd_setpersonaltoolbarfolder":
|
||||
case "cmd_setnewsearchfolder":
|
||||
case "cmd_find":
|
||||
case "cmd_import":
|
||||
case "cmd_export":
|
||||
case "cmd_bm_fileBookmark":
|
||||
gBookmarksShell.execCommand(aCommand.substring("cmd_".length));
|
||||
break;
|
||||
case "cmd_bm_selectAll":
|
||||
gBookmarksShell.tree.selectAll();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
onEvent: function (aEvent)
|
||||
{
|
||||
switch (aEvent) {
|
||||
case "tree-select":
|
||||
this.onCommandUpdate();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
onCommandUpdate: function ()
|
||||
{
|
||||
var commands = ["cmd_properties", "cmd_rename", "cmd_bm_copy",
|
||||
"cmd_bm_paste", "cmd_bm_cut", "cmd_bm_delete",
|
||||
"cmd_setpersonaltoolbarfolder",
|
||||
"cmd_setnewbookmarkfolder",
|
||||
"cmd_setnewsearchfolder", "cmd_bm_fileBookmark",
|
||||
"cmd_openfolderinnewwindow", "cmd_openfolder"];
|
||||
for (var i = 0; i < commands.length; ++i)
|
||||
goUpdateCommand(commands[i]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var newFolderRDFObserver = {
|
||||
_newFolderURI: null,
|
||||
onAssert: function (aDS, aSource, aProperty, aValue)
|
||||
{
|
||||
try {
|
||||
var value = aValue.QueryInterface(Components.interfaces.nsIRDFResource);
|
||||
if (aDS.URI == "rdf:bookmarks" && aProperty.Value == RDF_NS + "type" &&
|
||||
value.Value == NC_NS + "Folder")
|
||||
this._newFolderURI = aSource.Value;
|
||||
}
|
||||
catch (e) {
|
||||
// Failures are OK, the value could be a literal instead of a resource.
|
||||
}
|
||||
},
|
||||
|
||||
onUnassert: function (aDS, aSource, aProperty, aTarget) { },
|
||||
onChange: function (aDS, aSource, aProperty, aOldTarget, aNewTarget) { },
|
||||
onMove: function (aDS, aOldSource, aNewSource, aProperty, aTarget) { },
|
||||
beginUpdateBatch: function (aDS) { },
|
||||
endUpdateBatch: function (aDS) { }
|
||||
};
|
||||
|
||||
97
mozilla/xpfe/components/bookmarks/resources/findBookmark.js
Normal file
@@ -0,0 +1,97 @@
|
||||
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape Public License
|
||||
* Version 1.1 (the "License"); you may not use this file except in
|
||||
* compliance with the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/NPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is mozilla.org code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Netscape Communications Corporation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 1998
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Ben Goodger <ben@netscape.com> (Original Author)
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the NPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
const BMARKS_CONTRACTID = "@mozilla.org/browser/bookmarks-service;1";
|
||||
const nsIBookmarksService = Components.interfaces.nsIBookmarksService;
|
||||
|
||||
var gOKButton;
|
||||
var gSearchField;
|
||||
function Startup()
|
||||
{
|
||||
var bundle = document.getElementById("bookmarksBundle");
|
||||
gOKButton = document.documentElement.getButton("accept");
|
||||
gOKButton.label = bundle.getString("search_button_label");
|
||||
gOKButton.disabled = true;
|
||||
gSearchField = document.getElementById("searchField");
|
||||
gSearchField.focus();
|
||||
}
|
||||
var gCreatingNewWindow = false;
|
||||
function find()
|
||||
{
|
||||
// Build up a find URI from the search fields and open a new window
|
||||
// rooted on the URI.
|
||||
var match = document.getElementById("matchList");
|
||||
var method = document.getElementById("methodList");
|
||||
var searchURI = "find:datasource=rdf:bookmarks"
|
||||
searchURI += "&match=" + match.selectedItem.value;
|
||||
searchURI += "&method=" + method.selectedItem.value;
|
||||
searchURI += "&text=" + escape(gSearchField.value);
|
||||
var bmWindow = findMostRecentWindow("bookmarks:searchresults", "chrome://communicator/content/bookmarks/bookmarks.xul", searchURI);
|
||||
|
||||
// Update the root of the tree if we're using an existing search window.
|
||||
if (!gCreatingNewWindow)
|
||||
bmWindow.document.getElementById("bookmarks-view").tree.setAttribute("ref", searchURI);
|
||||
|
||||
bmWindow.focus();
|
||||
|
||||
if (document.getElementById("saveQuery").checked == true)
|
||||
{
|
||||
var bundle = document.getElementById("bookmarksBundle");
|
||||
var findTitle = bundle.stringBundle.formatStringFromName(
|
||||
"ShortFindTitle", [gSearchField.value], 1);
|
||||
var bmks = Components.classes[BMARKS_CONTRACTID].getService(nsIBookmarksService);
|
||||
bmks.addBookmarkImmediately(searchURI, findTitle, bmks.BOOKMARK_FIND_TYPE, null);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function findMostRecentWindow(aType, aURI, aParam)
|
||||
{
|
||||
var WM = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService();
|
||||
WM = WM.QueryInterface(Components.interfaces.nsIWindowMediator);
|
||||
var topWindow = WM.getMostRecentWindow(aType);
|
||||
if (!topWindow) gCreatingNewWindow = true;
|
||||
return topWindow || openDialog("chrome://communicator/content/bookmarks/bookmarks.xul",
|
||||
"", "chrome,all,dialog=no", aParam);
|
||||
}
|
||||
|
||||
function doEnabling()
|
||||
{
|
||||
gOKButton.disabled = !gSearchField.value;
|
||||
}
|
||||