Compare commits

..

3 Commits

Author SHA1 Message Date
(no author)
8fc2f51240 This commit was manufactured by cvs2svn to create tag 'start'.
git-svn-id: svn://10.0.0.236/tags/start@207394 18797224-902f-48f8-a5cc-f745e15eee43
2006-08-14 23:54:59 +00:00
uid815
5ddee5efc0 Initial import
git-svn-id: svn://10.0.0.236/branches/v1@198340 18797224-902f-48f8-a5cc-f745e15eee43
2006-05-24 19:14:24 +00:00
(no author)
f46176d6f2 This commit was manufactured by cvs2svn to create branch 'v1'.
git-svn-id: svn://10.0.0.236/branches/v1@149977 18797224-902f-48f8-a5cc-f745e15eee43
2003-12-03 07:50:06 +00:00
718 changed files with 57342 additions and 11587 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,282 @@
#!/usr/bin/perl -w
#############################################################################
# $Id: BB_main.pl,v 1.1.1.1 2000-10-23 20:08:03 kevin%perldap.org Exp $
#
# BB_main.pl
#
# This is the main control program for the Burst Billing process
# It:
# 1) Checks the directory setup and permissions.
# 2) Archives the log file for the current project.
# 3) Launches the Burst Billing program
# 4) Runs the monitor program.
#
# I broke the burst billing and monitor programs out into seperate programs.
# This is to handle the event where the burst billing program die's, aborts,
# crashes, or whatever - so the main program can run the monitor program afterwards.
# Yeah yeah, the main program might crash too, but what can I do...
#
# History:
# Kevin J. McCarthy [10/17/2000] Original Coding
#
#############################################################################
use strict;
BEGIN {require '../inc/BB_include.pl';}
require "$INC_DIR/BB_lib.pl";
##############
# Begin Code #
##############
&init_program();
&run_burst_billing();
&run_monitor();
&cleanup_program();
###################
# Local Functions #
###################
########################################
# init_program
#
# Does program initializations, such as:
# - Checking directory permissions
# - Archiving the log file
# - Opening the new log file
########################################
sub init_program
{
&check_if_running();
&check_directories();
&check_files();
&archive_log_file();
&open_log_file();
&write_log_file($START_STAMP, "BB_main.pl started");
}
##########################################################################
# check_if_running
#
# Checks to see if another copy of the program is running. This is
# indicated by the presence of the $IN_PROGRESS_FILE
# If it is, the program aborts.
#
# If it isn't:
# 1) The $IN_PROGRESS_FILE is created.
# 2) An END routine which removes the $IN_PROGRESS_FILE is evaled. I need
# to eval this AFTER the check for the file, otherwise I will remove
# the $IN_PROGRESS_FILE for the other program!
# Note that this function is not used for contention issues - I'm
# fully of aware of the test-and-set race condition.
##########################################################################
sub check_if_running
{
my ($ip_fh);
if ( -f $IN_PROGRESS_FILE )
{
print STDERR "Another copy of BB_main.pl is currently running\n",
"If this is not the case, please remove the ",
"$IN_PROGRESS_FILE file and rerun the program.\n",
"Aboring program\n";
exit($ERROR_CRITICAL);
}
$ip_fh = new IO::File ">$IN_PROGRESS_FILE";
$ip_fh->close();
eval 'END { &remove_running_file(); }';
}
################################################################
# check_directories
#
# Basic sanity check, to make sure all the directories exist and
# are writable by this process
################################################################
sub check_directories
{
my ($directory);
foreach $directory ( $BILLING_HOME, $REPORT_HOME, $LOG_DIR, $LOG_ARCHIVE_DIR,
$RRD_DIR, $BIN_DIR, $INC_DIR )
{
if ( ! -d $directory )
{
print STDERR "ERROR: $directory is not a directory\n",
"Aborting program\n";
exit($ERROR_CRITICAL);
}
}
foreach $directory ( $BILLING_HOME, $REPORT_HOME, $LOG_DIR,
$LOG_ARCHIVE_DIR )
{
if ( ! -w $directory )
{
print STDERR "ERROR: $directory is not writable\n",
"Aborting program\n";
exit($ERROR_CRITICAL);
}
}
}
################################################################
# check_files
#
# Basic sanity check, to make sure all the programs and files exist
# before launching sub-process
################################################################
sub check_files
{
my ($file);
foreach $file ( $BURST_ACCOUNTS_FILE )
{
if ( ! -e $file )
{
print STDERR "ERROR: $file does not exist\n.",
"Aborting program\n";
exit($ERROR_CRITICAL);
}
elsif ( ! -r $file )
{
print STDERR "ERROR: $file is not readable.\n",
"Aborting program\n";
exit($ERROR_CRITICAL);
}
}
foreach $file ( $BILLING_MODULE, $MONITOR_MODULE )
{
if ( ! -e "$BIN_DIR/$file" )
{
print STDERR "ERROR: $BIN_DIR/$file does not exist.\n",
"Aborting program\n";
exit($ERROR_CRITICAL);
}
if ( (! -r "$BIN_DIR/$file") || (! -x "$BIN_DIR/$file") )
{
print STDERR "ERROR: $BIN_DIR/$file is not runnable.\n",
"Aborting program\n";
exit($ERROR_CRITICAL);
}
}
}
##############################################################
# archive_log_file
#
# This copies the previous log file into the archive directory
# and then cleans up the archive directory.
##############################################################
sub archive_log_file
{
if ( &archive_file($LOG_DIR, $LOG_FILE, $LOG_ARCHIVE_DIR, $LOG_FILE, 0) != $OKAY )
{
print STDERR "Error archiving log file\n";
}
&purge_old_archives($LOG_ARCHIVE_DIR, $MAX_LOG_ARCHIVE_FILES, $LOG_FILE);
}
#####################################################################
# run_boss_loader
#
# This function executes the burst_billing program
# programs, checks the return codes, and handles errors.
#####################################################################
sub run_burst_billing
{
my ($retcode);
&write_log_file($LOG_INFO, "BB_main.pl starting to run $BILLING_MODULE");
&close_log_file();
$retcode = system("$BIN_DIR/$BILLING_MODULE");
$retcode >>= 8;
&open_log_file();
&write_log_file($LOG_INFO, "$BILLING_MODULE returned exit code $retcode");
if ( ($retcode != $OKAY) &&
($retcode != $ERROR_WARNING) )
{
&write_log_file($LOG_ERROR, "$BILLING_MODULE had some sort of error");
}
return($retcode);
}
#########################################################################
# run_monitor
#
# Runs the monitor module.
#########################################################################
sub run_monitor
{
my ($retcode);
&write_log_file($LOG_INFO, "BB_main.pl starting to run $MONITOR_MODULE");
&close_log_file();
$retcode = system("$BIN_DIR/$MONITOR_MODULE");
$retcode >>= 8;
&open_log_file();
&write_log_file($LOG_INFO, "$MONITOR_MODULE returned exit code $retcode");
if ( ($retcode != $OKAY) &&
($retcode != $ERROR_WARNING) )
{
&write_log_file($LOG_ERROR, "$MONITOR_MODULE had some sort of error");
}
return($retcode);
}
#####################################################
# cleanup_program
#
# Perform final cleanup before the program terminates
#####################################################
sub cleanup_program
{
&write_log_file($END_STAMP, "BOSS_main.pl ended");
&close_log_file();
}
##########################################################################
# remove_running_file
#
# Removes the $IN_PROGRESS_FILE, just before the program exits. Note that
# this function is called by the END{} routine, which runs just as the
# perl interpreter exits. In this way, I don't have to worry about
# something die()ing and not cleaning up this file.
##########################################################################
sub remove_running_file
{
unlink $IN_PROGRESS_FILE;
}

View File

@@ -0,0 +1,161 @@
#!/usr/bin/perl
#############################################################################
# $Id: BB_monitor.pl,v 1.1.1.1 2000-10-23 20:08:03 kevin%perldap.org Exp $
#
# BB_monitor.pl
#
# History:
# Kevin J. McCarthy [10/17/2000] Original Coding
#
#############################################################################
#
# Not using strict so I can play namespace games
# Not using warnings because the Mail and Net modules suck.
#
use IO::File;
#
# I'm not using Mail::Send becuase the current implementation has a bug
# with multiple recipients - sent a patch to Graham.
#
use Mail::Mailer;
#
# Have to 'use' this here so I can overwrite the
# $Net::SMTP::NetConfig{'smtp_hosts'} = [$MAIL_HOST];
#
use Net::SMTP;
BEGIN {require '../inc/BB_include.pl';}
require "$INC_DIR/BB_lib.pl";
###########
# Globals #
###########
my $errors = 0;
my $warnings = 0;
##############
# Begin Code #
##############
&init_program();
&scan_log_file();
# if ( $errors || $warnings )
&send_email();
exit($OKAY);
###################
# Local Functions #
###################
#####################################################################
# init_program
#
# Sets the smtp server to use and the mail from address.
# Closes STDOUT and STDERR to prevent junk messages from STMP modules
#####################################################################
sub init_program
{
#
# Set the SMTP server to use.
# This is cheating, but it works.
#
$Net::SMTP::NetConfig{'smtp_hosts'} = $MAIL_HOSTS;
#
# Set the from address
#
$ENV{'MAILADDRESS'} = $MAIL_FROM;
#
# Unfortunately, the SMTP modules are noisy in the case of errors.
#
close(STDOUT);
close(STDERR);
}
###########################################################
# scan_log_file
#
# Records the number of errors and warnings in the log file
###########################################################
sub scan_log_file
{
my ($log_fh, $log_line);
$log_fh = new IO::File "<$LOG_DIR/$LOG_FILE";
return if ( ! $log_fh );
while ( defined($log_line = <$log_fh>) )
{
$errors++ if ( $log_line =~ /^\s*$LOG_ERROR/o );
$warnings++ if ( $log_line =~ /^\s*$LOG_WARNING/o );
}
$log_fh->close();
}
#############################
# send_email
#
# Sends out the summary email
#############################
sub send_email
{
my ($mailer, $timestamp);
my ($log_fh, $log_line);
$timestamp = &get_time_stamp();
$mailer = new Mail::Mailer('smtp');
if ( ! $mailer )
{
exit($ERROR_CRITICAL);
}
eval {$mailer->open({
'To' => $ERROR_MAIL_TO,
'Subject' => "Burst Billing summary for $timestamp",
});
};
if ( $@ )
{
exit($ERROR_CRITICAL);
}
print $mailer "Burst Billing summary for $timestamp\n\n";
print $mailer "ERRORS: $errors\n";
print $mailer "WARNINGS: $warnings\n";
print $mailer "Contents of log file:\n\n";
$log_fh = new IO::File "<$LOG_DIR/$LOG_FILE";
if ( $log_fh )
{
while ( defined($log_line = <$log_fh>) )
{
if ( ($log_line =~ /^\s*$START_STAMP/o) ||
($log_line =~ /^\s*$END_STAMP/o) ||
($log_line =~ /^\s*$LOG_INFO/o) ||
($log_line =~ /^\s*$LOG_WARNING/o) ||
($log_line =~ /^\s*$LOG_ERROR/o) ||
($log_line eq "\n") )
{
print $mailer $log_line;
}
}
$log_fh->close();
}
$mailer->close();
}

View File

@@ -0,0 +1,188 @@
#!/usr/bin/perl -w
###########################################################################
# $Id: BB_include.pl,v 1.1.1.1 2000-10-23 20:08:18 kevin%perldap.org Exp $
#
# BB_include.pl
#
# This include file contains global variables used across programs.
#
# History:
# Kevin J. McCarthy [10/17/2000] Original Coding
###########################################################################
use strict;
######################################################################
# Set this variable to 1 only if the failsafe triggers, to temporarily
# override it.
# TODO: command line switch to over-ride.
######################################################################
use vars qw{$FAILSAFE_OVERRIDE};
$FAILSAFE_OVERRIDE = 0;
# $FAILSAFE_OVERRIDE = 1;
#####################################################################
# This controls the maximum number of days we will attempt to recover
# data for.
#####################################################################
use vars qw($MAX_RECOVER_DAYS);
$MAX_RECOVER_DAYS = 500;
###############
# Directories #
###############
use vars qw{$BILLING_HOME $RRD_DIR $REPORT_HOME $LOG_DIR $LOG_ARCHIVE_DIR
$BIN_DIR $INC_DIR};
#$BILLING_HOME = "/usr/local/root/apache/cgi-bin/Burstable";
$BILLING_HOME = "/home/kevinmc/excite/burst_billing/code";
$RRD_DIR = "/usr/local/nme/polling/www";
$REPORT_HOME = "$BILLING_HOME/data";
$LOG_DIR = "$BILLING_HOME/log";
$LOG_ARCHIVE_DIR = "$LOG_DIR/archive";
$BIN_DIR = "$BILLING_HOME/bin";
$INC_DIR = "$BILLING_HOME/inc";
##############
# File Names #
##############
use vars qw{$BURST_ACCOUNTS_FILE $LOG_FILE $LAST_RUN_FILE $IN_DATA_FILE $OUT_DATA_FILE
$CIRCUIT_HEADER_FILE $IN_PROGRESS_FILE $REPORT_FILE};
$BURST_ACCOUNTS_FILE = "$INC_DIR/burst_accounts.txt";
$LOG_FILE = "log";
$LAST_RUN_FILE = "lastrun.txt";
#
# Network data is dumped to these files
#
$IN_DATA_FILE = "in.log";
$OUT_DATA_FILE = "out.log";
#
# This contains information about the circuit
#
$CIRCUIT_HEADER_FILE = "header.txt";
#
# This file is used to mark when this program is running. We don't
# want to allow to loads to take place at the same time
#
$IN_PROGRESS_FILE = "$BILLING_HOME/.running";
#
# The monthly 95/5 report
#
$REPORT_FILE = "95_5_report.xls";
############
# Programs #
############
use vars qw{$BILLING_MODULE $MONITOR_MODULE};
$BILLING_MODULE = "BB_billing.pl";
$MONITOR_MODULE = "BB_monitor.pl";
##################
# Log File Codes #
##################
use vars qw{$START_STAMP $END_STAMP $LOG_NOTE $LOG_INFO $LOG_WARNING
$LOG_ERROR};
$START_STAMP = "START_STAMP";
$END_STAMP = "END_STAMP";
$LOG_NOTE = "NOTE";
#
# Info error messages get included in the monitor email. Note messages don't
#
$LOG_INFO = "INFO";
$LOG_WARNING = "WARNING";
$LOG_ERROR = "ERROR";
#################################################
# Number of archives to keep for each directory #
#################################################
use vars qw{$MAX_LOG_ARCHIVE_FILES};
$MAX_LOG_ARCHIVE_FILES = 10000;
###############
# Error Codes #
###############
use vars qw{$OKAY $ERROR_WARNING $ERROR_CRITICAL};
$OKAY = 0;
$ERROR_WARNING = 1;
$ERROR_CRITICAL = 2;
#################
# Email Setting #
#################
use vars qw{$MAIL_HOSTS $MAIL_FROM $ERROR_MAIL_TO $REPORT_MAIL_TO};
$MAIL_HOSTS = ['localhost',
'mail.excitehome.net'];
$MAIL_FROM = 'burstbilling@excitehome.net';
$ERROR_MAIL_TO = ['mccarthy@excitehome.net',
'tunacat@yahoo.com',
# 'michael@excitehome.net',
];
# $REPORT_MAIL_TO = 'burstbilling@excitehome.net';
$REPORT_MAIL_TO = 'mccarthy@excitehome.net';
#####################
# Data Error Checking
#####################
use vars qw{$MAX_ZERO_DATA_PERCENT $MAX_NAN_DATA_PERCENT $MIN_RRD_STEP_SIZE};
#
# Maximum percentage of 0's to put up with in the data before I log an error
# Use values from 0 - 100
#
$MAX_ZERO_DATA_PERCENT = 50;
#
# Maximum percentage of NaN's to put up with in the data before I log an error
# Use values from 0 - 100
#
$MAX_NAN_DATA_PERCENT = 0;
#
# This is the smallest step size returned by the RRDs - equal to a 5 minute
# granularity.
#
$MIN_RRD_STEP_SIZE = 300;
###############################
# Monitor Time List Hash Keys #
###############################
use vars qw{$MTL_START_EPOCH $MTL_END_EPOCH $MTL_FIRST_OF_MONTH
$MTL_YEAR $MTL_MONTH $MTL_MDAY};
$MTL_START_EPOCH = 'MTL_START_EPOCH';
$MTL_END_EPOCH = 'MTL_END_EPOCH';
$MTL_FIRST_OF_MONTH = 'MTL_FIRST_OF_MONTH';
$MTL_YEAR = 'MTL_YEAR';
$MTL_MONTH = 'MTL_MONTH';
$MTL_MDAY = 'MTL_MDAY';
###########################
# Circuit Entry Hash Keys #
###########################
use vars qw{$CIRCUIT_COMPANY_NAME $CIRCUIT_IP_ADDRESS
$CIRCUIT_PORT_NAME $CIRCUIT_ID};
$CIRCUIT_COMPANY_NAME = 'CIRCUIT_COMPANY_NAME';
$CIRCUIT_IP_ADDRESS = 'CIRCUIT_IP_ADDRESS';
$CIRCUIT_PORT_NAME = 'CIRCUIT_PORT_NAME';
$CIRCUIT_ID = 'CIRCUIT_ID';

View File

@@ -0,0 +1,213 @@
#!/usr/bin/perl -w
#####################################################################
# $Id: BB_lib.pl,v 1.1.1.1 2000-10-23 20:08:17 kevin%perldap.org Exp $
#
# BB_lib.pl
#
# This file contains functions shared amongst the programs
#
# History:
# Kevin J. McCarthy [10/17/2000] Original Coding
#####################################################################
use strict;
use DirHandle;
use IO::File;
use File::Copy;
BEGIN {require '../inc/BB_include.pl';}
###########
# Globals #
###########
my $LOG_FH;
##################################################################
# get_time_stamp
#
# This returns the current timestamp, in the logfile format.
##################################################################
sub get_time_stamp
{
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
$mon += 1;
$year += 1900;
$mon = "0" . $mon if ( $mon < 10 );
$mday = "0" . $mday if ( $mday < 10 );
$hour = "0" . $hour if ( $hour < 10 );
$min = "0" . $min if ( $min < 10 );
$sec = "0" . $sec if ( $sec < 10 );
return "$year$mon$mday-$hour$min$sec";
}
######################################################
# get_file_timestamp
#
# This returns the 'modification' timestamp of a file,
# used for file archving.
######################################################
sub get_file_timestamp
{
my ($filename) = @_;
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size);
my ($atime, $mtime, $ctime, $blksize, $blocks);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst);
($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
$atime, $mtime, $ctime, $blksize, $blocks) = stat $filename;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($mtime);
$mon += 1;
$year += 1900;
$mon = "0" . $mon if ( $mon < 10 );
$mday = "0" . $mday if ( $mday < 10 );
$hour = "0" . $hour if ( $hour < 10 );
$min = "0" . $min if ( $min < 10 );
$sec = "0" . $sec if ( $sec < 10 );
return "$year$mon$mday-$hour$min$sec";
}
###############################################################
# archive_file
#
# This routine moves a file into a backup directory.
#
# Arguments:
# $dir => source directory to archive from
# $filename => file to archive
# $archive_dir => destination directory to archive to
# $archive_filename => destination filename (wihout datestamp -
# that is appended automatically)
# $copy => optional parameter. If == 1 then the files
# are copied, not moved to $archive_dir.
# Returns: $OKAY on success
###############################################################
sub archive_file
{
my ($dir, $filename, $archive_dir, $archive_filename, $copy) = @_;
my ($full_filename, $timestamp, $full_archive_filename);
$full_filename = "$dir/$filename";
## $timestamp = &get_time_stamp();
$timestamp = &get_file_timestamp($full_filename);
$full_archive_filename = "$archive_dir/$archive_filename.$timestamp";
if ( -f $full_filename )
{
if ( defined($copy) && $copy )
{
if ( ! copy($full_filename, $full_archive_filename) )
{
return($ERROR_WARNING);
}
}
else
{
if ( ! move($full_filename, $full_archive_filename) )
{
return($ERROR_WARNING);
}
}
}
return($OKAY);
}
###########################################################################
# purge_old_archives
#
# This routine deletes old archive files - it sorts the files in the
# directory and deletes the oldest files until there are at most $max_files
# in the directory
###########################################################################
sub purge_old_archives
{
my ($archive_dir, $max_files, $prefix) = @_;
my ($dirhandle, @allfiles, @delfiles);
local($_);
$dirhandle = new DirHandle $archive_dir;
if ( ! $dirhandle )
{
return ($ERROR_WARNING);
}
@allfiles = grep /^\Q$prefix\E/,
reverse sort $dirhandle->read();
$dirhandle->close();
@delfiles = splice @allfiles, $max_files;
unlink map {"$archive_dir/$_"} @delfiles;
}
###############################
# open_log_file
#
# Opens the log file for append
###############################
sub open_log_file
{
$LOG_FH = new IO::File ">>$LOG_DIR/$LOG_FILE";
if ( ! $LOG_FH )
{
print STDERR "Error opening log file\n";
exit($ERROR_CRITICAL);
}
}
################
# close_log_file
################
sub close_log_file
{
$LOG_FH->close();
}
##################################
# write_log_file
#
# Writes a message to the log file
##################################
sub write_log_file
{
my ($code, $desc) = @_;
my ($timestamp);
$timestamp = &get_time_stamp();
if ( $code eq $START_STAMP )
{
print $LOG_FH "\n$code<$timestamp>: $desc\n";
}
elsif ( $code eq $END_STAMP )
{
print $LOG_FH "$code<$timestamp>: $desc\n\n";
}
else
{
print $LOG_FH "\t$code<$timestamp>: $desc\n";
}
}
1;

View File

@@ -0,0 +1,71 @@
Comcast_Online_Towson:209.19.8.1:r1.twsn1.md.home.net:45233
Cox_AV:209.218.23.21:w4.rdc2.occa.home.net:44204
Cox_AZ:10.252.40.193:w1.rdc1.az.home.net:43195
Cox_NE:10.252.136.17:w1.rdc1.ne.home.net:45621
Cox_SD:10.252.20.97:w2.rdc1.sdca.home.net:44118
Cox_VA:10.252.60.5:w1.rdc1.va.home.net:43711
Cox_Fibernet:10.252.64.5:w1.rdc1.ok.home.net:44119
Befirst:216.217.177.69:w1.pop1.fl.home.net:46820
Internap:216.217.218.129:wbb1.rdc1.wa.home.net:48891
Merril_Lynch:10.252.172.1:w1.pop1.nj.home.net:47549
Siebel:10.252.9.113:w4.rdc1.sfba.home.net:46653
Vertex:10.252.140.1:w1.pop1.ca.home.net:44176
COX_COMM:10.252.96.17:w1.pop1.la.home.net:42782
FUSION_NETWORKS:10.252.148.53:w1.pop1.fl.home.net:40378
ISP_ALLIANCE:10.252.168.17:w1.pop1.ga.home.net:42968
Akamai:64.232.139.5:wbb1.pop1.va.home.net:44435
MICROCAST:24.7.70.65:c1.cmbrma1.home.net:44698
MICROCAST:24.7.70.81:c1.sttlwa1.home.net:44699
MICROCAST:24.7.70.77:c1.snfcca1.home.net:44700
MICROCAST:24.7.70.69:c2.chcgil1.home.net:44704
MICROCAST:24.7.70.85:c2.washdc1.home.net:44702
MICROCAST:24.7.70.73:c1.dllstx1.home.net:44703
STREAMING_MEDIA:10.253.0.1:wbb1.pop1.va.home.net:45382
INTELLISPACE_INTELLIGENT_INTERNET:10.252.156.33:w1.pop1.ny.home.net:44449
Speedera:209.219.187.1:wbb1.pop2.ca.home.net:46034
Speedera:64.232.139.1:wbb1.pop1.va.home.net:46035
IBeam:10.253.64.49:wbb1.pop2.ca.home.net:43891
COX_COMM:10.252.168.21:w1.pop1.ga.home.net:44619
Apptus:10.253.0.33:wbb1.pop1.va.home.net:46080
SADDLEBACK_COLLEGE:10.252.25.109:w1.rdc2.occa.home.net:37266
Cox_VA:10.252.60.1:w1.rdc1.va.home.net:37085
Cox_AV:209.218.23.21:wbb1.rdc2.occa.home.net:36842
SEGASOFT:209.19.34.33:w4.rdc1.sfba.home.net:36658
AT&T_NCS_ITS:10.252.1.25:w5.rdc1.nj.home.net:35004
LUCENT_TECHNOLOGIES:10.252.0.117:w1.rdc1.nj.home.net:38002
BROADCOM:10.252.24.9:w1.rdc2.occa.home.net:38442
NETWORK_PLUS:10.252.49.73:w2.pop1.ma.home.net:38786
GLOBAL_MUSIC_OUTLET:10.252.27.9:w2.rdc2.occa.home.net:34780
SIMPLE_NETWORK_COMM:10.252.144.1:w1.sndgca1.home.net:35837
TELEBEAM:209.125.212.9:w1.pop1.pa.home.net:34908
INTERTAINER:10.252.24.209:w1.rdc2.occa.home.net:39622
INTEL_CORP:10.252.160.9:w1.pop1.or.home.net:38387
AT&T_MEDIA_SERVICES:10.252.84.161:w4.rdc1.sfba.home.net:39715
NET_CARRIER:209.125.212.13:w1.pop1.pa.home.net:36901
COMCAST_ONLINE:216.217.0.1:w3.rdc1.nj.home.net:40728
REAL_NETWORKS:216.216.93.5:wbb1.rdc1.wa.home.net:40961
INTEL_CORP:10.252.41.13:w2.pop1.az.home.net:38798
IDEAL:10.252.56.5:wbb1.pop1.mi.home.net:40235
IMALL:10.252.180.17:w1.pop2.ut.home.net:39762
PRIME:10.252.25.189:w2.rdc2.occa.home.net:41036
ETRACKS.COM:10.252.11.73:w4.rdc1.sfba.home.net:39479
NEW_JERSEY_LINKED:10.252.172.5:w1.pop1.nj.home.net:40679
AT&T_FIBER_WHOLESALE:10.252.84.245:w4.rdc1.sfba.home.net:39998
NORTHPOINT_PVC_IRVINE:10.252.32.165:w3.rdc2.occa.home.net:43108
NORTHPOINT_PVC_CHICAGO:10.252.14.149:w3.rdc1.il.home.net:43102
NORTHPOINT_PVC_WASHINGTON:10.252.88.21:w1.pop1.dc.home.net:43103
NORTHPOINT_PVC_ATLANTA:10.252.168.13:w1.pop1.ga.home.net:43097
NORTHPOINT_PVC_NEW_JERSEY:10.252.80.125:w4.rdc1.nj.home.net:43105
NORTHPOINT_PVC_FT_LAUD:10.252.148.33:w1.pop1.fl.home.net:43101
AIRPOWER_COMM:216.216.30.213:wbb1.rdc2.occa.home.net:42072
REAL_NETWORKS:10.252.116.53:w1.pop1.or.home.net:42946
AKAMAI:10.253.112.33:wbb1.pop1.il.home.net:44426
AKAMAI:10.253.132.33:wbb1.pop1.ny.home.net:44434
AKAMAI:10.253.80.33:wbb1.pop2.wa.home.net:44427
AKAMAI:10.253.96.33:wbb1.pop1.ca.home.net:44429
AKAMAI:10.253.64.37:wbb1.pop2.ca.home.net:44423
COX_COMM:10.252.168.9:w1.pop1.ga.home.net:41756
STREAMING_MEDIA:10.253.64.33:wbb1.pop2.ca.home.net:45381
INTUIT:216.216.48.141:w1.sndgca1.home.net:46576
AT&T_UGN_KANSAS:10.252.152.33:w1.pop1.il.home.net:43861
WEBUSENET:10.253.64.45:wbb1.pop2.ca.home.net:45791

48
mozilla/mozilla.kdevprj Normal file
View File

@@ -0,0 +1,48 @@
# KDE Config File
[mozilla.lsm]
install_location=
dist=true
install=false
type=DATA
[Config for BinMakefileAm]
ldflags=
cxxflags=-O0 -g3 -Wall
bin_program=mozilla
[po/Makefile.am]
sub_dirs=
type=po
[LFV Groups]
Dialogs=*.kdevdlg,
Others=*,
Translations=*.po,
groups=Headers,Sources,Dialogs,Translations,Others,
Sources=*.cpp,*.c,*.cc,*.C,*.cxx,*.ec,*.ecpp,*.lxx,*.l++,*.ll,*.l,
Headers=*.h,*.hh,*.hxx,*.hpp,*.H,
[mozilla.kdevprj]
install_location=
dist=true
install=false
type=DATA
[mozilla/docs/en/Makefile.am]
sub_dirs=
type=normal
[mozilla/Makefile.am]
sub_dirs=
type=prog_main
[General]
makefiles=Makefile.am,mozilla/Makefile.am,mozilla/docs/Makefile.am,mozilla/docs/en/Makefile.am,po/Makefile.am,
version_control=CVS
author=Heikki Toivonen
project_type=normal_empty
sub_dir=mozilla/
version=0.1
project_name=Mozilla
email=heikki@netscape.com
kdevprj_version=1.2
[Makefile.am]
files=mozilla.kdevprj,mozilla.lsm,
sub_dirs=mozilla,
type=normal
[mozilla/docs/Makefile.am]
sub_dirs=
type=normal

14
mozilla/mozilla.lsm Normal file
View File

@@ -0,0 +1,14 @@
Begin3
Title: Mozilla
Version: 0.1
Entered-date:
Description:
Keywords:
Author: Heikki Toivonen <heikki@netscape.com>
Maintained-by: Heikki Toivonen <heikki@netscape.com>
Primary-site:
Home-page: http://
Original-site:
Platforms: Linux and other Unices
Copying-policy: GNU Public License
End

View File

@@ -0,0 +1,20 @@
/*
* 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 Communicator client 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):
*/

View File

@@ -0,0 +1,20 @@
/*
* 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 Communicator client 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):
*/

View File

@@ -1,91 +0,0 @@
# a) Install me in public/htdocs/.htaccess, or
# b) Create a <Directory> entry in your Apache conf
# You MUST define YOURPATH/inc as an include_path!
php_value include_path /YOURPATH/v2/public/inc:.:/usr/share/pear:/YOURPATH/v2/shared/lib
# Init script to set up required libraries.
php_value auto_prepend_file init.php
# Finish script that calls $tpl->display for global Smarty object.
php_value auto_append_file finish.php
# Rewrite engine must be used to simplify URLs so they are human readable.
RewriteEngine On
RewriteBase /YOURPATH/public/htdocs
# Rewrites to be compatible with older versions of addons.
RewriteRule ^update/VersionCheck.php(.*)$ update.php$1
RewriteRule ^rss/index.php(.*)$ rss.php$1
# Compatibility for v1 extension and theme links.
# Old example URLs:
# /extensions/moreinfo.php?application=thunderbird&id=123
# /extensions/moreinfo.php?id=123
# /themes/moreinfo.php?id=321&application=seamonkey
# /themes/moreinfo.php?id=321
# New:
# /thunderbird/123/
# /firefox/123/
# /seamonkey/321/
# /firefox/321/
RewriteCond %{QUERY_STRING} application=(\w+)&.*id=([0-9]+)
RewriteRule ^(extensions|themes)/moreinfo.php$ %1/%2/? [R=301,L]
RewriteCond %{QUERY_STRING} id=([0-9]+)&.*application=(\w+)
RewriteRule ^(extensions|themes)/moreinfo.php$ %2/%1/? [R=301,L]
RewriteCond %{QUERY_STRING} id=([0-9]+)
RewriteRule ^(extensions|themes)/moreinfo.php$ firefox/%1/? [R=301,L]
# Compatibility for v1 of extensions. The hardcoded URL's in the old
# browsers need this to get to the right pages: (the strings are the GUIDs)
# Old example URL:
# /extensions/?application={3550f703-e582-4d05-9a08-453d09bdfdc6}
# New:
# /extensions.php?app={3550f703-e582-4d05-9a08-453d09bdfdc6}
RewriteCond %{QUERY_STRING} ^application=(.*)$
RewriteRule ^extensions/$ extensions.php?app=%1 [R=301,L]
# Compatibility for v1 of extensions. The hardcoded URL's in the old
# browsers need this to get to the right pages: (the strings are the GUIDs)
# Old example URL:
# /themes/?application={3550f703-e582-4d05-9a08-453d09bdfdc6}
# New:
# /themes.php?app={3550f703-e582-4d05-9a08-453d09bdfdc6}
RewriteCond %{QUERY_STRING} ^application=(.*)$
RewriteRule ^themes/$ themes.php?app=%1 [R=301,L]
# Send rss/* to rss.php.
# Example:
# /rss/firefox/extensions/popular/ -> rss.php?app=firefox&type=extensions&list=popular
RewriteRule ^rss/(\w+)/(\w+)/(\w+)[/]{0,1}$ rss.php?app=$1&type=$2&list=$3
# Rewrite to addon.php if all we have is a numerical id after appname.
# Example:
# /firefox/220/ -> addon.php?app=firefox&id=220
RewriteRule ^(\w+)/(\d+)[/]{0,1}$ addon.php?app=$1&id=$2
# Rewrite to an addon-specific page, passing app and id.
# Example:
# /firefox/220/previews/ -> previews.php?app=firefox&id=220
RewriteRule ^(\w+)/(\d+)/(\w+)[/]{0,1}$ $3.php?app=$1&id=$2
# Rewrite to addon.php if there is a name given plus overview (special case for addon.php).
# Example:
# /firefox/flashgot/overview/ -> addon.php?app=firefox&name=flashgot
RewriteRule ^(\w+)/(\w+)/overview[/]{0,1}$ addon.php?app=$1&name=$2
# Rewrite to addon-specific page, passing app and addon name.
# Example:
# /firefox/flashgot/previews/ -> previews.php?app=firefox&name=flashgot
RewriteRule ^(\w+)/(\w+)/(\w+)[/]{0,1}$ $3.php?app=$1&name=$2
# Rewrite top-level pages.
# Examples:
# /firefox/extensions/ -> extensions.php?app=firefox
# /firefox/themes/ -> themes.php?app=firefox
RewriteRule ^(\w+)/([\w-]+)[/]{0,1}$ $2.php?app=$1
# Rewrite for main page & app.
# Example:
# /firefox/ -> /?app=firefox
RewriteRule ^(\w+)[/]{0,1}$ index.php?app=$1

View File

@@ -1,130 +0,0 @@
<?php
/**
* Add a comment to any Addon.
*
* @package amo
* @subpackage docs
*
* Variables:
* $_GET['aid'] = Addon ID (integer)
*/
startProcessing('addcomment.tpl', null, null);
require_once 'includes.php';
session_start();
if ((!array_key_exists('aid', $_GET)) || !is_numeric($_GET['aid'])) {
triggerError('There was an error processing your request.');
}
//This is a secure page, so we'll check the session
if (!$_auth->validSession()) {
//id is already verified to be numeric from above
header('Location: '.WEB_PATH."/login.php?dest=comment&aid={$_GET['aid']}");
exit;
}
// If there are errors, this will be populated
$_errors = array();
// This will be used in queries and the template
$addon = new AddOn($_GET['aid']);
// If the comment is added successfully, this will toggle (used in the template)
$added_comment = false;
// They're posting a comment
if (isset($_POST['c_submit'])) {
if (! (array_key_exists('c_rating', $_POST)
&& array_key_exists('c_title', $_POST)
&& array_key_exists('c_comments', $_POST))) {
//This should never happen, but hey...
triggerError('There was an error processing your request.');
}
// Check all our input to make sure something is there, and it is appropriate.
// If it isn't, make $_bad_input=true which means we'll print the form back out
// with an error message. (By using booleans here, we keep the error messages in
// the .tpl)
$_bad_input = false;
if (!is_numeric($_POST['c_rating'])) {
$_errors['c_rating'] = true;
$_bad_input = true;
}
if (empty($_POST['c_title'])) {
$_errors['c_title'] = true;
$_bad_input = true;
}
if (empty($_POST['c_comments'])) {
$_errors['c_comments'] = true;
$_bad_input = true;
}
// If bad_input is true, we'll skip the rest of the processing and dump them
// back out to the from with an error.
if ($_bad_input === false) {
// I got a little carried away with the escaping, but it's not gonna hurt anything.
$_c_id = mysql_real_escape_string($addon->ID);
$_c_user_id = mysql_real_escape_string($_auth->getId());
$_c_rating = mysql_real_escape_string($_POST['c_rating']);
$_c_title = mysql_real_escape_string(strip_tags($_POST['c_title']));
$_c_comments = mysql_real_escape_string(strip_tags($_POST['c_comments']));
$_c_commentip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$_sql = "INSERT INTO `feedback`
(
`ID`,
`UserId`,
`CommentVote`,
`CommentTitle`,
`CommentNote`,
`CommentDate`,
`commentip`
) VALUES (
{$_c_id},
{$_c_user_id},
{$_c_rating},
'{$_c_title}',
'{$_c_comments}',
NOW(),
'{$_c_commentip}'
)";
$db->query($_sql);
if (!DB::isError($db->record)) {
// Calculate the lookup value in main for comment avg if our INSERT was successful.
$_ratingSql = "UPDATE `main` SET `Rating` = ROUND((SELECT AVG(`CommentVote`) FROM `feedback` WHERE `ID` = {$_c_id}),2) WHERE `ID` = {$_c_id}";
$db->query($_ratingSql);
}
// For the template
$added_comment = true;
}
}
// Put values back into the form - if something went wrong this will populate the
// form again
$c_rating_value = array_key_exists('c_rating', $_POST) ? $_POST['c_rating'] : '';
$c_title_value = array_key_exists('c_title', $_POST) ? $_POST['c_title'] : '';
$c_comments_value = array_key_exists('c_comments', $_POST) ? $_POST['c_comments'] : '';
// Assign template variables.
$tpl->assign(
array( 'title' => 'Add Comment',
'currentTab' => null,
'rate_select_value' => array('','5','4','3','2','1','0'),
'rate_select_name' => array('Rating:','5 stars', '4 stars', '3 stars', '2 stars', '1 star', '0 stars'),
'addon' => $addon,
'c_added_comment' => $added_comment,
'c_errors' => $_errors,
'c_rating_value' => $c_rating_value,
'c_title_value' => $c_title_value,
'c_comments_value' => $c_comments_value,
'sidebar' => 'inc/addon-sidebar.tpl'
)
);
?>

View File

@@ -1,37 +0,0 @@
<?php
/**
* Addon summary page. Displays a top-down view of all Addon properties.
*
* @package amo
* @subpackage docs
*/
// Get the int value of our addon ID.
$clean['ID'] = intval($_GET['id']);
$sql['ID'] =& $clean['ID'];
startProcessing('addon.tpl',$clean['ID'],$compileId);
require_once('includes.php');
// Create our AddOn object using the ID.
$addon = new AddOn($sql['ID']);
/* This is kind of a cheesy hack to determine how to display
download links on the addon page. If only one link is shown,
there will just be an "Install Now" link, otherwise there will
be links for each version. */
if (sizeof($addon->OsVersions) == 1) {
$multiDownloadLinks = false;
} else {
$multiDownloadLinks = true;
}
// Assign template variables.
$tpl->assign(
array( 'addon' => $addon,
'multiDownloadLinks' => $multiDownloadLinks,
'title' => $addon->Name,
'content' => 'addon.tpl',
'sidebar' => 'inc/addon-sidebar.tpl')
);
?>

View File

@@ -1,24 +0,0 @@
<?php
/**
* Author information.
* @package amo
* @subpackage docs
*/
// Get our addon ID.
$clean['UserID'] = intval($_GET['id']);
$sql['UserID'] =& $clean['UserID'];
startProcessing('author.tpl',$clean['UserID'],$compileId);
require_once('includes.php');
$user = new User($sql['UserID']);
// Assign template variables.
$tpl->assign(
array( 'user' => $user,
'title' => $user->UserName,
'content' => 'author.tpl',
'sidebar' => 'inc/author-sidebar.tpl')
);
?>

View File

@@ -1,65 +0,0 @@
<?php
/**
* Comments listing for an addon.
*
* @package amo
* @subpackage docs
* @TODO Disallow comments for addon authors (authors should not be allowed to comment on their own addon).
* @TODO Throttle comment entry.
*/
// Get our addon id.
$clean['id'] = intval($_GET['id']);
$sql['id'] =& $clean['id'];
// Sort.
if (isset($_GET['sort'])&&ctype_alpha($_GET['sort'])) {
$clean['sort'] = $_GET['sort'];
}
// Starting point.
$page['left'] = (isset($_GET['left'])) ? intval($_GET['left']) : 0;
// Ending point.
$page['right'] = $page['left'] + 10;
// Order by.
$page['orderby'] = (!empty($_GET['orderby'])&&ctype_alpha($_GET['orderby'])) ? $_GET['orderby'] : "";
startProcessing('comments.tpl',$clean['id'],$compileId);
require_once('includes.php');
$addon = new AddOn($sql['id']);
$addon->getComments($page['left'],10,$page['orderby']);
// Get our result count.
$db->query("SELECT FOUND_ROWS()", SQL_INIT);
$resultCount = !empty($db->record) ? $db->record[0] : $page['right'];
if ($resultCount<$page['right']) {
$page['right'] = $resultCount;
}
// Do we even have a next or previous page?
$page['previous'] = ($page['left'] >= 10) ? $page['left']-10 : null;
$page['next'] = ($page['left']+10 < $resultCount) ? $page['left']+10 : null;
$page['resultCount'] = $resultCount;
$page['leftDisplay'] = $page['left']+1;
// Build the URL based on passed arguments.
foreach ($clean as $key=>$val) {
if (!empty($val)) {
$buf[] = $key.'='.$val;
}
}
$page['url'] = implode('&amp;',$buf);
unset($buf);
// Assign template variables.
$tpl->assign(
array( 'addon' => $addon,
'title' => $addon->Name.' Comments',
'content' => 'comments.tpl',
'sidebar' => 'inc/addon-sidebar.tpl',
'page' => $page)
);
?>

View File

@@ -1,132 +0,0 @@
<?php
/**
* Create a new account
*
* @package amo
* @subpackage docs
*
*/
startProcessing('createaccount.tpl', null, null, 'nonav');
require_once 'includes.php';
// If there are problems, these will be set to true and used in the template. By
// using null/booleans, error messages are kept in the template.
$error_email_empty = null;
$error_email_malformed = null;
$error_emailconfirm_empty = null;
$error_emailconfirm_nomatch = null;
$error_email_duplicate = null;
$error_name_empty = null;
$error_password_empty = null;
$error_passwordconfirm_empty = null;
$error_passwordconfirm_nomatch = null;
$_bad_input = false; // think positive :)
$account_created = false;
if (array_key_exists('submit', $_POST) && isset($_POST['submit'])) {
/* Verify Input */
// Check email - a little long and confusing. Basically, throw an error if
// the following is not met (in order):
// $email is set, $emailconfirm is set, $email=$emailconfirm, and $email is a valid address
if (!array_key_exists('email', $_POST) || empty($_POST['email'])) {
$error_email_empty = true;
$_bad_input = true;
} else {
if (!array_key_exists('emailconfirm', $_POST) || empty($_POST['emailconfirm'])) {
$error_emailconfirm_empty = true;
$_bad_input = true;
} else {
// technically this would catch if emailconfirm was empty to, but
// waiting until here could make php throw a warning.
if ($_POST['email'] != $_POST['emailconfirm']) {
$error_emailconfirm_nomatch = true;
$_bad_input = true;
}
}
// Regex from Gavin Sharp -- thanks Gavin.
if (!preg_match('/^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/',$_POST['email'])) {
$error_email_malformed = true;
$_bad_input = true;
}
}
// name is required
if (!array_key_exists('name', $_POST) || empty($_POST['name'])) {
$error_name_empty = true;
$_bad_input = true;
}
// password is required and match
if (!array_key_exists('password', $_POST) || empty($_POST['password'])) {
$error_password_empty = true;
$_bad_input = true;
} else {
if (!array_key_exists('passwordconfirm', $_POST) || empty($_POST['passwordconfirm'])) {
$error_passwordconfirm_empty = true;
$_bad_input = true;
} else {
if ($_POST['password'] != $_POST['passwordconfirm']) {
$error_passwordconfirm_nomatch = true;
$_bad_input = true;
}
}
}
// This is a little out of order because we're trying to save a query. If we
// haven't had any bad input yet, do one last check to make sure the email
// address isn't already in use.
if ($_bad_input === false) {
$_user_test = user::getUserByEmail($_POST['email']);
if (is_object($_user_test)) {
$_bad_input = true;
$error_email_duplicate = true;
}
}
// We're happy with the input, make a new account
if ($_bad_input === false) {
$_user_info = array();
$_user_info['email'] = $_POST['email'];
$_user_info['name'] = $_POST['name'];
$_user_info['website'] = $_POST['website'];
$_user_info['password'] = $_POST['password'];
$user_id = user::addUser($_user_info);
if ($user_id === false) {
triggerError('There was an error processing your request.');
}
$user = new User($user_id[0]);
// we're emailing them their plain text password
$user->sendConfirmation($_user_info['password']);
$account_created = true;
}
}
// Pull values from POST to put back in the form
$email_value = array_key_exists('email', $_POST) ? $_POST['email'] : '';
$emailconfirm_value = array_key_exists('emailconfirm', $_POST) ? $_POST['emailconfirm'] : '';
$name_value = array_key_exists('name', $_POST) ? $_POST['name'] : '';
$website_value = array_key_exists('website', $_POST) ? $_POST['website'] : '';
// Assign template variables.
$tpl->assign(
array( 'title' => 'Create an Account',
'currentTab' => null,
'account_created' => $account_created,
'bad_input' => $_bad_input,
'error_email_empty' => $error_email_empty,
'error_email_malformed' => $error_email_malformed,
'error_emailconfirm_empty' => $error_emailconfirm_empty,
'error_emailconfirm_nomatch' => $error_emailconfirm_nomatch,
'error_email_duplicate' => $error_email_duplicate,
'error_name_empty' => $error_name_empty,
'error_password_empty' => $error_password_empty,
'error_passwordconfirm_empty' => $error_passwordconfirm_empty,
'error_passwordconfirm_nomatch' => $error_passwordconfirm_nomatch,
'email_value' => $email_value,
'emailconfirm_value' => $emailconfirm_value,
'name_value' => $name_value,
'website_value' => $website_value
)
);
?>

View File

@@ -1,115 +0,0 @@
body, td, th, h3, input { /* redundant rules for bad browsers */
font-family: verdana, sans-serif;
font-size: x-small;
voice-family: "\"}\"";
voice-family: inherit;
font-size: small;
}
body {
color: #333;
line-height: 140%;
}
a:link { color: #039; }
a:visited { color: #609; }
a:hover { color: #333; }
a:active { color: #000; }
#header a:visited { color: #039; }
#header a:hover { color: #333; }
#mBody li { padding-bottom: 0.5em; }
.sidebar_content > h1,.sidebar_content > h2,.sidebar_content > h3,.sidebar_content > h4,.sidebar_content > h5,.sidebar_content > h6,.sidebar > h1,.sidebar_general > h2,.sidebar_general > h3,.sidebar_general > h4,.sidebar_general > h5,.sidebar_general > h6 {
margin-top: 0;
}
.sidebar_right {
margin-left: 65%;
}
.sidebar_general ul {
margin-left: 0;
padding-left: 20px;
}
.sidebar_general li {
padding: 0.2em 0;
}
img.imgright {
float: right;
margin: .3em .3em .3em 0;
padding: .3em .3em .3em 0;
}
img {
border: 0;
}
dt {
font-weight: bold;
}
dd {
margin: 0 0 1em 1em;
}
.skipLink {
position: absolute;
left: -1200px;
width: 990px;
}
.hide {
display: none;
}
ul.compact {
margin-left: 0;
padding-left: 20px;
}
img.rss {
float: right;
margin: 0;
padding: 4px 4px 0 0;
}
.first { margin-top: 0.2em; }
.requires img {
vertical-align: middle;
}
/* Headers */
#mainContent > h1:first-child,
#mainContent > h2:first-child,
#mainContent > h3:first-child,
#mainContent > h4:first-child,
#mainContent > h5:first-child,
#mainContent > h6:first-child,
#side > h1:first-child,
#side > h2:first-child,
#side > h3:first-child,
#side > h4:first-child,
#side > h5:first-child,
#side > h6:first-child {
margin-top: 0;
}
.appversions {
border: 1px solid #ccc;
margin: .5em 0;
}
.appversions th {
background-color: #ccc;
padding: .2em;
}
.appversions .row1 {
background-color: #eee;
}

View File

@@ -1,139 +0,0 @@
body {
min-width: 700px;
margin: 0 0 2em 0;
padding: 0;
}
#container {
width: 740px;
margin: 0 auto;
}
#mBody {
clear: both;
padding: .2em 0;
}
.sidebar_content {
width: 60%;
float: left;
}
#footer {
clear: both;
}
#side {
float: left;
width: 23%;
margin-bottom: 1em;
}
#mainContent {
margin-left: 25%;
}
.nomenu #mainContent {
margin-left: 0;
}
.bodyleft {
margin-left: 25% ! important
}
#mainContent.right {
float: left;
width: 62%;
margin-bottom: 1em;
margin-left: 0;
}
#side.right {
float: none;
width: auto;
margin-left: 65%;
}
p.security-update {
padding-left: 35px;
background: url(../../images/security-update.png) no-repeat;
margin-top: 0;
min-height: 30px;
}
/* Sidebar */
#nav:before {
line-height: 0.1;
font-size: 1px;
background: transparent url("../../images/menu_tr.gif") no-repeat top right;
margin: 0;
height: 9px;
display: block;
border-bottom: 1px solid #ddd;
content: url("../../images/key-point_tl.gif");
}
#nav {
background: #E0E9E9 url("../../images/menu_back.gif") right repeat-y;
}
#nav:after {
display: block;
padding-top: 0;
line-height: 0.1;
font-size: 1px;
content: url("../../images/key-point_bl.gif");
margin: 0 0 0 0;
height: 8px;
background: transparent url("../../images/menu_br.gif") scroll no-repeat bottom right ;
border-top: 1px solid #fff;
}
#nav, #nav ul {
margin: 0;
padding: 0;
list-style: none;
}
#nav {
margin-bottom: 1em;
}
#nav li {
display: inline;
padding: 0;
margin: 0;
}
#nav li span { /* used for un-linked menu items */
display: block;
padding: 6px 10px;
font-weight: bold;
color: #666;
}
#nav li span#configParent, #nav li span #configuration {
display: inline;
font-weight: normal;
padding: 0;
}
#nav li a {
display: block;
padding: 6px 10px;
text-decoration: none;
background: #EDF2F2;
border-bottom: 1px solid #ddd;
border-top: 1px solid #fff;
border-right: 1px solid #ddd;
}
#nav li a:hover {
background: #E0E9E9;
}
#nav ul li span,#nav ul li a {
padding: 4px 8px 4px 20px;
}
.clear-both {
clear: both;
}
.center {
text-align: center;
}

View File

@@ -1,454 +0,0 @@
#mBody h2 {
font: 140% arial,helvetica,verdana,sans-serif;
border-bottom: 1px solid #ccc;
margin-bottom: 0;
}
#mBody h2 a {
margin: 0;
padding: 0;
text-decoration: none;
}
#mBody h3 {
font: 120% arial,helvetica,verdana,sans-serif;
border-bottom: 1px solid #ccc;
margin-bottom: 0;
}
#mBody h1 {
font: 180% arial,helvetica,sans-serif;
border-bottom: 1px solid #ccc;
margin-bottom: 0;
}
.key-point:before {
line-height: 0.1;
font-size: 1px;
background: transparent url("../../images/key-point_tr.gif") no-repeat top right;
margin: -15px -15px 0 -15px;
height: 15px;
display: block;
border: none;
content: url("../../images/key-point_tl.gif");
}
.key-point {
background: #EFF8CE url("../../images/key-point_back.gif") right repeat-y;
padding: 15px;
margin-top: 18px;
}
.key-point:after {
display: block;
padding-top: 15px;
line-height: 0.1;
font-size: 1px;
content: url("../../images/key-point_bl.gif");
margin: -15px;
height: 8px;
background: transparent url("../../images/key-point_br.gif") scroll no-repeat bottom right ;
}
#header form #submit {
font-size: 100%;
padding: 1px;
font-family: tahoma, arial, sans-serif;
}
#header form #q {
width: 10em;
font-size: 100%;
font-weight: normal;
border: 1px solid #9097A2;
padding: 2px;
font-family: tahoma, arial, sans-serif;
}
#sectionsearch {
font-size: 100%;
font-weight: normal;
font-family: tahoma, arial, sans-serif;
}
.popularlist {
font-size: 85%;
}
.popularlist span {
color: #666;
white-space: nowrap;
}
.install a {
text-decoration: none;
}
.install a strong {
text-decoration: underline;
}
.install-box {
width: 20em;
}
.key-point {
background-color:#bee6a1;
}
.install div {
background: url(../../images/install.png) no-repeat;
padding: 3px 0 8px 30px;
}
#opinions h4 {
margin: 0;
}
.opinions-info {
font-size: 85%;
margin: 0 0 0.5em 0;
}
.opinions-info a {
text-decoration: none;
color: #666;
}
.opinions-info a:hover {
text-decoration: underline;
}
.opinions-text {
margin: 0;
}
.opinions-rating img {
vertical-align: middle;
}
.rating {
float: right;
font-size: 85%;
font-weight: bold;
}
.rating img {
vertical-align: middle;
}
.more-links {
margin: 0.5em 0 0 0;
padding: 0;
}
.more-links li {
display: inline;
margin: 0;
padding: 5px;
}
.screenshot {
float: right;
background: #fff;
padding: 0 0 2em 2em;
}
.screenshot a {
text-align: center;
display: block;
}
/* Remaining Original Update Styles */
.item {
border: #D2D6D6 1px solid;
padding-left: 5px;
padding-right: 6px;
MARGIN-bottom: 10px;
-moz-border-radius: 10px;
}
.item a {
color: #00129c;
text-decoration: none;
}
.item a:visited {
color: #00129c;
text-decoration: none;
}
.item a:hover {
color: #fc5900;
}
.item h2 {
margin-top: 0.2em;
}
.recommended {
clear: both;
padding: 1em 0;
}
.recommended h2 {
padding: 1em 0 0 215px;
margin: 0;
}
.recommended p {
padding-left: 215px;
}
.recommended-download h3 {
font: small tahoma, verdana, sans-serif;
margin: 0;
background: url("../../images/download.gif") 0 100%;
font-size: small;
padding-bottom: 5px;
}
.recommended-download h3 a {
display: block;
background: url("../../images/download.gif") 0 0;
font-size: 65%;
font-weight: bold;
width: 165px;
padding: 12px 25px 5px 10px;
text-decoration: none;
color: #5A9A3B;
}
.recommended-download h3 a:hover {
text-decoration: underline;
color: #275113;
}
.recommended-download {
display: block;
width: 200px;
padding: 15px 0 0 215px;
}
.recommended-img {
border: 2px outset #eee;
float: left;
margin: 1em 1em 0 0;
}
.iconbar {
padding-right: 15px;
float: left;
width: auto;
height: 34px;
}
.iconbar img {
float:left;
}
.iconbar a {
text-decoration: none;
}
.selected a, .selected a:visited {
color: #fc5900;
}
.baseline {
clear: right;
margin-top: 5px;
border-top: #ccc 1px solid;
padding: 3px;
padding-left: 10px;
font-size: 8pt;
color: #333;
}
#opinions {
list-style-type: none;
margin: 0;
padding: 0;
}
#opinions li {
border-top: 1px solid #eee;
padding: 1em 0;
}
#opinions h4 {
clear: right;
margin: 0;
padding: .5em 0 0 0;
}
.opinions-info {
color: #666;
margin: 0;
padding: 0 0 .5em 0;
}
.opinions-info a {
text-decoration: none;
color: #666;
}
.opinions-info a:hover {
text-decoration: underline;
}
.opinions-text {
margin: .8em 0 0 0;
padding: 0;
}
.opinions-vote {
background-color: #cfc;
border: 1px solid #000;
float: left;
font-style: italic;
font-weight: bold;
font-size: x-large;
padding: 5px;
margin: 4px;
text-align: center;
}
.opinions-caption {
display: block;
font-size: x-small;
font-weight: normal;
margin: 0;
padding: 0;
}
.opinions-rating {
margin: 0;
padding: .5em 0;
}
.opinions-helpful {
font-style: italic;
border: 1px dashed #eee;
padding: .2em;
margin: .7em 0;
}
.tooltip {
cursor: help;
border-bottom: 1px dotted;
}
.pages {
color: #999;
font-weight: bold;
height: 2em;
}
.next {
border-left: 1px solid #000;
display: inline;
padding-left: 5px;
}
.prev {
display: inline;
}
.pages a {
color: blue;
text-decoration: none;
}
#comment-rate {
margin: .5em;
padding: .5em;
background-color: #eee;
border: 1px solid #999;
}
#search-block:before {
line-height: 0.1;
font-size: 1px;
background: transparent url("../../img/key-point_tr.gif") no-repeat top right;
margin: -10px -10px 0 -10px;
height: 10px;
display: block;
border: none;
content: url("../../img/key-point_tl.gif");
}
#search-block{
background: #EFF8CE url("../../img/key-point_back.gif") right repeat-y;
padding: 10px;
}
#search-block label{
font-weight: bold;
}
#search-block select {
width: 13em;
}
#search-block input[type=text] {
width: 9.2em;
}
.right #search-block select {
width: 20em;
}
.right #search-block input[type=text] {
width: 16.2em;
}
#search-block:after {
display: block;
padding-top: 10px;
line-height: 0.1;
font-size: 1px;
content: url("../../img/key-point_bl.gif");
margin: -10px;
height: 8px;
background: transparent url("../../img/key-point_br.gif") scroll no-repeat bottom right ;
}
#search-options {
display: none;
}
#hide-search-options {
display: none;
}
#show-search-options {
display: inline;
}
#comments-sort {
float: right;
}
.disclaimer {
text-align: center;
color: #ccc;
font-size: x-small;
width: 600px;
margin-left: auto;
margin-right: auto;
}
.install-thunderbird {
background-color: #eee;
border: 1px solid #ccc;
margin: .5em 0;
padding: .5em;
}
.install-thunderbird p {
font-weight: bold;
color: blue;
margin: 0;
padding: 0;
}

View File

@@ -1,317 +0,0 @@
body {
background: #fff url("../../images/body_back.gif") repeat-x;
}
#footer {
background: url("../../images/footer.gif") 0 8px no-repeat;
margin: 10px 0;
text-align: center;
}
#footer span,#footer a {
white-space: nowrap;
padding: 0 1em;
color: #666;
font-size: 85%;
}
#footer p a:hover {
color: #000;
}
#footer .switch-fx,
#footer .switch-tb,
#footer .switch-suite {
padding-left: 30px;
font-size: 100%;
background: #fff 9px 0 no-repeat;
}
#footer .switch-tb {
background-image: url("../../images/switch-tb.gif");
}
#footer .switch-suite {
background-image: url("../../images/switch-suite.gif");
}
#footer .switch-fx {
background-image: url("../../images/switch-fx.gif");
}
/* Site Header */
#header {
clear: both;
padding-top: 40px;
position: relative;
} * html #header { padding-top: 20px; }
#header h1 {
height: 46px;
margin: 0;
font-size: 2px;
position: absolute;
top: 0;
left: -4px;
border: none;
z-index: 5000;
}
#header form {
position: absolute;
right: 0;
top: 9px;
margin-left: 200px;
font-family: tahoma, arial, sans-serif;
font-size: 85%;
}
#header div#auth {
display:inline;
position:absolute;
top:11px;
right:0px;
margin-right: 200px;
}
#key-menu {
background: #B2C1C8 url("../../images/header-bottom.gif") 0 100% no-repeat;
padding: 0 0 10px 0;
overflow: auto;
margin-bottom: 1em;
}
* html #key-menu {
overflow: visible;
height: 1px;
}
#key-menu ul, #key-menu li {
margin: 0;
padding: 0;
list-style: none;
}
#key-menu ul {
padding: 14px 12px 0 12px;
background: url("../../images/header-top.gif") 0 0 no-repeat;
}
#key-menu li {
float: left;
background: url("../../images/tabs.gif") 100% -50px;
padding-right: 5px;
margin-right: 2px;
border-bottom: 1px solid #849CA4;
margin-bottom: -10px;
}
#key-menu li a, #key-menu li span {
display: block;
float: left;
padding: 3px 15px 2px 20px;
background: url("../../images/tabs.gif") 0 -50px;
color: #5A7CBA;
text-decoration: none;
}
#key-menu li:hover a {
background-position: 0 -100px;
}
#key-menu li:hover {
background-position: 100% -100px;
}
#key-menu li.current {
background: url("../../images/tabs.gif") 100% 0;
border-bottom-color: white;
}
#key-menu li.current a, #key-menu li.current span {
background: url("../../images/tabs.gif") 0 0;
color: #999;
}
#mozilla-com a {
float: right;
display: block;
text-indent: -5000em;
width: 110px;
height: 25px;
text-decoration: none;
background: url("../../images/mozilla-org.gif") no-repeat;
}
/* End Site Header */
/* Front Feature */
.split-feature {
background: url("../../images/feature-back.png") 0 100% no-repeat;
overflow: auto;
padding-bottom: 10px;
margin-right: -2px;
} * html .split-feature { overflow: visible; height: 1px; }
.split-feature-one, .split-feature-two {
padding: 15px 15px 0 15px;
float: left;
}
.split-feature-one {
width: 485px;
background: url("../../images/feature-back.png") 0 0 no-repeat;
}
.split-feature-two {
width: 185px;
padding-left: 25px;
background: url("../../images/feature-back.png") 100% 0 no-repeat;
}
.split-feature h2 {
margin: 0 0 0.2em 0;
font-family: verdana, arial, sans-serif;
font-size: 1.4em;
}
.split-feature h2 a {
text-decoration: none;
font-size: medium;
font-style: italic;
}
.split-feature-one p {
margin-left: 220px;
}
.feature-download h3 {
font: 85% tahoma, verdana, sans-serif;
margin: 5px 0 0 0;
background: url("../../images/download.gif") 0 100%;
padding-bottom: 5px;
}
.feature-download h3 a {
display: block;
background: url("../../images/download.gif") 0 0;
font-weight: bold;
width: 165px;
padding: 12px 25px 5px 10px;
text-decoration: none;
color: #5A9A3B;
}
.feature-download h3 a:hover {
text-decoration: underline;
color: #275113;
}
.feature-download {
float: left;
width: 200px;
padding-right: 20px;
}
ol.top-10, ol.top-10 li {
margin: 0;
padding: 0;
list-style: none;
}
ol.top-10 li a {
display: block;
text-align: right;
padding: 1px 0 1px 20px;
border-top: 1px solid #eee;
text-decoration: none;
width: 160px;
background: url("../../images/top-10.gif") 0 0 no-repeat;
cursor: pointer; /* for IE as it ignores floating <strong>s */
font-size: 85%;
}
ol.top-10 li a:hover strong {
text-decoration: underline;
}
ol.top-10 li.top-10-2 a { background-position: 0 -50px; }
ol.top-10 li.top-10-3 a { background-position: 0 -100px; }
ol.top-10 li.top-10-4 a { background-position: 0 -150px; }
ol.top-10 li.top-10-5 a { background-position: 0 -200px; }
ol.top-10 li.top-10-6 a { background-position: 0 -250px; }
ol.top-10 li.top-10-7 a { background-position: 0 -300px; }
ol.top-10 li.top-10-8 a { background-position: 0 -350px; }
ol.top-10 li.top-10-9 a { background-position: 0 -400px; }
ol.top-10 li.top-10-10 a { background-position: 0 -450px; }
ol.top-10 li strong {
float: left;
}
#front-search {
text-align: center;
margin: 1.5em 0 1em 0;
}
.front-section-left, .front-section-right {
width: 220px;
float: left;
color: #666;
}
.front-section-left {
padding: 5px 0 5px 190px;
}
.front-section-right {
padding: 5px 70px 5px 0;
}
.front-section-left h2, .front-section-right h2{
margin: 0;
}
.front-section-left ul, .front-section-right ul {
margin: 0;
padding: 0;
margin-bottom: 2em;
}
.front-section-left li, .front-section-right li {
padding: 0.2em 0;
margin-left: 20px;
}
.front-section {
width: 220px;
padding: 5px 0 5px 25px;
float: left;
color: #666;
}
.front-section h2 {
margin: 0;
}
.front-section ul {
margin: 0;
padding: 0;
margin-bottom: 2em;
}
.front-section li {
padding: 0.2em 0;
margin-left: 20px;
}
a.top-feature {
float: left;
background: #fff;
}
a.top-feature img {
margin: 0;
padding: 0;
}

View File

@@ -1,46 +0,0 @@
.amo-form div {
margin: 1em 0;
}
.amo-submit {
background-color: #eee;
border: 2px #999 outset;
}
.amo-submit:hover {
background-color: #fff;
cursor: pointer;
}
.amo-cancel {
}
.amo-label-large, .amo-label-medium, .amo-label-small {
border-bottom: 1px dashed #eee;
float: left;
font-weight: bold;
}
.amo-label-large {
width: 14em;
}
.amo-label-medium {
width: 10em;
}
.amo-label-small {
width: 8em;
}
.amo-label-xsmall {
width: 6em;
}
.amo-form-error {
background-color: #eee;
border: 1px dashed #c66;
color: #c00;
margin: 5px 0;
padding: .5em;
}

View File

@@ -1,114 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/rss">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><xsl:value-of select="channel/title"/></title>
<meta name="keywords" content="mozilla update, mozilla extensions, mozilla plugins, thunderbird themes, thunderbird extensions, firefox extensions, firefox themes" />
<link rel="stylesheet" type="text/css" href="/css/print.css" media="print" />
<link rel="stylesheet" type="text/css" href="/css/base/content.css" media="all" />
<link rel="stylesheet" type="text/css" href="/css/cavendish/content.css" title="Cavendish" media="all" />
<link rel="stylesheet" type="text/css" href="/css/base/template.css" media="screen" />
<link rel="stylesheet" type="text/css" href="/css/cavendish/template.css" title="Cavendish" media="screen" />
<link rel="stylesheet" type="text/css" href="/css/forms.css" media="screen" />
<link rel="home" title="Home" href="https://addons.mozilla.org/" />
<link rel="alternate" type="application/rss+xml" href="{self}" title="{title}" />
<link rel="shortcut icon" href="{channel/image/url}" />
</head>
<body>
<div id="container">
<p class="skipLink"><a href="#firefox-feature" accesskey="2">Skip to main content</a></p>
<div id="mozilla-com"><a href="http://www.mozilla.com/">Visit Mozilla.com</a></div>
<div id="header">
<div id="key-title">
<h1>
<a href="/firefox/" title="Return to home page" accesskey="1">
<img src="/images/title-firefox.gif" width="276" height="54" alt="Firefox Add-ons Beta" />
</a>
</h1>
<script type="text/javascript">
//<![CDATA[
addUsernameToHeader();
//]]>
</script>
<form id="search" method="get" action="/search.php" title="Search Mozilla Update">
<div>
<label for="q" title="Search Mozilla Update">search:</label>
<input type="text" id="q" name="q" accesskey="s" size="10" />
<input type="hidden" name="app" value="firefox" />
<input type="submit" id="submit" value="Go" />
</div>
</form>
</div>
<div id="key-menu">
<ul id="menu-firefox">
<li><a href="/firefox/">Home</a></li>
<li><a href="/firefox/extensions/">Extensions</a></li>
<li><a href="/firefox/plugins/">Plugins</a></li>
<li><a href="/firefox/search-engines/">Search Engines</a></li>
<li><a href="/firefox/themes/">Themes</a></li>
</ul>
</div>
<!-- end key-menu -->
</div>
<!-- end header -->
<hr class="hide" />
<div id="mBody">
<h1><xsl:value-of select="channel/title"/></h1>
<p>
This is an RSS feed designed to be read by an RSS reader. Which you aren't.
</p>
<p>
<strong>What's an RSS Feed?</strong><br />
<acronym title="Really Simple Syndication">RSS</acronym> feeds
allow you to take the latest content from our site and view it in other places
such as a feed reader, your browser or your website. Feeds make it easy and
convenient to stay on top of the latest from Mozilla Add-ons.
</p>
<p>
<strong>How do I use this feed?</strong><br/>
To add this feed as a live bookmark in Firefox, simply click on the orange icon
(<img src="/images/rss.png" alt="RSS" />) in the address bar. Otherwise, take the
URL of this feed and add it to your favorite RSS reader.
</p>
<p>Preview of this feed:</p>
<ul>
<xsl:for-each select="channel/item">
<li>
<strong><a href="{link}"><xsl:value-of select="title"/></a></strong>
</li>
</xsl:for-each>
</ul>
</div>
<hr class="hide" />
<div id="footer">
<p><a href="/firefox/" class="switch-fx">Firefox Add-ons </a><a href="/thunderbird/" class="switch-tb">Thunderbird Add-ons </a><a href="/mozilla/" class="switch-suite">Mozilla Suite Add-ons </a></p>
<p><a href="/faq.php">FAQ</a> <a href="/feeds.php">Feeds/RSS</a> <a href="/login.php">Log In</a> <a href="/logout.php">Logout</a> <a href="/createaccount.php">Register</a></p>
<p><a href="http://www.mozilla.org/privacy-policy.html">Privacy Policy</a> <a href="http://www.mozilla.org/foundation/donate.html">Donate to Mozilla</a> <a href="http://mozilla.org/">The Mozilla Organization</a></p>
<p><span>Copyright &#169; 2004-2006</span> <a href="http://www.xramp.com/">256-bit SSL Encryption provided by XRamp</a></p>
</div>
</div>
<!-- close container -->
<div class="disclaimer">
Mozilla is providing links to these applications as a courtesy, and makes no representations
regarding the applications or any information related thereto. Any questions, complaints or
claims regarding the applications must be directed to the appropriate software vendor. See
our <a href="/support.php">Support Page</a> for support information and contacts.
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

View File

@@ -1,56 +0,0 @@
<?php
/**
* Home page for extensions, switchable on application. Since v1 used GUIDs, the
* flow on this page is a little confusing (we need to support both name and GUID.
*
* @package amo
* @subpackage docs
*/
$currentTab = 'extensions';
startProcessing('extensions.tpl', 'extensions', $compileId);
require_once('includes.php');
$_app = array_key_exists('app', $_GET) ? $_GET['app'] : null;
// Determine our application.
switch( $_app ) {
case 'mozilla':
$clean['app'] = 'Mozilla';
break;
case 'thunderbird':
$clean['app'] = 'Thunderbird';
break;
case 'firefox':
default:
$clean['app'] = 'Firefox';
break;
}
$amo = new AMO_Object();
// Despite what $clean holds, GUIDs were used in v1 so we have to support them
if (preg_match('/^(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)$/i',$_app)) {
$newestExtensions = $amo->getNewestAddonsByGuid($_app,'E',10);
$popularExtensions = $amo->getPopularAddonsByGuid($_app,'E',10);
/* This is a bit of a cheesy hack because of the way the templates are written.
* It's looking for the name of the app in $_GET, so here we are...*/
$_GET['app'] = strtolower($amo->getAppNameFromGuid($_app));
} else {
$newestExtensions = $amo->getNewestAddons($clean['app'],'E',10);
$popularExtensions = $amo->getPopularAddons($clean['app'],'E',10);
}
// Assign template variables.
$tpl->assign(
array( 'newestExtensions' => $newestExtensions,
'popularExtensions' => $popularExtensions,
'title' => 'Add-ons',
'currentTab' => $currentTab,
'content' => 'extensions.tpl',
'sidebar' => 'inc/category-sidebar.tpl',
'cats' => $amo->getCats('E'),
'type' => 'E')
);
?>

View File

@@ -1,73 +0,0 @@
<?php
/**
* FAQ page.
*
* @package amo
* @subpackage docs
*
* @todo FAQ search?
*/
startProcessing('faq.tpl','faq',$compileId);
require_once('includes.php');
$db->query("
SELECT
`title`,
`text`
FROM
`faq`
WHERE
`active` = 'YES'
ORDER BY
`index` ASC,
`title` ASC
",SQL_ALL, SQL_ASSOC);
$faq = $db->record;
$sql = "
SELECT
`AppName`,
`GUID`,
`Version`
FROM
`applications`
WHERE
`public_ver`='YES'
ORDER BY
Appname, Version
";
$db->query($sql,SQL_ALL,SQL_ASSOC);
if (is_array($db->record)) {
foreach ($db->record as $row) {
$appVersions[] = array(
'displayVersion' => $row['Version'],
'appName' => $row['AppName'],
'guid' => $row['GUID']
);
}
}
$links = array(
array( 'href' => './faq.php',
'title' => 'Frequently Asked Questions',
'text' => 'FAQ'),
array( 'href' => './policy.php',
'title' => 'Addons Policies',
'text' => 'Policy')
);
// Send FAQ data to Smarty object.
$tpl->assign(
array( 'faq' => $faq,
'links' => $links,
'sidebar' => 'inc/nav.tpl',
'content' => 'faq.tpl',
'title' => 'Frequently Asked Questions',
'appVersions' => $appVersions )
);
?>

View File

@@ -1,17 +0,0 @@
<?php
/**
* Home page for extensions, switchable on application.
*
* @package amo
* @subpackage docs
*/
startProcessing('feeds.tpl', null, $compileId,'nonav');
require_once('includes.php');
// Assign template variables.
$tpl->assign(
array( 'title' => 'Feeds',
'content' => 'feeds.tpl')
);
?>

View File

@@ -1,175 +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 *****
startProcessing('finalists.tpl',null,$compileId,'nonav');
require_once('includes.php');
/**
* Setting up variables.
*/
$guids = array(
'{34274bf4-1d97-a289-e984-17e546307e4f}',
'{097d3191-e6fa-4728-9826-b533d755359d}',
'{B9DAB69C-460E-4085-AE6C-F95B0D858581}',
'{DDC359D1-844A-42a7-9AA1-88A850A938A8}',
'{89506680-e3f4-484c-a2c0-ed711d481eda}',
'{3CE993BF-A3D9-4fd2-B3B6-768CBBC337F8}',
'{268ad77e-cff8-42d7-b479-da60a7b93305}',
'{77b819fa-95ad-4f2c-ac7c-486b356188a9}',
'{bbc21d30-1cff-11da-8cd6-0800200c9a66}',
'{37E4D8EA-8BDA-4831-8EA1-89053939A250}',
'{a089fffd-e0cb-431b-8d3a-ebb8afb26dcf}',
'Reveal@sourmilk.net',
'{a6ca9b3b-5e52-4f47-85d8-cca35bb57596}',
'{53A03D43-5363-4669-8190-99061B2DEBA5}',
'separe@m4ng0.lilik.it',
'xpose@viamatic.com',
'{c45c406e-ab73-11d8-be73-000a95be3b12}',
'{D5EDC062-A372-4936-B782-BD611DD18D86}'
);
$guids_tmp = array();
foreach ($guids as $guid) {
$guids_tmp[] = "'".$guid."'";
}
$guids_imploded = implode(',',$guids_tmp);
$descriptions = array(
'{34274bf4-1d97-a289-e984-17e546307e4f}'=>"Block ads including Flash ads from their source. Right click on an ad and select Adblock to block ads. Hit the status-element and see what has or hasn't been blocked.",
'{097d3191-e6fa-4728-9826-b533d755359d}'=>"Manage Extensions, Themes, Downloads, and more including Web content via Firefoxs sidebar.",
'{B9DAB69C-460E-4085-AE6C-F95B0D858581}'=>"Blog directly within Firefox to LiveJournal, WordPress or Blogger. Select Deepest Sender from the Tools menu.",
'{DDC359D1-844A-42a7-9AA1-88A850A938A8}'=>"DownThemAll lets you filter and download all the links contained in any web-page, and lets you pause and resume downloads from previous Firefox sessions.",
'{89506680-e3f4-484c-a2c0-ed711d481eda}'=>"View open Tabs and Windows with Showcase. You can use it in two ways: global mode (F12) or local mode (Shift + F12). In global mode, a new window will be opened with thumbnails of the pages you've opened in all windows. In local mode, only content in tabs of your current window will be shown.
You can also right click in those thumbnails to perform the most usual operations on them. Mouse middle button can be used to zoom a thumbnail, although other actions can be assigned to it.",
'{3CE993BF-A3D9-4fd2-B3B6-768CBBC337F8}'=>"Get international weather forecasts and display it in any toolbar or status bar.",
'{268ad77e-cff8-42d7-b479-da60a7b93305}'=>"Select from several of your favorite toolbars including including Google, Yahoo, Ask Jeeves, Teoma, Amazon, Download.com and others with one toolbar. The entire toolbar reconfigures when you select a different engine and it includes many advanced features found in each engine.
You can also easily repeat your search on all engines included in toolbar.",
'{77b819fa-95ad-4f2c-ac7c-486b356188a9}'=>"View pages with in Internet Explorer with IE Tab. Select the Firefox icon on the bottom right of the browser to switch to using the Internet Explorer engine or Firefox to switch to IE.",
'{bbc21d30-1cff-11da-8cd6-0800200c9a66}'=>"Allows sticky notes to be added to any web page, and viewed upon visiting the Web page again. You can also share sticky notes. Requires account.",
'{37E4D8EA-8BDA-4831-8EA1-89053939A250}'=>"PDF Download Extension allows you to choose if you want to view a PDF file inside the browser (as PDF or HTML), if you want to view it outside Firefox with your default or custom PDF reader, or if you want to download it.",
'{a089fffd-e0cb-431b-8d3a-ebb8afb26dcf}'=>"Platypus is a Firefox extension which lets you modify a Web page from your browser -- \"What You See Is What You Get\" -- and then save those changes as a GreaseMonkey script so that they'll be repeated the next time you visit the page.",
'Reveal@sourmilk.net'=>"Reveal allows you to see thumbnails of pages in your history by mousing over the back and forward buttons. With many tabs open, quickly find the page you want, by pressing F2. Reveal also has a rectangular magnifying glass you can use to zoom in on areas of any web page. Comes with a quick tour of all the features. ",
'{a6ca9b3b-5e52-4f47-85d8-cca35bb57596}'=>"A lightweight RSS and Atom feed aggregator. Alt+S to open Sage in the Sidebar to start reading feed content.",
'{53A03D43-5363-4669-8190-99061B2DEBA5}'=>"Highlight text, create sticky notes, and more to Web pages and Web sites that are saved to your desktop. Scrapbook Includes full text search and quick filtering of saved pages.",
'separe@m4ng0.lilik.it'=>"Manage tabs by creating a tab separator. Right click on a Tab to add a new Tab separator. Click on the Tab separator to view thumbnail images of web sites that are to the left and right of the Tab separator.",
'xpose@viamatic.com'=>"Click on the icon in the status bar to view all Web pages in Tabbed windows as thumbnail images. Press F8 to activate foXpose.",
'{c45c406e-ab73-11d8-be73-000a95be3b12}'=>"Web developer toolbar includes various development tools such as window resizing, form and image debugging, links to page validation and optimization tools and much more.",
'{D5EDC062-A372-4936-B782-BD611DD18D86}'=>"RSS news reader with integrated with services such as Feedster and weather information. Includes online help documentation."
);
$screenshots = array(
'{34274bf4-1d97-a289-e984-17e546307e4f}'=>'adblock-mini.png',
'{097d3191-e6fa-4728-9826-b533d755359d}'=>'all-in-one-mini.png',
'{B9DAB69C-460E-4085-AE6C-F95B0D858581}'=>'deepest-sender-mini.png',
'{DDC359D1-844A-42a7-9AA1-88A850A938A8}'=>'downthemall-small.png',
'{89506680-e3f4-484c-a2c0-ed711d481eda}'=>'firefox-showcase.png',
'{3CE993BF-A3D9-4fd2-B3B6-768CBBC337F8}'=>'forecastfoxenhanced-small.png',
'{268ad77e-cff8-42d7-b479-da60a7b93305}'=>'groowe-small.png',
'{77b819fa-95ad-4f2c-ac7c-486b356188a9}'=>'IE-Tab.png',
'{bbc21d30-1cff-11da-8cd6-0800200c9a66}'=>'stickies-small.png',
'{37E4D8EA-8BDA-4831-8EA1-89053939A250}'=>'pdf-download.png',
'{a089fffd-e0cb-431b-8d3a-ebb8afb26dcf}'=>'platypus.png',
'Reveal@sourmilk.net'=>'reveal.png',
'{a6ca9b3b-5e52-4f47-85d8-cca35bb57596}'=>'sage.png',
'{53A03D43-5363-4669-8190-99061B2DEBA5}'=>'scrapbook-final.png',
'separe@m4ng0.lilik.it'=>'separe.png',
'xpose@viamatic.com'=>'xpose-small.png',
'{c45c406e-ab73-11d8-be73-000a95be3b12}'=>'web-developer-toolbar-small.png',
'{D5EDC062-A372-4936-B782-BD611DD18D86}'=>'wizz-small.png'
);
$authors = array(
'{34274bf4-1d97-a289-e984-17e546307e4f}'=>'Ben Karel (and the Adblock Crew)',
'{DDC359D1-844A-42a7-9AA1-88A850A938A8}'=>'Federico Parodi',
'{a6ca9b3b-5e52-4f47-85d8-cca35bb57596}'=>'Peter Andrews (and the Sage Team)',
'{53A03D43-5363-4669-8190-99061B2DEBA5}'=>'Taiga Gomibuchi',
'separe@m4ng0.lilik.it'=>'Massimo Mangoni',
'{77b819fa-95ad-4f2c-ac7c-486b356188a9}'=>'yuoo2k and Hong Jen Yee (PCMan)'
);
$finalists = array();
// Get data for GUIDs.
$finalists_sql = "
SELECT
m.guid,
m.id,
m.name,
m.downloadcount,
m.homepage,
v.dateupdated,
v.uri,
v.size,
v.version,
(
SELECT u.username
FROM userprofiles u
JOIN authorxref a ON u.userid = a.userid
WHERE a.id = m.id
ORDER BY u.userid DESC
LIMIT 1
) as username
FROM
main m
JOIN version v ON m.id = v.id
WHERE
v.vid = (SELECT max(vid) FROM version WHERE id=m.id AND approved='YES') AND
type = 'E' AND
m.guid IN({$guids_imploded})
ORDER BY
LTRIM(m.name)
";
$db->query($finalists_sql, SQL_ALL, SQL_ASSOC);
foreach ($db->record as $var => $val) {
$val['author'] = !empty($authors[$val['guid']]) ? $authors[$val['guid']] : $val['username'];
$finalists[] = $val;
}
// Assign template variables.
$tpl->assign(
array(
'title' => 'Extend Firefox Contest Finalists',
'screenshots' => $screenshots,
'descriptions' => $descriptions,
'finalists' => $finalists,
'content' => 'finalists.tpl')
);
?>

View File

@@ -1,30 +0,0 @@
<?php
/**
* Addon history page. Displays all the previous releases for a particular
* addon or theme
*
* @package amo
* @subpackage docs
*
* @todo break this into a simpler design, probably a smaller table with an abbreviated desc.
* @todo do we still want to allow users access to old versions?
*/
// Get our addon ID.
$clean['ID'] = intval($_GET['id']);
$sql['ID'] =& $clean['ID'];
startProcessing('history.tpl',$clean['ID'],$compileId);
require_once('includes.php');
$addon = new AddOn($sql['ID']);
$addon->getHistory();
// Assign template variables.
$tpl->assign(
array( 'addon' => $addon,
'title' => $addon->Name.' Version History',
'content' => 'history.tpl',
'sidebar' => 'inc/addon-sidebar.tpl')
);
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 181 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 526 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 776 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 757 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Some files were not shown because too many files have changed in this diff Show More