Compare commits

..

10 Commits

Author SHA1 Message Date
ssu%netscape.com
5015e62d91 updated comment
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65907 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-14 01:42:39 +00:00
ssu%netscape.com
2a627a36b7 trying to fix shortcut creation routines and add uninstall feature
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65906 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-14 00:15:05 +00:00
ssu%netscape.com
a69924abd2 fixed pr2 string
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65747 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-13 01:21:11 +00:00
ssu%netscape.com
9746b6018a added creation of shortcuts code
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65746 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-13 01:14:10 +00:00
ssu%netscape.com
ee45cb13fa changed beta version from b1 to b2
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65745 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-13 01:12:33 +00:00
ssu%netscape.com
b928df1b00 changed logging string to be more similar to the other logging string format
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65744 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-13 00:58:03 +00:00
ssu%netscape.com
3324619a2d added code to dereference the NetscapeInstantMessenger key
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65578 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-10 23:02:48 +00:00
ssu%netscape.com
59e5e73bdf fixing bugs 27598, 18563, 23240, 33348
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65545 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-10 02:56:55 +00:00
ssu%netscape.com
c96b32104d fixing bugs 16068, 25595, 21034, 34664
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65526 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-08 02:28:10 +00:00
(no author)
e4ccec7149 This commit was manufactured by cvs2svn to create branch 'SSU_PERSONAL_M16'.
git-svn-id: svn://10.0.0.236/branches/SSU_PERSONAL_M16@65364 18797224-902f-48f8-a5cc-f745e15eee43
2000-04-05 06:58:58 +00:00
236 changed files with 41540 additions and 4681 deletions

View File

@@ -1,5 +0,0 @@
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>

View File

@@ -1,25 +0,0 @@
SERVER REQUIREMENTS
- Apache 1.3 or higher with mod_rewrite enabled
- PHP 4.3.2 or higher
- CakePHP 1.1.7.3363 or higher
- MySQL (preferred) or PostgreSQL
INSTALLATION:
- All files accompanying this README should be placed into the /app directory of
your CakePHP install. Once complete, you should have a directory structure similar
to the following where (/) is the base of your domain:
/
app/
config/
controllers/
models/
webroot/
...
cake/
vendors/
- Import the database schema (/app/config/dist.sql) into your database
- Rename database.dist.php to database.php and edit the file to reflect your
database configuration
- Rename bootstrap.dist.php to bootstrap.php and follow the editing instructions
within. All fields except APP_* and MAX_YEAR are optional.

View File

@@ -1,4 +0,0 @@
<?php
class AppController extends Controller {
}
?>

View File

@@ -1,4 +0,0 @@
<?php
class AppModel extends Model {
}
?>

View File

@@ -1,76 +0,0 @@
;<?php die() ?>
; SVN FILE: $Id: acl.ini.php,v 1.3 2006-10-08 03:39:21 reed%reedloden.com Exp $
;/**
; * Short description for file.
; *
; *
; * PHP versions 4 and 5
; *
; * CakePHP : Rapid Development Framework <http://www.cakephp.org/>
; * Copyright (c) 2006, Cake Software Foundation, Inc.
; * 1785 E. Sahara Avenue, Suite 490-204
; * Las Vegas, Nevada 89104
; *
; * Licensed under The MIT License
; * Redistributions of files must retain the above copyright notice.
; *
; * @filesource
; * @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
; * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
; * @package cake
; * @subpackage cake.app.config
; * @since CakePHP v 0.10.0.1076
; * @version $Revision: 1.3 $
; * @modifiedby $LastChangedBy: phpnut $
; * @lastmodified $Date: 2006-10-08 03:39:21 $
; * @license http://www.opensource.org/licenses/mit-license.php The MIT License
; */
; acl.ini.php - Cake ACL Configuration
; ---------------------------------------------------------------------
; Use this file to specify user permissions.
; aco = access control object (something in your application)
; aro = access request object (something requesting access)
;
; User records are added as follows:
;
; [uid]
; groups = group1, group2, group3
; allow = aco1, aco2, aco3
; deny = aco4, aco5, aco6
;
; Group records are added in a similar manner:
;
; [gid]
; allow = aco1, aco2, aco3
; deny = aco4, aco5, aco6
;
; The allow, deny, and groups sections are all optional.
; NOTE: groups names *cannot* ever be the same as usernames!
;
; ACL permissions are checked in the following order:
; 1. Check for user denies (and DENY if specified)
; 2. Check for user allows (and ALLOW if specified)
; 3. Gather user's groups
; 4. Check group denies (and DENY if specified)
; 5. Check group allows (and ALLOW if specified)
; 6. If no aro, aco, or group information is found, DENY
;
; ---------------------------------------------------------------------
;-------------------------------------
;Users
;-------------------------------------
[username-goes-here]
groups = group1, group2
deny = aco1, aco2
allow = aco3, aco4
;-------------------------------------
;Groups
;-------------------------------------
[groupname-goes-here]
deny = aco5, aco6
allow = aco7, aco8

View File

@@ -1,32 +0,0 @@
<?php
/* REQUIRED - APP_NAME is used on all <title>s and mail names/subjects. APP_BASE
* should be a FQDN with protocol minus the trailing slash e.g. http://example.tld/party
*/
define('APP_NAME', '');
define('APP_EMAIL', '');
define('APP_BASE', '');
/* You should specify a Google Map API key here. Without it, all mapping features
* will be disabled. To obtain a key, visit http://www.google.com/apis/maps/
*/
define('GMAP_API_KEY', '');
/* The search API key is used to generate spelling suggestions for locations not
* not found during a Geocode operation. You may obtain a key here: http://code.google.com/apis/soapsearch/
*/
define('GSEARCH_API_KEY', '');
/* The maximum year shown for party registrations */
define('MAX_YEAR', 2007);
/* The Flickr API is used to show photos of each party on the individual party
* pages and home page. See http://flickr.com/services/api/keys/ to obtain a key
*/
define('FLICKR_API_KEY', '');
/* The tag prefix is used to limit the results returned to a specific party.
* e.g. any photo tagged with FirefoxParty11 will be shown on party 11's page.
* Photos tagged with only the prefix are shown on the front page (so choose wisely! ;) ).
*/
define('FLICKR_TAG_PREFIX', '');
?>

View File

@@ -1,147 +0,0 @@
<?php
/* SVN FILE: $Id: core.php,v 1.4 2006-10-08 03:39:21 reed%reedloden.com Exp $ */
/**
* This is core configuration file.
*
* Use it to configure core behaviour ofCake.
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2006, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.app.config
* @since CakePHP v 0.2.9
* @version $Revision: 1.4 $
* @modifiedby $LastChangedBy: phpnut $
* @lastmodified $Date: 2006-10-08 03:39:21 $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
* If you do not have mod rewrite on your system
* or if you prefer to use CakePHP pretty urls.
* uncomment the line below.
* Note: If you do have mod rewrite but prefer the
* CakePHP pretty urls, you also have to remove the
* .htaccess files
* release/.htaccess
* release/app/.htaccess
* release/app/webroot/.htaccess
*/
// define ('BASE_URL', env('SCRIPT_NAME'));
/**
* Set debug level here:
* - 0: production
* - 1: development
* - 2: full debug with sql
* - 3: full debug with sql and dump of the current object
*
* In production, the "flash messages" redirect after a time interval.
* With the other debug levels you get to click the "flash message" to continue.
*
*/
define('DEBUG', 0);
/**
* Turn of caching checking wide.
* You must still use the controller var cacheAction inside you controller class.
* You can either set it controller wide, or in each controller method.
* use var $cacheAction = true; or in the controller method $this->cacheAction = true;
*/
define('CACHE_CHECK', false);
/**
* Error constant. Used for differentiating error logging and debugging.
* Currently PHP supports LOG_DEBUG
*/
define('LOG_ERROR', 2);
/**
* CakePHP includes 3 types of session saves
* database or file. Set this to your preferred method.
* If you want to use your own save handler place it in
* app/config/name.php DO NOT USE file or database as the name.
* and use just the name portion below.
*
* Setting this to cake will save files to /cakedistro/tmp directory
* Setting it to php will use the php default save path
* Setting it to database will use the database
*
*
*/
define('CAKE_SESSION_SAVE', 'database');
/**
* If using you own table name for storing sessions
* set the table name here.
* DO NOT INCLUDE PREFIX IF YOU HAVE SET ONE IN database.php
*
*/
define('CAKE_SESSION_TABLE', 'sessions');
/**
* Set a random string of used in session.
*
*/
define('CAKE_SESSION_STRING', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');
/**
* Set the name of session cookie
*
*/
define('CAKE_SESSION_COOKIE', 'sess');
/**
* Set level of Cake security.
*
*/
define('CAKE_SECURITY', 'high');
/**
* Set Cake Session time out.
* If CAKE_SECURITY define is set
* high: multiplied by 10
* medium: is multiplied by 100
* low is: multiplied by 300
*
* Number below is seconds.
*/
define('CAKE_SESSION_TIMEOUT', '120');
/**
* Uncomment the define below to use cake built in admin routes.
* You can set this value to anything you want.
* All methods related to the admin route should be prefixed with the
* name you set CAKE_ADMIN to.
* For example: admin_index, admin_edit
*/
// define('CAKE_ADMIN', 'admin');
/**
* The define below is used to turn cake built webservices
* on or off. Default setting is off.
*/
define('WEBSERVICES', 'off');
/**
* Compress output CSS (removing comments, whitespace, repeating tags etc.)
* This requires a/var/cache directory to be writable by the web server (caching).
* To use, prefix the CSS link URL with '/ccss/' instead of '/css/' or use Controller::cssTag().
*/
define('COMPRESS_CSS', false);
/**
* If set to true, helpers would output data instead of returning it.
*/
define('AUTO_OUTPUT', false);
/**
* If set to false, session would not automatically be started.
*/
define('AUTO_SESSION', true);
/**
* Set the max size of file to use md5() .
*/
define('MAX_MD5SIZE', (5 * 1024) * 1024);
/**
* To use Access Control Lists with Cake...
*/
define('ACL_CLASSNAME', 'DB_ACL');
define('ACL_FILENAME', 'dbacl' . DS . 'db_acl');
?>

View File

@@ -1,11 +0,0 @@
<?php
class DATABASE_CONFIG {
var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => '',
'password' => '',
'database' => '');
}
?>

View File

@@ -1,72 +0,0 @@
<?php
/* SVN FILE: $Id: inflections.php,v 1.3 2006-10-08 03:39:21 reed%reedloden.com Exp $ */
/**
* Custom Inflected Words.
*
* This file is used to hold words that are not matched in the normail Inflector::pluralize() and
* Inflector::singularize()
*
* PHP versions 4 and %
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2006, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.app.config
* @since CakePHP v 1.0.0.2312
* @version $Revision: 1.3 $
* @modifiedby $LastChangedBy: phpnut $
* @lastmodified $Date: 2006-10-08 03:39:21 $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
* This is a key => value array of regex used to match words.
* If key matches then the value is returned.
*
* $pluralRules = array('/(s)tatus$/i' => '\1\2tatuses', '/^(ox)$/i' => '\1\2en', '/([m|l])ouse$/i' => '\1ice');
*/
$pluralRules = array();
/**
* This is a key only array of plural words that should not be inflected.
* Notice the last comma
*
* $uninflectedPlural = array('.*[nrlm]ese', '.*deer', '.*fish', '.*measles', '.*ois', '.*pox');
*/
$uninflectedPlural = array();
/**
* This is a key => value array of plural irregular words.
* If key matches then the value is returned.
*
* $irregularPlural = array('atlas' => 'atlases', 'beef' => 'beefs', 'brother' => 'brothers')
*/
$irregularPlural = array();
/**
* This is a key => value array of regex used to match words.
* If key matches then the value is returned.
*
* $singularRules = array('/(s)tatuses$/i' => '\1\2tatus', '/(matr)ices$/i' =>'\1ix','/(vert|ind)ices$/i')
*/
$singularRules = array();
/**
* This is a key only array of singular words that should not be inflected.
* You should not have to change this value below if you do change it use same format
* as the $uninflectedPlural above.
*/
$uninflectedSingular = $uninflectedPlural;
/**
* This is a key => value array of singular irregular words.
* Most of the time this will be a reverse of the above $irregularPlural array
* You should not have to change this value below if you do change it use same format
*
* $irregularSingular = array('atlases' => 'atlas', 'beefs' => 'beef', 'brothers' => 'brother')
*/
$irregularSingular = array_flip($irregularPlural);
?>

View File

@@ -1,43 +0,0 @@
<?php
/* SVN FILE: $Id: routes.php,v 1.5 2006-10-10 20:18:59 reed%reedloden.com Exp $ */
/**
* Short description for file.
*
* In this file, you set up routes to your controllers and their actions.
* Routes are very important mechanism that allows you to freely connect
* different urls to chosen controllers and their actions (functions).
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2006, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.app.config
* @since CakePHP v 0.2.9
* @version $Revision: 1.5 $
* @modifiedby $LastChangedBy: phpnut $
* @lastmodified $Date: 2006-10-10 20:18:59 $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
* Here, we are connecting '/' (base path) to controller called 'Pages',
* its action called 'display', and we pass a param to select the view file
* to use (in this case, /app/views/pages/home.thtml)...
*/
$Route->connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
/**
* ...and connect the rest of 'Pages' controller's urls.
*/
$Route->connect('/pages/edit', array('controller' => 'pages', 'action' => 'edit'));
$Route->connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
$Route->connect('/privacy-policy', array('controller' => 'pages', 'action' => 'privacy'));
?>

View File

@@ -1,80 +0,0 @@
CREATE TABLE `comments` (
`id` int(10) NOT NULL auto_increment,
`assoc` int(10) NOT NULL default '0',
`owner` int(10) NOT NULL default '0',
`time` int(15) NOT NULL default '0',
`text` text collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `guests` (
`id` int(10) NOT NULL auto_increment,
`pid` int(10) NOT NULL default '0',
`uid` int(10) NOT NULL default '0',
`invited` tinyint(1) NOT NULL default '1',
PRIMARY KEY (`id`),
KEY `pid` (`pid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `pages` (
`id` int(10) NOT NULL auto_increment,
`text` text collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `pages` (`id`, `text`) VALUES (1, '&lt;h2&gt;Join the Fun!&lt;/h2&gt;\n&lt;p&gt;All over the world, we&#39;re celebrating the launch of Firefox 2. Join the fun by hosting or attending a party. We&#39;re targeting the weekend of October 27th for the shared celebration, but if you&#39;re hosting, you make the call.&lt;/p&gt;\n\n&lt;p&gt;To join the fun, &lt;a href=&quot;/users/register&quot;&gt;register&lt;/a&gt; for a Firefox Party account, and sign up to host or attend.&lt;/p&gt;\n\n&lt;p style=&quot;border: 1px solid #555; background: #faffd4; padding: 5px; font&#45;weight: bold&quot;&gt;Be one of the first 50 party hosts registered and get three extra launch exclusive t&#45;shirts with your purchase of the &lt;a href=&quot;&quot;&gt;Firefox 2 Party Pack&lt;/a&gt;. We&#39;re selling the party packs and shirts at cost, so it&#39;s a great deal, and for parties with unusually large attendance, we&#39;ll be sending out additional swag for door prizes and other give&#45;aways. Stay tuned for updates!&lt;/p&gt;');
INSERT INTO `pages` (`id`, `text`) VALUES (2, '1162007940');
CREATE TABLE `parties` (
`id` int(10) NOT NULL auto_increment,
`owner` int(10) NOT NULL default '0',
`name` tinytext collate utf8_unicode_ci NOT NULL,
`vname` tinytext collate utf8_unicode_ci NOT NULL,
`address` tinytext collate utf8_unicode_ci NOT NULL,
`tz` int(2) NOT NULL default '0',
`website` text collate utf8_unicode_ci NOT NULL,
`notes` text collate utf8_unicode_ci NOT NULL,
`date` int(10) NOT NULL default '0',
`duration` tinyint(2) NOT NULL default '2',
`confirmed` tinyint(1) NOT NULL default '1',
`canceled` tinyint(1) NOT NULL default '0',
`guestcomments` tinyint(1) NOT NULL default '0',
`inviteonly` tinyint(1) NOT NULL default '0',
`invitecode` tinytext collate utf8_unicode_ci NOT NULL,
`lat` float NOT NULL default '0',
`long` float NOT NULL default '0',
`zoom` tinyint(2) NOT NULL default '1',
`useflickr` tinyint(1) NOT NULL default '0',
`flickrperms` tinyint(1) NOT NULL default '0',
`flickrid` tinytext collate utf8_unicode_ci NOT NULL,
`flickrusr` tinytext collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `sessions` (
`id` varchar(255) character set latin1 NOT NULL default '',
`data` text character set latin1,
`expires` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `users` (
`id` int(10) NOT NULL auto_increment,
`role` tinyint(1) NOT NULL default '0',
`email` varchar(255) collate utf8_unicode_ci NOT NULL,
`active` varchar(10) collate utf8_unicode_ci NOT NULL default '0',
`password` varchar(75) collate utf8_unicode_ci NOT NULL default '',
`salt` varchar(9) collate utf8_unicode_ci NOT NULL default '',
`name` tinytext collate utf8_unicode_ci NOT NULL,
`location` tinytext collate utf8_unicode_ci NOT NULL,
`tz` tinyint(2) NOT NULL default '0',
`website` text collate utf8_unicode_ci NOT NULL,
`lat` float NOT NULL default '0',
`long` float NOT NULL default '0',
`zoom` tinyint(2) NOT NULL default '1',
`showemail` tinyint(1) NOT NULL default '0',
`showloc` tinyint(1) NOT NULL default '1',
`showmap` tinyint(1) NOT NULL default '1',
UNIQUE KEY `email` (`email`),
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

View File

@@ -1,163 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
uses('sanitize');
class AdminController extends AppController {
var $name = 'Admin';
var $uses = array('Party', 'User', 'Comment');
var $components = array('Unicode');
function beforeFilter() {
if (empty($_SESSION['User']) || $_SESSION['User']['role'] != 1) {
$this->redirect('/');
die();
}
}
function index() {
$this->set('parties', $this->Party->findAll(null, null, "id ASC"));
}
function users() {
$this->set('users', $this->User->findAll(null, null, "id ASC"));
}
function comments() {
$this->set('comments', $this->Comment->findAll(null, null, "id ASC"));
}
function edit($type, $id) {
if (empty($this->data)) {
switch($type) {
case 'user':
$this->User->id = $id;
$user = $this->User->read();
$this->set('user', $user);
$this->data = $user;
break;
case 'party':
$this->Party->id = $id;
$party = $this->Party->read();
$this->set('party', $party);
$this->data = $party;
$this->data['Party']['name'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['name']));
$this->data['Party']['vname'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['vname']));
$this->data['Party']['website'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['website']));
$this->data['Party']['address'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['address']));
$this->data['Party']['notes'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['notes']));
$this->data['Party']['flickrusr'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['flickrusr']));
break;
case 'comment':
$this->Comment->id = $id;
$comment = $this->Comment->read();
$this->set('comment', $comment);
$uid = $this->User->findById($comment['Comment']['owner']);
$this->set('owner', $uid['User']['name']);
$this->data = $comment;
break;
}
}
else {
switch($type) {
case 'user':
$this->User->id = $id;
$this->User->save($this->data);
break;
case 'party':
$this->Party->id = $id;
$clean = new Sanitize();
$clean->cleanArray($this->data);
$this->Party->save($this->data);
break;
case 'comment':
$this->Comment->id = $id;
$this->Comment->save($this->data);
break;
}
if ($type != 'party')
$this->redirect('/admin/'.$type.'s');
else
$this->redirect('/admin/');
}
}
function delete($type, $id) {
switch($type) {
case 'user':
$this->User->del($id);
$this->User->query("DELETE FROM guests WHERE uid = $id");
break;
case 'party':
$this->Party->del($id);
$this->Party->query("DELETE FROM guests WHERE pid = $id");
$this->Party->query("DELETE FROM comments WHERE assoc = $id");
break;
case 'comment':
$this->Comment->del($id);
break;
}
if ($type != 'party')
$this->redirect('/admin/'.$type.'s');
else
$this->redirect('/admin/');
}
}
?>

View File

@@ -1,71 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
uses('sanitize');
class CommentsController extends AppController {
var $name = 'Comments';
var $components = array('Security');
function beforeFilter() {
$this->Security->requirePost('add');
}
function add($pid, $uid) {
if (!$this->Session->check('User') || $uid != $_SESSION['User']['id'])
$this->redirect('/');
if (!empty($this->data) && $this->Comment->canComment($pid, $uid)) {
// Explictly destroy the last model to avoid an edit instead of an insert
$this->Comment->create();
$clean = new Sanitize();
$text = $clean->html($this->data['Comment']['text']);
$this->data['Comment']['text'] = nl2br($text);
$this->data['Comment']['owner'] = $uid;
$this->data['Comment']['assoc'] = $pid;
$this->data['Comment']['time'] = mktime();
if ($this->Comment->save($this->data)) {
$this->redirect('/parties/view/'.$pid.'#c'.$this->Comment->getLastInsertID());
}
}
else
$this->redirect('/parties/view/'.$pid);
}
}
?>

View File

@@ -1,54 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class HashComponent extends Object {
function password($pass, $data) {
$string = $pass.uniqid(rand(), true).$data;
$salt = substr(md5($string), 0, 9);
$p = sha1($pass.$salt);
$rv = array('pass' => $p, 'salt' => $salt);
return $rv;
}
function keygen($chars) {
$key = null;
$pool = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ($i = 0; $i < $chars; $i++)
$key .= $pool{rand(0,61)};
return $key;
}
}

View File

@@ -1,83 +0,0 @@
<?php
class MailComponent extends Object {
var $from;
var $to;
var $reply;
var $subject;
var $message;
var $envelope;
var $head = "<strong>Firefox Party!</strong><br/>";
var $foot;
function mail($params) {
if (array_key_exists('from', $params))
$this->from = $params['from'];
if (array_key_exists('to', $params))
$this->to = $params['to'];
if (array_key_exists('reply', $params))
$this->reply = $params['reply'];
if (array_key_exists('subject', $params))
$this->subject = $params['subject'];
if (array_key_exists('message', $params))
$this->message = $params['message'];
if (array_key_exists('envelope', $params))
$this->envelope = $params['envelope'];
if (array_key_exists('type', $params)) {
switch($params['type']) {
case 'act':
$this->message = $this->head."<br/>\nThank you for registering! To activate your account, <a href=\"".$params['link']."\">click here</a> or paste the link below into your browser:<br/> ".$params['link'].$this->foot;
break;
case 'prec':
$this->message = $this->head."<br/>\nTo reset your password, <a href=\"".$params['link']."\">click here</a> or paste the link below into your browser:<br/> ".$params['link'].$this->foot;
break;
case 'invite':
$this->message = $this->head."<br/>\nYou've been invited by a friend to join them in celebrating the release of Firefox 2. Simply <a href=\"".$params['link']."\">click here</a> to confirm or cancel this invitation. If you don't already have an account, you'll need to create one.\n
If you're unable to use the link above, simply paste the following URL into your browser: ".$params['link'].$this->foot;
break;
case 'cancel':
$this->message = $this->head."<br/>\nThe party you were attending has been canceled. For more information, please <a href=\"".$params['link']."\">click here</a>, or see the link below.\n ".$params['link'].$this->foot;
break;
}
}
}
function make_headers($type='html') {
$headers = '';
switch($type) {
case 'html':
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
break;
}
if (!empty($this->from)) {
$headers .= "From: {$this->from}\r\n";
if (!empty($this->reply))
$headers .= "Reply-To: {$this->reply}\r\n";
}
return $headers;
}
function make_additional_parameters() {
if (!empty($this->envelope)) {
return '-f'.$this->envelope;
}
}
function send() {
mail($this->to, $this->subject, $this->message, $this->make_headers(), $this->make_additional_parameters());
}
}
?>

View File

@@ -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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class UnicodeComponent extends Object {
/**
* Unicode utilities. Converts and encodes characters up to 0xFFFF (65535)
*/
function unicode2utf($char) {
if ($char < 128) {
$rv = chr($char);
}
else if ($char < 2048) {
$rv = chr(192 + (($char - ($char % 64)) / 64));
$rv .= chr(128 + ($char % 64));
}
else {
$rv = chr(224 + (($char - ($char % 4096)) / 4096));
$rv .= chr(128 + ((($char % 4096) - ($char % 64)) / 64));
$rv .= chr(128 + ($char % 64));
}
return $rv;
}
function utf2unicode($char) {
if (ord($char{0}) < 128)
$rv = ord($char);
else if (ord($char{0}) < 224)
$rv = ((ord($char{0}) - 192) * 64) + (ord($char{1}) - 128);
else if (ord($char{0}) < 240)
$rv = ((ord($char{0}) - 224) * 4096) + ((ord($char{1}) - 128) * 64 + (ord($char{2}) - 128));
else
$rv = ((ord($char{0}) - 240) * 262144) + ((ord($char{1}) - 128) * 4096) + ((ord($char{2}) - 128) * 64) + (ord($char{3}) - 128);
return $rv;
}
}

View File

@@ -1,143 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
vendor('webServices');
class FeedsController extends AppController {
var $name = 'Feeds';
var $components = array('Unicode');
function index() {
header('Content-type: application/rss+xml');
$this->layout = 'ajax';
$this->set('count', $this->Feed->findCount());
}
function latest() {
header('Content-type: application/rss+xml');
$this->layout = 'ajax';
$this->set('latest', $this->Feed->findAll('', '', 'id DESC', 10, 1));
}
function users() {
header('Content-type: application/rss+xml');
$this->layout = 'ajax';
$this->set('count', $this->Feed->getUserCount());
}
function comments($id = null) {
$this->layout = 'ajax';
header('Content-type: application/rss+xml');
if (!is_numeric($id))
return;
$this->set('comments', $this->Feed->getComments($id));
$this->set('pid', $id);
}
function photos($id = null) {
$this->layout = 'ajax';
header('Content-type: application/atom+xml');
if (!is_numeric($id))
return;
$party = $this->Feed->findById($id);
$this->set('party', $party);
if (FLICKR_API_KEY != null && !$party['Feeds']['canceled']) {
if ($party['Feeds']['useflickr'] == 1) {
$data = array('type' => 'flickr', 'userid' => $party['Feeds']['flickrid'], 'randomize' => false);
$flickr = new webServices($data);
$photoset = $flickr->fetchPhotos(FLICKR_TAG_PREFIX.$id, 30, !$party['Feeds']['flickrperms']);
$this->set('flickr', $photoset);
}
}
}
function upcoming($limit = null) {
$this->layout = 'ajax';
header('Content-type: application/rss+xml');
($limit == null) ? $limit = 25 : $limit = intval($limit);
$this->set('latest', $this->Feed->findAll('WHERE date > '. time(), '', 'date ASC', $limit, 1));
}
function ical() {
$this->layout = 'ajax';
header('Content-type: text/calendar');
header("Content-Disposition: inline; filename=partylist.ics");
$back = time() - 172800;
$events = $this->Feed->findAll('WHERE date > '. $back, '', 'date ASC', null, 1);
$cal = array();
foreach($events as $event) {
$event['Feeds']['name'] =
preg_replace(array("/&#(\d{2,5});/e", "/(\n|\r|\f)/", "/\,/"),
array('$this->Unicode->unicode2utf(${1})', ' ', '\,'),
html_entity_decode($event['Feeds']['name']));
$event['Feeds']['address'] =
preg_replace(array("/&#(\d{2,5});/e", "/(\n|\r|\f)/", "/\,/"),
array('$this->Unicode->unicode2utf(${1})', ' ', '\,'),
html_entity_decode($event['Feeds']['address']));
$event['Feeds']['notes'] =
preg_replace(array("/&#(\d{2,5});/e", "/(\n|\r|\f)/", "/\,/"),
array('$this->Unicode->unicode2utf(${1})', ' ', '\,'),
html_entity_decode($event['Feeds']['notes']));
array_push($cal, $event);
}
$this->set('events', $cal);
}
function topguests($limit = null) {
$this->layout = 'ajax';
header('Content-type: application/rss+xml');
($limit == null) ? $limit = 25 : $limit = intval($limit);
$rv = $this->Feed->query("SELECT parties.name AS name,
guests.pid AS id,
COUNT(guests.pid) AS count
FROM guests
LEFT JOIN parties
ON guests.pid = parties.id
GROUP BY guests.pid
ORDER BY count DESC
LIMIT $limit");
$this->set('items', $rv);
}
}
?>

View File

@@ -1,92 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
uses('sanitize');
class PagesController extends AppController {
var $name = 'Pages';
var $components = array('Unicode');
function display() {
$this->pageTitle = 'Home';
$this->set('current', 'home');
$this->set('pcount', $this->Page->findCount());
$this->set('ucount', $this->Page->getUsers());
$text = $this->Page->query('SELECT text FROM pages WHERE id = 1');
$time = $this->Page->query('SELECT text FROM pages WHERE id = 2');
$this->set('time', $time[0]['pages']['text']);
$this->set('front_text', preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($text[0]['pages']['text'])));
}
function privacy() {
$this->pageTitle = 'Privacy Policy';
}
function edit() {
if (isset($_SESSION['User']['id']) && $_SESSION['User']['role'] == 1) {
if (empty($this->data)) {
$text = $this->Page->query('SELECT text FROM pages WHERE id = 1');
$time = $this->Page->query('SELECT text FROM pages WHERE id = 2');
$this->data['Pages']['text'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($text[0]['pages']['text']));
$this->set('selected', date('Y-m-d H:i:s', $time[0]['pages']['text']));
}
else {
// Paranoid? Nah...
if ($_SESSION['User']['role'] == 1) {
$clean = new Sanitize();
$clean->cleanArray($this->data);
$date = mktime($this->data['Pages']['date_hour'],
$this->data['Pages']['date_min'],
0,
$this->data['Pages']['date_month'],
$this->data['Pages']['date_day'],
$this->data['Pages']['date_year']);
$this->Page->execute('UPDATE pages SET text = "'.$this->data['Pages']['text'].'" WHERE pages.id = 1');
$this->Page->execute('UPDATE pages SET text = "'.$date.'" WHERE pages.id = 2');
$this->redirect('/');
}
}
}
else
die();
}
}
?>

View File

@@ -1,472 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
uses('sanitize');
vendor('webServices');
class PartiesController extends AppController {
var $name = 'Parties';
var $uses = array('Party', 'Comment');
var $helpers = array('Html', 'Form');
var $components = array('Hash', 'Mail', 'Unicode');
function index() {
$this->pageTitle = 'Party Map';
$this->set('current', 'map');
if (!empty($this->data)) {
$gcoder = new webServices(array('type' => 'geocode'));
$loc = $gcoder->geocode($this->data['Party']['mloc']);
if ($loc)
$this->set('map', 'initMashUp('.$loc['lat'].', '.$loc['lng'].');');
else
$this->set('map', 'initMashUp();');
}
else
$this->set('map', 'initMashUp();');
}
function add() {
if (!$this->Session->check('User'))
$this->redirect('/users/login');
$this->pageTitle = 'Create Party';
$this->set('current', 'create');
$this->set('map', 'mapInit()');
if(empty($this->data)) {
$this->set('utz', $_SESSION['User']['tz']);
$this->render();
}
else {
$temp = array('lat' => $this->data['Party']['lat'],
'long' => $this->data['Party']['long'],
'tz' => $this->data['Party']['tz']);
$clean = new Sanitize();
$clean->cleanArray($this->data);
$this->data['Party']['lat'] = floatval($temp['lat']);
$this->data['Party']['long'] = floatval($temp['long']);
$this->data['Party']['tz'] = intval($temp['tz']);
$this->set('utz', $this->data['Party']['tz']);
// Convert the selected time to GMT
$secoffset = ($this->data['Party']['tz'] * 60 * 60);
$offsetdate = gmmktime($this->data['Party']['hour_hour'],
$this->data['Party']['minute_min'],
0,
$this->data['Party']['month_hour'],
$this->data['Party']['day_day'],
$this->data['Party']['year_year']);
$this->data['Party']['date'] = ($offsetdate + $secoffset);
$this->data['Party']['duration'] = intval($this->data['Party']['duration']);
$this->data['Party']['invitecode'] = $this->Hash->keygen(10);
$this->data['Party']['owner'] = $_SESSION['User']['id'];
if (!preg_match("/^(http|https)\:\/\//i", $this->data['Party']['website']) &&
!empty($this->data['Party']['website']))
$this->Party->invalidate('website');
if ($this->Party->validates($this->data)) {
if($this->Party->save($this->data)) {
$this->Session->setFlash('Your party has been created!', 'infoFlash');
$this->redirect('/parties/view/'.$this->Party->getLastInsertId());
}
}
else {
$this->Session->setFlash('Please correct the errors below.', 'errorFlash');
}
}
}
function edit($id) {
$this->Party->id = $id;
$party = $this->Party->read();
$this->set('party', $party);
$this->pageTitle = 'Edit Party';
$this->set('current', 'create');
if (empty($_SESSION['User']['id']))
$this->redirect('/users/login/');
if ($party['Party']['owner'] != $_SESSION['User']['id'])
$this->redirect('/parties/view/'.$id);
else {
if (empty($this->data)) {
$this->data = $party;
$date = array('hour' => intval(date('h', $party['Party']['date'])),
'min' => intval(date('i', $party['Party']['date'])),
'mon' => intval(date('m', $party['Party']['date'])),
'day' => intval(date('d', $party['Party']['date'])),
'year' => intval(date('Y', $party['Party']['date'])),
'tz' => $party['Party']['tz']);
$this->set('date', $date);
$this->data['Party']['name'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['name']));
$this->data['Party']['vname'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['vname']));
$this->data['Party']['website'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['website']));
$this->data['Party']['address'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['address']));
$this->data['Party']['notes'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['notes']));
$this->data['Party']['flickrusr'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['Party']['flickrusr']));
if (GMAP_API_KEY != null) {
if ($this->data['Party']['lat'])
$this->set('map', 'mapInit('.$this->data['Party']['lat'].','.$this->data['Party']['long'].','.$this->data['Party']['zoom'].')');
else
$this->set('map', 'mapInit()');
}
}
else {
$clean = new Sanitize();
$temp = array('lat' => $clean->sql($this->data['Party']['lat']),
'long' => $clean->sql($this->data['Party']['long']),
'tz' => $clean->sql($this->data['Party']['tz']));
$clean->cleanArray($this->data);
$this->data['Party']['lat'] = floatval($temp['lat']);
$this->data['Party']['long'] = floatval($temp['long']);
$this->data['Party']['tz'] = intval($temp['tz']);
$secoffset = ($this->data['Party']['tz'] * 60 * 60);
$offsetdate = gmmktime($this->data['Party']['hour_hour'],
$this->data['Party']['minute_min'],
0,
$this->data['Party']['month_hour'],
$this->data['Party']['day_day'],
$this->data['Party']['year_year']);
$this->data['Party']['date'] = ($offsetdate - $secoffset);
$this->data['Party']['owner'] = $party['Party']['owner'];
$this->data['Party']['duration'] = intval($this->data['Party']['duration']);
$date = array('hour' => intval(date('h', $party['Party']['date'])),
'min' => intval(date('i', $party['Party']['date'])),
'mon' => intval(date('m', $party['Party']['date'])),
'day' => intval(date('d', $party['Party']['date'])),
'year' => intval(date('Y', $party['Party']['date'])),
'tz' => $party['Party']['tz']);
$this->set('date', $date);
if (!preg_match("/^(http|https)\:\/\//i", $this->data['Party']['website']) &&
!empty($this->data['Party']['website']))
$this->Party->invalidate('website');
if ($this->data['Party']['flickrusr'] != $party['Party']['flickrusr']) {
$params = array('type' => 'flickr', 'username' => $this->data['Party']['flickrusr']);
$flick = new webServices($params);
$this->data['Party']['flickrid'] = $flick->getFlickrId();
}
if ($this->Party->validates($this->data)) {
if ($this->Party->save($this->data)) {
$this->Session->setFlash('Party edited successfully.', 'infoFlash');
$this->redirect('parties/view/'.$id);
}
}
}
}
}
function view($id = null, $page = null) {
if ($id == 'all') {
$this->pageTitle = 'All Parties';
$this->set('current', 'parties');
//Paginate!
$count = $this->Party->findCount();
$pages = ceil($count/100);
if ($page == null)
$page = 1;
if ($page > 1)
$this->set('prev', $page - 1);
if ($page < $pages)
$this->set('next', $page + 1);
$deck = $this->Party->findAll(null, null, "id ASC", 100, $page);
shuffle($deck);
$this->set('parties', $deck);
}
else if (is_numeric($id)) {
$party = $this->Party->findById($id);
if (empty($party['Party']['id']))
$this->redirect('/parties/view/all');
$this->set('current', 'parties');
$this->set('host', $this->Party->getHost($party['Party']['owner']));
$this->set('party', $party);
$this->set('isguest', $this->Party->isGuest($id, @$_SESSION['User']['id']));
$this->pageTitle = $party['Party']['name'];
$this->set('map', 'mapInit('.$party['Party']['lat'].','.$party['Party']['long'].
','.$party['Party']['zoom'].',\'stationary\')');
$this->set('guests', $this->Party->getGuests($party['Party']['id']));
$this->set('comments', $this->Party->getComments($id));
if (FLICKR_API_KEY != null) {
if ($party['Party']['useflickr'] == 1) {
$data = array('type' => 'flickr', 'userid' => $party['Party']['flickrid'], 'randomize' => true);
$flickr = new webServices($data);
$photoset = $flickr->fetchPhotos(FLICKR_TAG_PREFIX.$party['Party']['id'], 15, (($party['Party']['flickrperms']) ? false : true));
$this->set('flickr', array_slice($photoset, 0, 9));
}
}
}
else
$this->redirect('/parties/view/all');
}
function invite($id = null) {
$this->pageTitle = "Invite a Guest";
if (is_numeric($id)) {
$party = $this->Party->findById($id);
if (empty($party['Party']['id']) ||
$party['Party']['owner'] != $_SESSION['User']['id'] ||
$party['Party']['canceled'] == 1)
$this->redirect('/parties/view/all');
else {
$this->set('partyid', $party['Party']['id']);
$this->set('inviteurl', APP_BASE.'/parties/invited/'.$party['Party']['invitecode']);
$clean = new Sanitize();
$uid = $clean->sql($_SESSION['User']['id']);
$email = $this->Party->query("SELECT email FROM users WHERE id = ".$uid);
if (!empty($this->data)) {
if ($this->Party->validates($this->data)) {
$message = array('from' => APP_NAME.' <'.APP_EMAIL.'>',
'envelope' => APP_EMAIL,
'to' => $this->data['Party']['einvite'],
'reply' => $email[0]['users']['email'],
'subject' => 'You\'ve been invited to '.APP_NAME.'!',
'link' => APP_BASE.'/parties/invited/'.$party['Party']['invitecode'],
'type' => 'invite');
$this->Mail->mail($message);
$this->Mail->send();
$this->Session->setFlash($this->data['Party']['einvite'].' has been
invited. You can invite another guest below or <a href="'.APP_BASE.'/parties/view/'.$id.'/">click here</a>
to return to your party.', 'infoFlash');
$this->data['Party']['einvite'] = null;
}
else {
$this->validateErrors($this->Party);
$this->render();
}
}
}
}
}
function invited($icode = null, $conf = null) {
$this->pageTitle = "Confirm Invite";
if ($icode == 'cancel') {
$this->Session->delete('invite');
$this->Session->delete('invitestep');
$this->redirect('/');
}
else {
$clean = new Sanitize();
$icode = $clean->sql($icode);
$party = $this->Party->findByInvitecode($icode);
if (empty($party['Party']['id'])) {
$this->Session->setFlash('Could not find a party matching that invite code, please check it and try again.', 'errorFlash');
}
else {
if (!empty($_SESSION['User']['id']) && !empty($_SESSION['invitestep']) && $conf == 'confirm') {
$this->Party->addGuest($_SESSION['User']['id'], $_SESSION['invite']);
$this->Session->setFlash('You have been successfully added to this party.', 'infoFlash');
$this->redirect('/parties/view/'.$party['Party']['id']);
}
else if (!empty($_SESSION['User']['id'])) {
$this->set('confirm_only', true);
$this->set('party', $party);
$this->set('icode', $icode);
$this->Session->write('invitestep', 'true');
$this->Session->write('invite', $icode);
}
else {
$this->Session->write('invite', $icode);
$this->set('party', $party);
$this->set('icode', $icode);
}
}
}
}
function rsvp($pid) {
if (is_numeric($pid) && isset($_SESSION['User']['id'])) {
$party = $this->Party->findById($pid);
if (empty($party['Party']['id'])) {
$this->Session->setFlash('Invalid party id.', 'errorFlash');
$this->redirect('/parties/view/all');
}
else {
if ($party['Party']['inviteonly']) {
$this->Session->setFlash('This party invite only, you\'ll need an
invitation from the host to join in', 'errorFlash');
}
else {
$this->Party->rsvp($pid, $_SESSION['User']['id']);
$this->Session->setFlash('You have been successfully added to this party.', 'infoFlash');
$this->redirect('/parties/view/'.$pid);
}
}
}
else
$this->redirect('/parties/view/all');
}
function unrsvp($pid) {
if (is_numeric($pid) && isset($_SESSION['User']['id'])) {
$party = $this->Party->findById($pid);
if (empty($party['Party']['id'])) {
$this->Session->setFlash('Invalid party id.', 'errorFlash');
$this->redirect('/parties/view/all');
}
else {
$this->Party->unrsvp($pid, $_SESSION['User']['id']);
$this->Session->setFlash('You have been successfully removed from this party.', 'infoFlash');
$this->redirect('/parties/view/'.$pid);
}
}
else
$this->redirect('/parties/view/all');
}
function cancel($pid) {
$this->pageTitle = "Cancel Party";
if (!is_numeric($pid) || !isset($_SESSION['User']['id']))
$this->redirect('/');
else
$this->set('pid', $pid);
$party = $this->Party->findById($pid);
if ($_SESSION['User']['id'] != $party['Party']['owner'])
die();
if (!empty($this->data) && $_SESSION['User']['id'] == $party['Party']['owner']) {
if ($this->data['Party']['confcancel'] == 1) {
$guests = $this->Party->getGuests($pid);
$guest_count = count($guests);
foreach($guests as $guest) {
$message = array('from' => APP_NAME.' <'.APP_EMAIL.'>',
'envelope' => APP_EMAIL,
'to' => $guest['users']['email'],
'reply' => $_SESSION['User']['email'],
'subject' => 'Party Cancellation Notice',
'link' => APP_BASE.'/parties/view/'.$pid,
'type' => 'cancel');
$this->Mail->mail($message);
$this->Mail->send();
}
$this->Party->query("DELETE FROM guests WHERE pid = $pid LIMIT $guest_count");
$this->Party->query("UPDATE parties SET canceled = '1', invitecode = '0' WHERE parties.id = $pid LIMIT 1");
$this->redirect('/parties/view/'.$pid);
}
}
}
function uncancel($pid) {
if (!is_numeric($pid) || !isset($_SESSION['User']['id']))
$this->redirect('/');
$party = $this->Party->findById($pid);
if ($_SESSION['User']['id'] != $party['Party']['owner'])
die();
$key = $this->Hash->keygen(10);
$this->Party->query("UPDATE parties SET canceled = '0', invitecode = '$key' WHERE parties.id = $pid LIMIT 1");
$this->redirect('/parties/view/'.$pid);
}
function js($type = null, $data = null) {
$this->layout = 'ajax';
if ($type == 'html') {
header('Content-type: text/plain');
$party = $this->Party->findById($data);
$this->set('party', $party);
}
else {
header('Content-type: text/javascript');
$parties = $this->Party->findAll();
$this->set('parties', $parties);
}
}
}
?>

View File

@@ -1,437 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
uses('sanitize');
class UsersController extends AppController {
var $name = 'Users';
var $uses = array('User', 'Party');
var $helpers = array('Html', 'Form');
var $components = array('Security', 'Hash', 'Mail');
function index() {
if (!isset($_SESSION['User'])) {
$this->redirect('/users/login');
}
$this->pageTitle = 'My Profile';
$user = $this->Session->read('User');
$this->set('parties', $this->User->memberOf($user['id']));
$this->set('hparties', $this->User->hostOf($user['id']));
$this->set('iparties', $this->User->invitedTo($user['id']));
}
function register() {
$this->pageTitle = 'Register';
$this->set('map', 'mapInit()');
if(empty($this->data)) {
$this->set('utz', '0');
$this->render();
}
else {
if ($this->User->findByEmail($this->data['User']['email']))
$this->User->invalidate('email');
if ($this->data['User']['email'] !== $this->data['User']['confemail'])
$this->User->invalidate('confemail');
if (!preg_match("/^(http|https)\:\/\//i", $this->data['User']['website']) &&
!empty($this->data['User']['website']))
$this->User->invalidate('website');
if ($this->data['User']['password'] !== $this->data['User']['confpass'])
$this->User->invalidate('confpass');
if (empty($this->data['User']['password']) || empty($this->data['User']['confpass']))
$this->User->invalidate('password');
// Repopulate the timezone with right value in case there's a validation error
$this->set('utz', $this->data['User']['tz']);
if ($this->User->validates($this->data)) {
$clean = new Sanitize();
// Generate and set the password, salt and activation key
$pass = $this->Hash->password($this->data['User']['password'],
$this->data['User']['email']);
$this->data['User']['active'] = $this->Hash->keygen(10);
$this->data['User']['password'] = $pass['pass'];
$this->data['User']['salt'] = $pass['salt'];
// Save a few fields from the wrath of cleanArray()
$temp = array('lat' => $this->data['User']['lat'],
'long' => $this->data['User']['long'],
'tz' => $this->data['User']['tz'],
'email' => $this->data['User']['email']);
// Scrub 'a dub
$clean->cleanArray($this->data);
$this->data['User']['email'] = $temp['email'];
$this->data['User']['long'] = floatval($temp['long']);
$this->data['User']['lat'] = floatval($temp['lat']);
$this->data['User']['tz'] = intval($temp['tz']);
$this->data['User']['role'] = 0;
if($this->User->save($this->data)) {
$message = array('from' => APP_NAME.' <'.APP_EMAIL.'>',
'envelope' => APP_EMAIL,
'to' => $this->data['User']['email'],
'subject' => 'Your '.APP_NAME.' Registration',
'link' => APP_BASE.'/users/activate/'.$this->data['User']['active'],
'type' => 'act');
$this->Mail->mail($message);
$this->Mail->send();
if (isset($_SESSION['invite']))
$this->Party->addGuest($this->User->getLastInsertId(), $_SESSION['invite']);
$this->Session->setFlash('Thank you for registering! To login, you\'ll
need to activate your account. Please check
your email for your activation link.', 'infoFlash');
$this->redirect('/users/login');
}
else {
$this->data['User']['password'] = null;
$this->data['User']['confpass'] = null;
$this->render();
}
}
else {
$this->data['User']['password'] = null;
$this->data['User']['confpass'] = null;
$this->Session->setFlash('There was an error in your submission. Please
correct the errors shown below and try again.',
'errorFlash');
$this->render();
}
}
}
function edit() {
if (!isset($_SESSION['User'])) {
$this->redirect('/users/login');
}
$this->set('error', false);
$this->pageTitle = 'Edit My Account';
if (empty($this->data)) {
$this->User->id = $_SESSION['User']['id'];
$this->data = $this->User->read();
$this->data['User']['password'] = "";
$this->set('utz', $this->data['User']['tz']);
$this->data['User']['name'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['User']['name']));
$this->data['User']['website'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['User']['website']));
$this->data['User']['location'] = preg_replace("/&#(\d{2,5});/e",
'$this->Unicode->unicode2utf(${1})',
html_entity_decode($this->data['User']['location']));
if (GMAP_API_KEY != null) {
if ($this->data['User']['lat'])
$this->set('map', 'mapInit('.$this->data['User']['lat'].','.$this->data['User']['long'].','.$this->data['User']['zoom'].')');
else
$this->set('map', 'mapInit()');
}
}
else {
$user = $this->User->findById($_SESSION['User']['id']);
$this->User->id = $user['User']['id'];
$this->set('utz', $user['User']['tz']);
$clean = new Sanitize();
$temp = array('password' => $this->data['User']['password'],
'confpassword' => $this->data['User']['confpassword'],
'lat' => $clean->sql($this->data['User']['lat']),
'long' => $clean->sql($this->data['User']['long']),
'tz' => $clean->sql($this->data['User']['tz']));
//Nuke everything else
$clean->cleanArray($this->data);
$this->data['User']['email'] = $user['User']['email'];
$this->data['User']['password'] = $temp['password'];
$this->data['User']['confpassword'] = $temp['confpassword'];
$this->data['User']['lat'] = floatval($temp['lat']);
$this->data['User']['long'] = floatval($temp['long']);
$this->data['User']['tz'] = intval($temp['tz']);
$this->data['User']['role'] = $user['User']['role'];
if (!preg_match("/^(http|https)\:\/\//i", $this->data['User']['website']) &&
!empty($this->data['User']['website']))
$this->User->invalidate('website');
if ($this->data['User']['password'] === $this->data['User']['confpassword'] &&
!empty($this->data['User']['password'])) {
$pass = $this->Hash->password($this->data['User']['password'], $user['User']['email']);
$this->data['User']['password'] = $pass['pass'];
$this->data['User']['salt'] = $pass['salt'];
}
else if (empty($this->data['User']['password']) && empty($this->data['User']['confpassword'])) {
$this->data['User']['password'] = $user['User']['password'];
$this->data['User']['salt'] = $user['User']['salt'];
}
else {
$this->set('error', true);
$this->User->invalidate('password');
$this->User->invalidate('confpassword');
}
if ($this->User->validates($this->data)) {
if ($this->User->save($this->data)) {
$sess = $this->User->findById($user['User']['id']);
$this->redirect('/users/');
}
}
else {
$this->validateErrors($this->User);
$this->data['User']['password'] = null;
$this->data['User']['confpassword'] = null;
$this->render();
}
}
}
function login() {
if ($this->Session->Check('User'))
$this->redirect('/users');
$this->pageTitle = 'Login';
if (!empty($this->data)) {
if (empty($this->data['User']['email']) || empty($this->data['User']['password']))
$this->render();
$user = $this->User->findByEmail($this->data['User']['email']);
$pass = sha1($this->data['User']['password'].$user['User']['salt']);
if ($user['User']['password'] == $pass) {
if ($user['User']['active'] != 1) {
$this->Session->setFlash('Your account hasn\'t been activated yet. Please
check your email (including junk/spam folders)
for your activation link, or click <a href="'
.APP_BASE.'/users/recover/activate">here</a> to
resend your activation details.', 'infoFlash');
$this->render();
}
else {
if (isset($_SESSION['invite']))
$this->Party->addGuest($user['User']['id'], $_SESSION['invite']);
$this->Session->write('User', $user['User']);
$this->redirect('/users/');
}
}
else {
$this->Session->setFlash('The email address and password you supplied do
not match. Please try again.', 'errorFlash');
}
}
}
function view($id = null) {
if (!is_numeric($id))
$this->redirect('/');
else {
$user = $this->User->findById($id);
$this->pageTitle = $user['User']['name'];
$this->set('user', $user);
if (GMAP_API_KEY != null && !empty($user['User']['lat']))
$this->set('map', 'mapInit('.$user['User']['lat'].','.$user['User']['long'].','.$user['User']['zoom'].',\'stationary\');');
$this->Party->unbindModel(array('hasMany' => array('Comment')));
$this->set('hparties', $this->User->hostOf($id));
$att = $this->User->query('SELECT parties.id, parties.name
FROM parties
LEFT JOIN guests
ON parties.id = guests.pid
WHERE guests.uid = '.$id);
$this->set('parties', $att);
}
}
function logout() {
$this->Session->destroy();
$this->Session->delete('User');
$this->redirect('/');
}
function recover($aType = null, $aCode = null, $aId = null) {
switch ($aType) {
case "password":
$this->pageTitle = "Password Recovery";
$this->set('atitle', 'Password Recovery');
$this->set('hideInput', false);
$this->set('url', 'password');
if (!empty($this->data)) {
$user = $this->User->findByEmail($this->data['User']['email']);
if (!isset($user['User']['email'])) {
$this->Session->setFlash('Could not find a user with that email address. Please check it and try again.', 'errorFlash');
$this->render();
}
else {
$code = md5($user['User']['salt'].$user['User']['email'].$user['User']['password']);
$message = array('from' => APP_NAME.' <'.APP_EMAIL.'>',
'envelope' => APP_EMAIL,
'to' => $user['User']['email'],
'subject' => APP_NAME.' Password Request',
'link' => APP_BASE.'/users/recover/password/'.$code.'/'.$user['User']['id'],
'type' => 'prec');
$this->Mail->mail($message);
$this->Mail->send();
$this->Session->setFlash('An email has been sent to '.$user['User']['email'].' with reset instructions.', 'errorFlash');
$this->redirect('users/login');
}
}
if ($aCode !== null && $aId !== null) {
$this->set('hideInput', true);
$this->set('reset', false);
$user = $this->User->findById($aId);
if (!$user) {
$this->Session->setFlash('Invalid request. Please check the URL and try again.', 'errorFlash');
$this->render();
}
if ($aCode == md5($user['User']['salt'].$user['User']['email'].$user['User']['password'])) {
$this->set('reset', true);
$this->set('code', $aCode."/".$aId);
$this->render();
}
else {
$this->Session->setFlash('Invalid request. Please check the URL and try again.', 'errorFlash');
$this->render();
}
}
break;
case "activate":
$this->pageTitle = 'Resend Activation Code';
$this->set('atitle', 'Resend Activation Code');
$this->set('hideInput', false);
$this->set('url', 'activate');
if (!empty($this->data)) {
$user = $this->User->findByEmail($this->data['User']['email']);
if (!$user) {
$this->Session->setFlash('Could not find a user with that email address. Please check it and try again.', 'errorFlash');
$this->render();
}
if ($user['User']['active'] == 1)
$this->redirect('/users/login');
else {
$message = array('from' => APP_NAME.' <'.APP_EMAIL.'>',
'envelope' => APP_EMAIL,
'to' => $this->data['User']['email'],
'subject' => 'Your '.APP_NAME.' Registration',
'link' => APP_BASE.'/users/activate/'.$user['User']['active'],
'type' => 'act');
$this->Mail->mail($message);
$this->Mail->send();
$this->Session->setFlash('Your activation code has been resent.', 'infoFlash');
$this->redirect('users/login');
}
}
break;
case "reset":
if ($aCode !== null && $aId !== null) {
if (!empty($this->data)) {
$user = $this->User->findById($aId);
if (!$user) {
$this->Session->setFlash('Invalid request. Please check the URL and try again.', 'errorFlash');
$this->render();
}
if ($aCode == md5($user['User']['salt'].$user['User']['email'].$user['User']['password'])) {
$string = $user['User']['email'] . uniqid(rand(), true) . $this->data['User']['password'];
$this->data['User']['salt'] = substr(md5($string), 0, 9);
$this->data['User']['password'] = sha1($this->data['User']['password'] . $this->data['User']['salt']);
$this->data['User']['id'] = $aId;
if ($this->User->save($this->data)) {
$this->Session->setFlash('Your password has been reset.', 'infoFlash');
$this->redirect('/users/login');
}
}
}
}
break;
default:
$this->redirect('/');
break;
}
}
function activate($aKey = null) {
if ($aKey == null)
$this->redirect('/');
else {
$user = $this->User->findByActive($aKey);
if (empty($user['User']['id'])) {
$this->Session->setFlash('Your account could not be activated. Please make
sure the URL entered is correct and try again.', 'errorFlash');
$this->redirect('/users/login');
}
else {
$this->data = $user;
$this->data['User']['active'] = 1;
if ($this->User->save($this->data)) {
$this->Session->setFlash('Your account was successfully activated.', 'infoFlash');
$this->redirect('/users/login');
}
}
}
}
}
?>

View File

@@ -1,26 +0,0 @@
<?php
/* SVN FILE: $Id: index.php,v 1.3 2006-10-08 03:39:21 reed%reedloden.com Exp $ */
/**
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2006, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.app
* @since CakePHP v 0.10.0.1076
* @version $Revision: 1.3 $
* @modifiedby $LastChangedBy: phpnut $
* @lastmodified $Date: 2006-10-08 03:39:21 $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
require 'webroot' . DIRECTORY_SEPARATOR . 'index.php';
?>

View File

@@ -1,41 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class Admin extends AppModel {
var $name = 'Admin';
var $useTable = "parties";
}
?>

View File

@@ -1,61 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class Comment extends AppModel {
var $name = 'Comment';
var $validate = array(
'text' => "/^\S/"
);
function canComment($pid, $uid) {
$status = $this->query('SELECT owner, guestcomments FROM parties WHERE id = '.$pid);
$guest = null;
if ($status[0]['parties']['owner'] != $uid)
$guest = $this->query('SELECT uid FROM guests WHERE pid = '.$pid.' AND uid = '.$uid);
if ($status[0]['parties']['guestcomments'] == 1) {
if (!empty($guest[0]['guests']['uid']) || $uid == $status[0]['parties']['owner'])
return true;
else
return false;
}
else
return true;
}
}
?>

View File

@@ -1,51 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class Feed extends AppModel {
var $name = 'Feeds';
var $useTable = "parties";
function getComments($aParty) {
$rv = $this->query("SELECT * FROM comments WHERE assoc = ".$aParty." LIMIT 10");
return $rv;
}
function getUserCount() {
$rv = $this->query("SELECT COUNT(*) FROM users");
return $rv[0][0]['COUNT(*)'];
}
}
?>

View File

@@ -1,40 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class Guest extends AppModel {
var $name = 'Guest';
}
?>

View File

@@ -1,46 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class Page extends AppModel {
var $name = 'Page';
var $useTable = 'parties';
function getUsers() {
$rv = $this->query("SELECT COUNT(*) FROM users");
return $rv[0][0]["COUNT(*)"];
}
}
?>

View File

@@ -1,110 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class Party extends AppModel {
var $name = 'Party';
var $validate = array(
'name' => "/^\S/",
'einvite' => VALID_EMAIL,
'duration' => VALID_NUMBER
);
function getComments($pid) {
$rv = $this->query("SELECT users.id AS uid, users.name,
comments.id AS cid, comments.time, comments.text
FROM users, parties, comments
WHERE comments.assoc = ".$pid."
AND users.id = comments.owner
AND parties.id = ".$pid."
ORDER BY cid ASC");
return $rv;
}
function getHost($uid) {
$rv = $this->query("SELECT name FROM users WHERE id = ".$uid);
return @$rv[0]['users']['name'];
}
function isGuest($pid, $uid) {
$rv = $this->query('SELECT id FROM guests WHERE uid = '.$uid.' AND pid = '.$pid);
if (!empty($rv[0]['guests']['id']))
return true;
else
return false;
}
function getGuests($pid) {
$rv = $this->query("SELECT users.id, users.name, users.email, guests.invited
FROM users
LEFT JOIN guests
ON users.id = guests.uid
WHERE guests.pid = ".$pid);
return $rv;
}
function rsvp($pid, $uid) {
$party = $this->findById($pid);
if (!empty($party['Party']['id']) && !$this->isGuest($pid, $uid)) {
$this->query("INSERT INTO guests (id, pid, uid, invited)
VALUES (NULL, ".$party['Party']['id'].", ".$uid.", 0)");
}
}
function unrsvp($pid, $uid) {
$party = $this->findById($pid);
if (!empty($party['Party']['id']) && $this->isGuest($pid, $uid)) {
$this->query('DELETE FROM guests WHERE uid = '.$uid.' AND pid = '.$pid);
}
}
function addGuest($uid, $icode) {
$party = $this->findByInvitecode($icode);
if (!empty($party['Party']['id'])) {
$check = $this->query('SELECT uid FROM guests WHERE uid = '.$uid.'
AND pid = '.$party['Party']['id']);
if (empty($check[0]['guests']['uid']) && $uid != $party['Party']['owner']) {
$this->query("INSERT INTO guests (id, pid, uid, invited)
VALUES (NULL, ".$party['Party']['id'].", ".$uid.", 1)");
}
}
}
function findByInvitecode($icode) {
$rv = $this->query('SELECT * FROM parties AS Party WHERE invitecode = "'.$icode.'" LIMIT 1');
return @$rv[0];
}
}
?>

View File

@@ -1,59 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class User extends AppModel {
var $name = 'User';
var $validate = array(
'email' => VALID_EMAIL,
'name' => "/^\S/"
);
function memberOf($uid) {
$rv = $this->query('SELECT parties.id, parties.name FROM guests, parties WHERE guests.uid = '.$uid.' AND parties.id = guests.pid');
return $rv;
}
function hostOf($uid) {
$rv = $this->query('SELECT id, name FROM parties WHERE owner = '.$uid);
return $rv;
}
function invitedTo($uid) {
$rv = $this->query('SELECT parties.id, parties.name FROM guests, parties WHERE guests.uid = '.$uid.' AND parties.id = guests.pid AND guests.invited = 1');
return $rv;
}
}
?>

View File

@@ -1,199 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
class webServices {
var $userid;
var $host;
var $randomize;
function webServices($data) {
switch ($data['type']) {
case "flickr":
$this->host = "api.flickr.com";
if (array_key_exists('userid', $data))
$this->userid = $data['userid'];
if (array_key_exists('randomize', $data))
$this->randomize = $data['randomize'];
if (array_key_exists('username', $data)) {
$head = "GET /services/rest/?method=flickr.people.findByUsername&api_key=".FLICKR_API_KEY."&username=".$data['username']." HTTP/1.1\r\n";
$head .= "Host: ".$this->host."\r\n";
$head .= "Connection: Close\r\n\r\n";
if ($results = $this->fetchResults($head)) {
preg_match('/nsid=\"(.*)\"/', $results, $matches);
if ($matches[1]) {
$this->userid = $matches[1];
}
else
return 0;
}
}
break;
case "gsuggest":
$this->host = "api.google.com";
break;
case "geocode":
$this->host = "maps.google.com";
break;
}
}
function getFlickrId() {
return $this->userid;
}
function fetchPhotos($tags, $num_results, $single_user) {
$params = array('api_key' => FLICKR_API_KEY,
'method' => 'flickr.photos.search',
'format' => 'php_serial',
'tags' => $tags,
'per_page' => $num_results);
if ($single_user)
$params['user_id'] = $this->userid;
$encoded_params = array();
foreach ($params as $k => $v)
$encoded_params[] = urlencode($k).'='.urlencode($v);
$head = 'GET /services/rest/?'.implode('&', $encoded_params)." HTTP/1.1 \r\n";
$head .= 'Host: '.$this->host."\r\n";
$head .= "Connection: Close\r\n\r\n";
if ($results = $this->fetchResults($head)) {
$resp = split("\r\n\r\n", $results);
$data = unserialize($resp[1]);
if ($data['stat'] == 'ok') {
$arr = array();
for ($i = 0; $i < count($data['photos']['photo']); $i++) {
$p = $data['photos']['photo'][$i];
$arr[$i] = array('id' => $p['id'],
'owner' => $p['owner'],
'secret' => $p['secret'],
'server' => $p['server'],
'farm' => $p['farm'],
'title' => $p['title']);
}
if ($this->randomize) {
// Randomize the results
shuffle($arr);
}
return $arr;
}
else
return 0;
}
else
return 0;
}
function GSuggest($phrase) {
$soapy = '<?xml version=\'1.0\' encoding=\'UTF-8\'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<doSpellingSuggestion xmlns="urn:GoogleSearch">
<key xsi:type="xsd:string">'.GSEARCH_API_KEY.'</key>
<phrase xsi:type="xsd:string">'.$phrase.'</phrase>
</doSpellingSuggestion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>';
$head = "POST /search/beta2 HTTP/1.1\r\n";
$head .= "Host: api.google.com\r\n";
$head .= "MessageType: CALL\r\n";
$head .= "Content-type: text/xml\r\n";
$head .= "Content-length: ".strlen($soapy)."\r\n";
$head .= "Connection: Close\r\n\r\n";
$head .= $soapy;
if ($results = $this->fetchResults($head)) {
if (preg_match('/return xsi:type="xsd:string">(.*)</', $results, $matches))
return $matches[1];
else
return 0;
}
return 0;
}
function geocode($query) {
$head = "GET /maps/geo?q=".urlencode($query)."&output=xml&key=".GMAP_API_KEY." HTTP/1.1\r\n";
$head .= "Host: maps.google.com\r\n";
$head .= "Connection: Close\r\n\r\n";
if ($results = $this->fetchResults($head)) {
if (stristr($results, '<code>200</code>')) {
preg_match('/coordinates>(.*)</', $results, $matches);
$ll = explode(',', $matches[1]);
$rv = array('lat' => $ll[1], 'lng' => $ll[0]);
return $rv;
}
}
return 0;
}
function fetchResults($headers) {
$fs = fsockopen($this->host, 80, $errno, $errstr, 30);
if (!$fs)
return 0;
else {
fwrite($fs, $headers);
stream_set_timeout($fs, 2);
$buffer = null;
while (!feof($fs))
$buffer .= fgets($fs, 128);
fclose($fs);
return $buffer;
}
}
}
?>

View File

@@ -1,18 +0,0 @@
<h1>Comments</h1>
<p>Switch view to: <a href="<?php echo $html->url('/admin/'); ?>">Parties&raquo;</a> <a href="<?php echo $html->url('/admin/users'); ?>">Users&raquo;</a></p>
<table>
<tr>
<td>ID</td>
<td>Text</td>
<td></td>
<td></td>
</tr>
<?php foreach($comments as $comment): ?>
<tr>
<td><a href="<?php echo $html->url('/parties/view/'.$comment['Comment']['assoc'].'#c'.$comment['Comment']['id']); ?>"><?php echo $comment['Comment']['id']; ?></a></td>
<td><?php echo $comment['Comment']['text']; ?></td>
<td><a href="<?php echo $html->url('/admin/edit/comment/'.$comment['Comment']['id']); ?>">Edit</a></td>
<td><a href="<?php echo $html->url('/admin/delete/comment/'.$comment['Comment']['id']); ?>" onclick="return confirm('Delete comment <?php echo $comment['Comment']['id']; ?>?')">Delete</a></td>
</tr>
<?php endforeach; ?>
</table>

View File

@@ -1,128 +0,0 @@
<?php if (isset($user)): ?>
<h1><?php echo $user['User']['name'].' (<a href="'.$html->url('/users/view/'.$user['User']['id']).'">'.$user['User']['id']; ?></a>)</h1>
<form class="fxform" action="<?php echo $html->url('/admin/edit/user/'.$user['User']['id']); ?>" method="post">
<div>
<label for="UserName" class="label-large">Name:</label>
<?php echo $html->input('User/name', array('size' => 40)); ?>
</div>
<div>
<label for="UserRole" class="label-large">Admin privileges:</label>
<?php echo $html->checkbox('User/role'); ?>
</div>
<div>
<label for="UserEmail" class="label-large">Email address:</label>
<?php echo $html->input('User/email', array('size' => 40)); ?>
</div>
<div>
<label for="UserWebsite" class="label-large">Website:</label>
<?php echo $html->input('User/website', array('size' => 40)); ?>
</div>
<div>
<label for="UserActive" class="label-large">Activation code:</label>
<?php echo $html->input('User/active', array('size' => 40)); ?>
</div>
<div>
<label for="location" class="label-large">Location:</label>
<?php echo $html->input('User/location', array('size' => 40)); ?>
</div>
<div>
<label for="UserShowemail" class="label-large">Show email:</label>
<?php echo $html->checkbox('User/showemail'); ?><br/>
</div>
<div>
<label for="UserShowloc" class="label-large">Show location:</label>
<?php echo $html->checkbox('User/showloc'); ?><br/>
</div>
<div>
<label for="UserShowmap" class="label-large">Show map:</label>
<?php echo $html->checkbox('User/showmap'); ?><br/>
</div>
<?php echo $html->hidden('User/id', array('value' => $user['User']['id'])).$html->submit('Submit'); ?>
</form>
<?php endif; if (isset($party)): ?>
<h1><?php echo $party['Party']['name'].' (<a href="'.$html->url('/parties/view/'.$party['Party']['id']).'">'.$party['Party']['id']; ?></a>)</h1>
<form class="fxform" action="<?php echo $html->url('/admin/edit/party/'.$party['Party']['id']); ?>" method="post">
<div>
<label for="PartyOwner" class="label-large">Party Owner:</label>
<?php echo $html->input('Party/owner', array('size' => 40)); ?>
</div>
<div>
<label for="PartyName" class="label-large">Party Name:</label>
<?php echo $html->input('Party/name', array('size' => 40)); ?>
</div>
<div>
<label for="PartyVname" class="label-large">Venue Name:</label>
<?php echo $html->input('Party/vname', array('size' => 40)); ?>
</div>
<div>
<label for="PartyWebsite" class="label-large">Web site:</label>
<?php echo $html->input('Party/website', array('size' => 40)); ?>
</div>
<div>
<label for="PartyAddress" class="label-large">Address:</label>
<?php echo $html->input('Party/address', array('size' => 40)); ?>
</div>
<div>
<label for="PartyDate" class="label-large">Date:</label>
<?php echo $html->input('Party/date', array('size' => 40)); ?>
</div>
<div>
<label for="PartyNotes" class="label-large">Additional Notes:</label>
<?php echo $html->textarea('Party/notes', array('rows' => 10, 'cols' => 50)); ?>
</div>
<div>
<label for="PartyConfirmed" class="label-large">Time:</label>
<?php echo $html->radio('Party/confirmed', array(0 => 'Tentative', 1 => 'Confirmed')); ?>
</div>
<div>
<label for="PartyDuration" class="label-large">Duration (in hours):</label>
<?php echo $html->input('Party/duration', array('size' => 5)); ?>
</div>
<div>
<label for="PartyCanceled" class="label-large">Canceled:</label>
<?php echo $html->checkbox('Party/canceled'); ?>
</div>
<div>
<label for="PartyUseflickr" class="label-large">Use Flickr:</label>
<?php echo $html->checkbox('Party/useflickr'); ?>
</div>
<div>
<label for="PartyFlickrperms" class="label-large">Show:</label>
<?php echo $html->radio('Party/flickrperms', array(0 => 'Only my photos', 1 => 'Anyone\'s photos')); ?>
</div>
<div>
<label for="PartyFlickrusr" class="label-large">Flickr username:</label>
<?php echo $html->input('Party/flickrusr', array('size' => 40)); ?>
</div>
<div>
<label for="PartyFlickrusr" class="label-large">Flickr id:</label>
<?php echo $html->input('Party/flickrid', array('size' => 40)); ?>
</div>
<div>
<label for="PartyInviteonly" class="label-large">Invite only:</label>
<?php echo $html->checkbox('Party/inviteonly'); ?>
</div>
<div>
<label for="PartyGuestcomments" class="label-large">Limit comments to party guests only:</label>
<?php echo $html->checkbox('Party/guestcomments'); ?>
</div>
<br/>
<?php echo $html->hidden('Party/id', array('value' => $party['Party']['id'])).$html->submit('Submit'); ?>
</form>
<?php endif; if(isset($comment)): ?>
<h1>Comment <?php echo '<a href="'.$html->url('/parties/view/'.$comment['Comment']['assoc'].'#c'.$comment['Comment']['id']).'">#'.$comment['Comment']['id']; ?></a> by <?php echo '<a href="'.$html->url('/users/view/'.$comment['Comment']['owner']).'">'.$owner; ?></a></h1>
<form class="fxform" action="<?php echo $html->url('/admin/edit/comment/'.$comment['Comment']['id']); ?>" method="post">
<div>
<label for="CommentAssoc" class="label-large">Party:</label>
<?php echo $html->input('Comment/assoc', array('size' => 40)); ?>
</div>
<div>
<label for="CommentText" class="label-large">Text:</label>
<?php echo $html->textarea('Comment/text', array('rows' => 10, 'cols' => 50)); ?>
</div>
<?php echo $html->hidden('Comment/id', array('value' => $comment['Comment']['id'])).$html->submit('Submit'); ?>
</form>
<?php endif; ?>

View File

@@ -1,18 +0,0 @@
<h1>Parties</h1>
<p>Switch view to: <a href="<?php echo $html->url('/admin/users'); ?>">Users&raquo;</a> <a href="<?php echo $html->url('/admin/comments'); ?>">Comments&raquo;</a></p>
<table>
<tr>
<td>ID</td>
<td>Name</td>
<td></td>
<td></td>
</tr>
<?php foreach($parties as $party): ?>
<tr>
<td><a href="<?php echo $html->url('/parties/view/'.$party['Party']['id']); ?>"><?php echo $party['Party']['id']; ?></a></td>
<td><?php echo $party['Party']['name']; ?></td>
<td><a href="<?php echo $html->url('/admin/edit/party/'.$party['Party']['id']); ?>">Edit</a></td>
<td><a href="<?php echo $html->url('/admin/delete/party/'.$party['Party']['id']); ?>" onclick="return confirm('Delete party <?php echo $party['Party']['id']; ?>?')">Delete</a></td>
</tr>
<?php endforeach; ?>
</table>

View File

@@ -1,18 +0,0 @@
<h1>Users</h1>
<p>Switch view to: <a href="<?php echo $html->url('/admin/'); ?>">Parties&raquo;</a> <a href="<?php echo $html->url('/admin/comments'); ?>">Comments&raquo;</a></p>
<table>
<tr>
<td>ID</td>
<td>Name</td>
<td></td>
<td></td>
</tr>
<?php foreach($users as $user): ?>
<tr>
<td><a href="<?php echo $html->url('/users/view/'.$user['User']['id']); ?>"><?php echo $user['User']['id']; ?></a></td>
<td><?php echo $user['User']['name']; ?></td>
<td><a href="<?php echo $html->url('/admin/edit/user/'.$user['User']['id']); ?>">Edit</a></td>
<td><a href="<?php echo $html->url('/admin/delete/user/'.$user['User']['id']); ?>" onclick="return confirm('Delete user <?php echo $user['User']['id']; ?>?')">Delete</a></td>
</tr>
<?php endforeach; ?>
</table>

View File

@@ -1,7 +0,0 @@
<?php if(!isset($_SESSION['User'])): ?>
<strong>Welcome, Guest!</strong>
<a href="<?php echo $html->url('/users/login'); ?>">Login</a> | <a href="<?php echo $html->url('/users/register'); ?>">Register</a>
<?php else: ?>
<strong>Welcome, <?php echo $_SESSION['User']['name']; ?>!</strong>
<a href="<?php echo $html->url('/users'); ?>">My Account</a> | <a href="<?php echo $html->url('/users/logout'); ?>">Logout</a>
<?php endif; ?>

View File

@@ -1,16 +0,0 @@
<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; ?>
<rss version="0.91">
<channel>
<pubDate><?php echo date('r'); ?></pubDate>
<description><?php echo APP_NAME." - Latest Comments"; ?></description>
<link><?php echo APP_BASE.$html->url('/parties/view/'.$pid); ?></link>
<title><?php echo APP_NAME." - Latest Comments"; ?></title>
<?php foreach($comments as $comment): ?>
<item>
<title><![CDATA[<?php echo substr($comment['comments']['text'], 0, 25).'...'; ?>]]></title>
<description><?php echo $comment['comments']['text'] ?></description>
<link><?php echo APP_BASE.$html->url('/parties/view/'.$comment['comments']['assoc'].'#c'.$comment['comments']['id']); ?></link>
</item>
<?php endforeach; ?>
</channel>
</rss>

View File

@@ -1,22 +0,0 @@
BEGIN:VCALENDAR
X-WR-CALNAME:<?php echo APP_NAME."\n"; ?>
X-WR-CALDESC:Upcoming Parties
PRODID:-//MozillaPartyTool//calendar//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
<?php foreach($events as $event):
if ($event['Feeds']['canceled']) continue; ?>
BEGIN:VEVENT
UID:<?php echo APP_BASE.$html->url('/parties/view/'.$event['Feeds']['id'])."\n"; ?>
DTSTAMP:<?php echo gmdate('Ymd\This\Z', $event['Feeds']['date'])."\n"; ?>
LOCATION:<?php echo $event['Feeds']['lat'].'\, '.$event['Feeds']['long'].'('.$event['Feeds']['address'].")\n"; ?>
SUMMARY:<?php echo $event['Feeds']['name']."\n"; ?>
DTSTART:<?php echo gmdate('Ymd\This', $event['Feeds']['date'])."\n"; ?>
DURATION:PT<?php echo $event['Feeds']['duration']; ?>H
URL:<?php echo APP_BASE.$html->url('/parties/view/'.$event['Feeds']['id'])."\n"; ?>
STATUS:<?php echo (($event['Feeds']['confirmed'] == 1) ? "CONFIRMED" : "TENTATIVE")."\n"; ?>
DESCRIPTION: <?php echo $event['Feeds']['name'].'\n '.$event['Feeds']['address'].'\n '.date('h:ia', $event['Feeds']['date']).'\n '.$event['Feeds']['notes'].'\n'."\n"; ?>
END:VEVENT
<?php endforeach; ?>
END:VCALENDAR

View File

@@ -1,14 +0,0 @@
<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; ?>
<rss version="0.91">
<channel>
<pubDate><?php echo date('r'); ?></pubDate>
<description><?php echo APP_NAME." - Party Count"; ?></description>
<link><?php echo APP_BASE.$html->url('/'); ?></link>
<title><?php echo APP_NAME." - Party Count"; ?></title>
<item>
<title><?php echo $count; ?></title>
<description>Total Parties</description>
<link><?php echo APP_BASE.$html->url('/parties/view/all/'); ?></link>
</item>
</channel>
</rss>

View File

@@ -1,17 +0,0 @@
<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; ?>
<rss version="0.91">
<channel>
<pubDate><?php echo date('r'); ?></pubDate>
<description><?php echo APP_NAME." - Latest Parties"; ?></description>
<link><?php echo APP_BASE.$html->url('/'); ?></link>
<title><?php echo APP_NAME." - Latest Parties"; ?></title>
<?php foreach($latest as $party):
if ($party['Feeds']['canceled']) continue; ?>
<item>
<title><?php echo $party['Feeds']['name'] ?></title>
<description><?php echo $party['Feeds']['vname'] ?></description>
<link><?php echo APP_BASE.$html->url('/parties/view/'.$party['Feeds']['id']); ?></link>
</item>
<?php endforeach; ?>
</channel>
</rss>

View File

@@ -1,23 +0,0 @@
<?php echo '<?xml version="1.0" encoding="utf-8"?>'."\n"; ?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title><?php echo $party['Feeds']['name']; ?></title>
<id>tag:<?php echo APP_BASE; ?>,2006:/parties/view/<?php echo $party['Feeds']['id']; ?></id>
<subtitle><?php echo APP_NAME; ?> Photostream</subtitle>
<updated><?php echo date('Y-m-d\TH:i:s\Z'); ?></updated>
<generator uri="http://www.screwedbydesign.com/software/partytool">Mozilla Party Tool</generator>
<?php foreach ($flickr as $pic): ?>
<entry>
<title><?php echo $pic['title']; ?></title>
<link rel="alternate" type="text/html" href="http://www.flickr.com/photos/<?php echo $pic['owner']."/".$pic['id']."/"; ?>"/>
<id>tag:flickr.com,2005:/photo/<?php echo $pic['id']; ?></id>
<published><?php echo date('Y-m-d\TH:i:s\Z'); ?></published>
<updated><?php echo date('Y-m-d\TH:i:s\Z'); ?></updated>
<content type="html">&lt;a href="http://www.flickr.com/photos/<?php echo $pic['owner']."/".$pic['id']."/" ?>"&gt; &lt;img src="http://static.flickr.com/<?php echo $pic['server']."/".$pic['id']."_".$pic['secret']."_m.jpg" ?>" title="<?php echo $pic['title']; ?>"/&gt;&lt;/a&gt;</content>
<author>
<name><?php echo $pic['owner']; ?></name>
<uri>http://www.flickr.com/people/<?php echo $pic['owner']; ?>/</uri>
</author>
</entry>
<?php endforeach; ?>
</feed>

View File

@@ -1,16 +0,0 @@
<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; ?>
<rss version="0.91">
<channel>
<pubDate><?php echo date('r'); ?></pubDate>
<description><?php echo APP_NAME." - Top Guests"; ?></description>
<link><?php echo APP_BASE.$html->url('/parties/view/all'); ?></link>
<title><?php echo APP_NAME." - Top Guests"; ?></title>
<?php foreach($items as $item):?>
<item>
<title><?php echo $item['parties']['name'].' ('.$item[0]['count'].')'; ?></title>
<description><?php echo $item['parties']['name'].' - '.$item[0]['count'].' guest'.(($item[0]['count'] != 1) ? 's' : ''); ?></description>
<link><?php echo APP_BASE.$html->url('/parties/view/'.$item['guests']['id']); ?></link>
</item>
<?php endforeach; ?>
</channel>
</rss>

View File

@@ -1,17 +0,0 @@
<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; ?>
<rss version="0.91">
<channel>
<pubDate><?php echo date('r'); ?></pubDate>
<description><?php echo APP_NAME." - Upcoming Parties"; ?></description>
<link><?php echo APP_BASE.$html->url('/'); ?></link>
<title><?php echo APP_NAME." - Upcoming Parties"; ?></title>
<?php foreach($latest as $party):
if ($party['Feeds']['canceled']) continue; ?>
<item>
<title><![CDATA[<?php echo $party['Feeds']['name'] ?>]]></title>
<description><?php echo date('Y-m-d H:i', $party['Feeds']['date']); ?></description>
<link><?php echo APP_BASE.$html->url('/parties/view/'.$party['Feeds']['id']); ?></link>
</item>
<?php endforeach; ?>
</channel>
</rss>

View File

@@ -1,14 +0,0 @@
<?php echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; ?>
<rss version="0.91">
<channel>
<pubDate><?php echo date('r'); ?></pubDate>
<description><?php echo APP_NAME." - Total Users"; ?></description>
<link><?php echo APP_BASE.$html->url('/'); ?></link>
<title><?php echo APP_NAME." - Total Users"; ?></title>
<item>
<title><?php echo $count; ?></title>
<description>Total Users</description>
<link><?php echo APP_BASE.$html->url('/'); ?></link>
</item>
</channel>
</rss>

View File

@@ -1,40 +0,0 @@
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo APP_NAME." - ".$title_for_layout?></title>
<link rel="shortcut icon" type="image/x-icon" href="<?php echo $html->url('/favicon.ico'); ?>"/>
<link rel="stylesheet" type="text/css" href="<?php echo $html->url('/css/main.css'); ?>"/>
<link rel="alternate" type="application/rss+xml" href="<?php echo $html->url('/feeds/latest'); ?>"/>
</head>
<body<?php echo (isset($map)) ? ' onload="'.$map.'" onunload="GUnload()"' : '';?>>
<div id="container">
<p class="skipLink"><a href="#content" 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="<?php echo $html->url('/'); ?>" title="Return to home page" accesskey="1"><img src="<?php echo $html->url('/img/firefox-title.png'); ?>" width="276" height="54" alt="Firefox Party"/></a></h1>
<div id="user"><?php echo $this->renderElement('user_options'); ?></div>
</div>
<div id="key-menu">
<ul id="menu-firefox">
<li<?php echo (@$current == 'home') ? ' class="current"' : ''?>><a href="<?php echo $html->url('/'); ?>">Home</a></li>
<li<?php echo (@$current == 'map') ? ' class="current"' : ''?>><a href="<?php echo $html->url('/parties/'); ?>">View Map</a></li>
<li<?php echo (@$current == 'parties') ? ' class="current"' : ''?>><a href="<?php echo $html->url('/parties/view/all/'); ?>">View Parties</a></li>
<li<?php echo (@$current == 'create') ? ' class="current"' : ''?>><a href="<?php echo $html->url('/parties/add/'); ?>">Create Party</a></li>
</ul>
</div>
</div>
<div id="content">
<?php $this->controller->Session->flash(); ?>
<?php echo $content_for_layout; ?>
</div>
<div id="footer">
Copyright &copy; <?php echo date('Y'); ?> Mozilla<br/>
<a href="<?php echo $html->url('/privacy-policy'); ?>">Privacy Policy</a>
</div>
</div>
</body>
</html>

View File

@@ -1 +0,0 @@
<div id='flash' class='error'><?php echo $content_for_layout ?></div>

View File

@@ -1 +0,0 @@
<div id='flash' class='info'><?php echo $content_for_layout ?></div>

View File

@@ -1,30 +0,0 @@
<?php
$difference = $time - time();
$days_left = floor($difference/60/60/24);
?>
<div id="f-left">
<?php echo $front_text;
if (@$_SESSION['User']['role'] == 1): ?>
<a href="<?php echo $html->url('/pages/edit'); ?>">Edit</a>
<?php endif; ?>
</div>
<div id="f-right">
<div class="cbox">
<span class="ctxt"><?php echo $pcount."</span><br/>".(($pcount == 1) ? ' Party' : ' Parties'); ?>
<div class="ifeed">
<a style="padding-right: 2px;" title="Party Calendar" href="<?php echo $html->url('/feeds/ical'); ?>"><img src="<?php echo $html->url('/img/ical.png'); ?>" alt="iCAL"/></a><a title="Party Count Feed" href="<?php echo $html->url('/feeds/'); ?>"><img src="<?php echo $html->url('/img/feed16.png'); ?>" alt="RSS"/></a>
</div>
</div>
<div class="cbox">
<span class="ctxt"><?php echo $ucount."</span><br/>".(($ucount == 1) ? ' Partygoer' : ' Partygoers'); ?>
<div class="cfeed">
<a title="User Count Feed" href="<?php echo $html->url('/feeds/users/'); ?>"><img src="<?php echo $html->url('/img/feed16.png'); ?>" alt="RSS"/></a>
</div>
</div>
<?php if ($days_left > 0): ?>
<div class="cbox">
<span class="ctxt"><?php echo $days_left."</span><br/>".(($days_left == 1) ? ' Day' : ' Days'); ?> until we party!
</div>
<?php endif; ?>
</div>
<div style="clear: both"></div>

View File

@@ -1,6 +0,0 @@
<form action="<?php echo $html->url('/pages/edit'); ?>" method="post">
<h1>Front Page Text</h1>
<?php echo $html->textarea('Pages/text', array('rows' => 35, 'cols' => 80)); ?>
<h1>Countdown Timer</h1>
<?php echo $html->dateTimeOptionTag('Pages/date', 'YMD', 24, $selected).'<br/><br/>'.$html->submit('Submit'); ?>
</form>

View File

@@ -1,42 +0,0 @@
<h2>Mozilla Privacy Policy</h2>
<h3>Website Visitors</h3>
<p>Except as described below, the Mozilla Foundation and the Mozilla Corporation (collectively "Mozilla") do not collect or require visitors to its Web sites to furnish personally-identifying information such as names, email addresses and phone numbers. Like most Web site operators, Mozilla does collect non-personally-identifying information of the sort that web browsers and servers typically make available, such as the browser type, language preference, referring site, and date and time of each visitor request. Mozilla also collects potentially personally-identifying information like Internet Protocol (IP) addresses, which are non-personally-identifying in and of themselves but could be used in conjunction with other information to personally identify users.</p>
<p>Mozilla's purpose in collecting this information is to better understand how Mozilla's visitors use its Web sites. To that end, Mozilla may share potentially personally-identifying information with its employees, contractors and affiliated organizations. Mozilla may also release non-personally-identifying information about visitors, e.g. by publishing a report on Web site usage trends. Otherwise, Mozilla will not publicly release potentially personally-identifying information except under the same circumstances as Mozilla releases personally-identifying information. Those circumstances are explained in detail below.</p>
<h3>Community Members</h3>
<p>Certain members of the Mozilla community (contributors, customers, etc.) choose to interact with Mozilla in ways that require Mozilla and others to know more about them. The amount and type of information that Mozilla gathers from those members depends on the nature of the interaction. For example, members who wish to post content to certain portions of Mozilla's Web sites are asked to provide usernames that identify that content as having been posted by a particular member. Developers, by comparison, are asked to provide contact information, up to and sometimes including telephone or fax numbers, so that they can be contacted as necessary. Customers of the Mozilla store are asked to provide even more information, including billing and shipping addresses and credit card or similar information. In each case, Mozilla collects personally-identifying information only insofar as is necessary to fulfill the purpose of the community member's interaction with Mozilla.</p>
<p>Mozilla is an open organization that believes in sharing as much information as possible about its products, its operations and its associations. Accordingly, community members should assume - as should most folks who interact with Mozilla - that any personally-identifying information provided to Mozilla will be made available to the public. There are three broad exceptions to that rule:</p>
<ol>
<li>Mozilla does not publicly release information gathered in connection with commercial transactions (i.e., transactions involving money), including transactions conducted through the Mozilla Store.</li>
<li>Mozilla does not make publicly available information that is used to authenticate users the publication of which would compromise the security of Mozilla's Web sites (e.g., passwords).</li>
<li>Mozilla does not make publicly available information that it specifically promises at the time of collection to maintain in confidence.</li>
</ol>
<p>Outside those three contexts, users should assume that personally-identifying information provided through Mozilla's Web sites will be made available to the public.</p>
<h3>Interactive Product Features</h3>
<p>Certain Mozilla products contain features that report, or that permit users to report, the user's usage patterns and problems - whether caused by Mozilla's software, third party software, or third-party Web sites - to Mozilla. The reports generated by these features typically include non-personally-identifying information such as the configuration of the user's computer and the code running at the time the problem occurred. Some of these features give users the option of providing personally-identifying information, though none of these features require it. Some Mozilla software features that do permit users to provide personally-identifying information advise in advance that such information will not be made publicly available. Mozilla analyzes the information provided by these interactive product features to develop a better understanding of how its products are performing and being used. It does not use the information to track the usage of its products by identifiable individuals.</p>
<h3>Cookies</h3>
<p>A cookie is a string of information that a Web site stores on a visitor's computer, and that the visitor's browser provides to the Web site each time the visitor returns. Mozilla's Web sites use cookies to help Mozilla identify and track visitors, their usage of Mozilla Web sites, and their Web site access preferences across multiple requests and visits to Mozilla's Web sites. It is possible to link cookies to personally-identifying information, thereby permitting Web site operators to track the online movements of particular individuals. Mozilla, however, does not do so. Instead, it uses the information provided by cookies to develop a better understanding of how Mozilla's visitors use, and to facilitate those visitors' interactions with, Mozilla's Web sites. Mozilla visitors who do not wish to have cookies placed on their computers by Mozilla or its contractors should set their browsers to refuse cookies before linking to Mozilla's Web sites. Certain features of Mozilla's Web sites may not function properly without the aid of cookies.</p>
<h3>Protection of Certain Personally-Identifying Information</h3>
<p>Where Mozilla has collected personally-identifying information subject to one of the three exceptions described in the Contributors and Customers section, above, it discloses that information only to those of its employees, contractors and affiliated organizations that need to know that information in order to process it on Mozilla's behalf and that have agreed not to disclose it to others. Some of those employees, contractors and affiliated organizations may be located outside of your home country; by using Mozilla's Web sites, you consent to the transfer of your information to them. Mozilla does not rent or sell such information to anyone. Other than to its employees, contractors and affiliated organizations, as described above, Mozilla discloses such information only when required to do so by law, or when Mozilla believes in good faith that disclosure is reasonably necessary to protect the property or rights of Mozilla, members of the Mozilla community, or the public at large. Mozilla takes all measures reasonably necessary to protect against the unauthorized access, use, alteration or destruction of such information</p>
<h3>Updating of Personally-Identifying Information</h3>
<p>Mozilla permits users to freely update and correct their personally-identifying information as maintained by Mozilla. To do so, users need only look for the links and other tools available on Mozilla's Web sites or contact Mozilla by email.</p>
<h3>Privacy Policy Changes</h3>
<p>Although changes are likely to be minor, Mozilla may change its Privacy Policy from time to time. Any and all changes will be reflected on this page. Substantive changes will also be announced through the standard mechanisms through which Mozilla communicates with the Mozilla community, including Mozilla's "mozilla-announce" mailing lists.</p>

View File

@@ -1,109 +0,0 @@
<h1>Create a Party</h1>
<form class="fxform" action="<?php echo $html->url('/parties/add'); ?>" method="post">
<div>
<label for="PartyName" class="label-large">Party Name<span class="required">*</span>:</label>
<?php echo $html->input('Party/name', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('Party/name', 'Please enter a party name.')?>
</div>
<div>
<label for="PartyVname" class="label-large">Venue Name:</label>
<?php echo $html->input('Party/vname', array('size' => 40)); ?>
</div>
<div>
<label for="PartyAddress" class="label-large">Address:</label>
<?php echo $html->input('Party/address', array('size' => 40, 'id' => 'location', 'onkeypress' => 'capture(event)', 'onblur' => 'update()')); ?>
<div id="locerr" class="info" style="display: none">Did you mean: <a id="locerrlink" onclick="geocode_suggest()" href="#"></a>? <a href="#" onclick="shide()"><span style="font-size: x-small">(close)</span></a></div>
</div>
<p>Enter your party's time and date (in your local time) here. If you're not ready to commit to a specific time or date, select the 'Tentative'
radio button. Otherwise select 'Confirmed'.</p>
<div>
<label for="PartyYear" class="label-large">Date:</label>
<?php echo $html->yearOptionTag('Party/year', null, date('Y'), MAX_YEAR, date('Y'), null, null, false); ?>-<?php echo $html->hourOptionTag('Party/month', null, false, date('m')); ?>-<?php echo $html->dayOptionTag('Party/day', null, date('d'), null, false); ?>
</div>
<div>
<label for="PartyHour" class="label-large">Time:</label>
<?php echo $html->hourOptionTag('Party/hour', null, true);?>:<?php echo $html->minuteOptionTag('Party/minute');?>
<?php echo $html->radio('Party/confirmed', array(0 => 'Tentative', 1 => 'Confirmed')); ?><br/>
</div>
<p>The timezone is used to calculate the appropriate GMT time from the local time specified above. This is done to show
the party in the local time of the person viewing it.</p>
<div>
<label for="PartyTz" class="label-large">Timezone<span class="required">*</span>:</label>
<?php
$tzs = array('-12' => 'GMT-12',
'-11' => 'GMT-11',
'-10' => 'GMT-10',
'-9' => 'GMT-9',
'-8' => 'GMT-8',
'-7' => 'GMT-7',
'-6' => 'GMT-6',
'-5' => 'GMT-5',
'-4' => 'GMT-4',
'-3' => 'GMT-3',
'-2' => 'GMT-2',
'-1' => 'GMT-1',
'0' => 'GMT+0',
'1' => 'GMT+1',
'2' => 'GMT+2',
'3' => 'GMT+3',
'4' => 'GMT+4',
'5' => 'GMT+5',
'6' => 'GMT+6',
'7' => 'GMT+7',
'8' => 'GMT+8',
'9' => 'GMT+9',
'10' => 'GMT+10',
'11' => 'GMT+11',
'12' => 'GMT+12',
'13' => 'GMT+13');
echo $html->selectTag('Party/tz', $tzs, $utz, null, null, false);
?>
(this page was loaded at <?php echo gmdate("Y-m-d H:i:s"); ?> GMT)
</div>
<div>
<label for="PartyDuration" class="label-large">Duration (in hours):</label>
<?php echo $html->input('Party/duration', array('size' => 5)); ?>
</div>
<p>Enter a website (complete with http://) that guests can visit to learn more about your party. If you don't have one, simply leave it blank.</p>
<div>
<label for="PartyWebsite" class="label-large">Web site:</label>
<?php echo $html->input('Party/website', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('Party/website', 'Invalid URL.')?>
</div>
<p>If you choose to make your party invite only, you will have to send guests an invite containing a random invite code to allow them to join your party.</p>
<div>
<label for="PartyInviteonly" class="label-large">Invite only</label>
<?php echo $html->checkbox('Party/inviteonly'); ?>
</div>
<?php if(GMAP_API_KEY != null): ?>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=<?php echo GMAP_API_KEY; ?>"
type="text/javascript"></script>
<script src="<?php echo $html->url('/js/maps.js'); ?>" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function update() {
var loc = document.getElementById("location").value;
geocode(loc);
}
function capture(event) {
if (event.keyCode == 13) {
event.preventDefault();
update();
}
}
//]]>
</script>
<p>Drag the map or the marker to specify a location. Set the zoom by using the '+' or '-' buttons on the left.</p>
<p id="map" class="med-map-r"></p>
<?php echo $html->hidden('Party/lat', array('id' => 'lat'));
echo $html->hidden('Party/long', array('id' => 'long'));
echo $html->hidden('Party/zoom', array('id' => 'zoom'));
echo $html->hidden('Party/geocoded', array('id' => 'geocoded', 'value' => 0)); ?>
<?php endif; ?>
<div>
<label for="PartyNotes" class="label-large">Additional Notes</label>
<?php echo $html->textarea('Party/notes', array('rows' => 10, 'cols' => 50)); ?>
</div>
<?php echo $html->submit('Create Party'); ?>
</form>

View File

@@ -1,7 +0,0 @@
<h1>Cancel Party</h1>
<div class="error">Warning! Canceling your party will remove all guests and send them a cancellation notice.</div>
<p>If you're sure you want to cancel your party simply hit the button below. Otherwise,
<a href="<?php echo $html->url('/parties/view/'.$pid); ?>">click here</a> to return to your party.</p>
<form action="<?php echo $html->url('/parties/cancel/'.$pid); ?>" method="post">
<?php echo $html->hidden('Party/confcancel', array('value' => 1)).$html->submit('Cancel Party'); ?>
</form>

View File

@@ -1,131 +0,0 @@
<form class="fxform" action="<?php echo $html->url('/parties/edit/'.$party['Party']['id']); ?>" method="post">
<?php echo $html->hidden('Party/id'); ?>
<h1>Details</h1>
<div>
<label for="PartyName" class="label-large">Party Name:</label>
<?php echo $html->input('Party/name', array('size' => 40)); ?>
</div>
<div>
<label for="PartyVname" class="label-large">Venue Name:</label>
<?php echo $html->input('Party/vname', array('size' => 40)); ?>
</div>
<div>
<label for="PartyWebsite" class="label-large">Web site:</label>
<?php echo $html->input('Party/website', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('Party/website', 'Invalid URL.')?>
</div>
<div>
<label for="PartyAddress" class="label-large">Address:</label>
<?php echo $html->input('Party/address', array('size' => 40, 'id' => 'location', 'onkeypress' => 'capture(event)', 'onblur' => 'update()')); ?>
<div id="suggest" style="display: none">Did you mean <span style="font-style: italic"><a id="suggest2" href="#" onclick=""></a></span>?</div>
</div>
<?php if(GMAP_API_KEY != null): ?>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=<?php echo GMAP_API_KEY; ?>"
type="text/javascript"></script>
<script src="<?php echo $html->url('/js/maps.js'); ?>" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function update(aSuggest) {
var loc;
if (!aSuggest)
loc = document.getElementById("location").value;
else
loc = aSuggest;
if (loc != "")
geocode(loc);
}
function capture(event) {
if (event.keyCode == 13) {
event.preventDefault();
update();
}
}
//]]>
</script>
<p id="map" class="med-map-r"></p>
<div>
<label for="PartyNotes" class="label-large">Additional Notes:</label>
<?php echo $html->textarea('Party/notes', array('rows' => 10, 'cols' => 50)); ?>
</div>
<h1>Date</h1>
<div>
<label for="PartyYear" class="label-large">Date:</label>
<?php echo $html->yearOptionTag('Party/year', null, date('Y'), MAX_YEAR, $date['year'], null, null, false); ?>-<?php echo $html->hourOptionTag('Party/month', null, false, $date['mon']); ?>-<?php echo $html->dayOptionTag('Party/day', null, $date['day'], null, false); ?>
</div>
<div>
<label for="PartyHour" class="label-large">Time:</label>
<?php echo $html->hourOptionTag('Party/hour', null, true, $date['hour']);?>:<?php echo $html->minuteOptionTag('Party/minute', null, $date['min']);?>
<?php echo $html->radio('Party/confirmed', array(0 => 'Tentative', 1 => 'Confirmed')); ?>
</div>
<div>
<label for="PartyTz" class="label-large">Timezone:</label>
<?php
$tzs = array('-12' => 'GMT-12',
'-11' => 'GMT-11',
'-10' => 'GMT-10',
'-9' => 'GMT-9',
'-8' => 'GMT-8',
'-7' => 'GMT-7',
'-6' => 'GMT-6',
'-5' => 'GMT-5',
'-4' => 'GMT-4',
'-3' => 'GMT-3',
'-2' => 'GMT-2',
'-1' => 'GMT-1',
'0' => 'GMT+0',
'1' => 'GMT+1',
'2' => 'GMT+2',
'3' => 'GMT+3',
'4' => 'GMT+4',
'5' => 'GMT+5',
'6' => 'GMT+6',
'7' => 'GMT+7',
'8' => 'GMT+8',
'9' => 'GMT+9',
'10' => 'GMT+10',
'11' => 'GMT+11',
'12' => 'GMT+12',
'13' => 'GMT+13');
echo $html->selectTag('Party/tz', $tzs, $date['tz'], null, null, false);?>
(current time is <?php echo gmdate("Y-m-d H:i:s"); ?>GMT)
</div>
<div>
<label for="PartyDuration" class="label-large">Duration (in hours):</label>
<?php echo $html->input('Party/duration', array('size' => 5)); ?>
</div>
<h1><span style="color: #0063dc">flick</span><span style="color: #ff0084">r<sup style="font-size: 8px">TM</sup></span> Options</h1>
<p>To show photos of your party, simply tag them with <strong><?php echo FLICKR_TAG_PREFIX.$party['Party']['id'] ?></strong> and fill out the information below.</p>
<div>
<label for="PartyUseflickr" class="label-large">Show photostream:</label>
<?php echo $html->checkbox('Party/useflickr'); ?>
</div>
<p>If you choose to show photos from anyone using your party's tag please note that no photos will show until two or more people are using the tag.</p>
<div>
<label for="PartyFlickrperms" class="label-large">Show:</label>
<?php echo $html->radio('Party/flickrperms', array(0 => 'Only my photos', 1 => 'Anyone\'s photos')); ?>
</div>
<div>
<label for="PartyFlickrusr" class="label-large">Flickr username:</label>
<?php echo $html->input('Party/flickrusr', array('size' => 40)); ?>
</div>
<h1>Privacy</h1>
<div>
<label for="PartyInviteonly" class="label-large">Invite only:</label>
<?php echo $html->checkbox('Party/inviteonly'); ?>
</div>
<div>
<label for="PartyGuestcomments" class="label-large">Limit comments to party guests only:</label>
<?php echo $html->checkbox('Party/guestcomments'); ?>
</div>
<br/>
<?php echo $html->hidden('Party/lat', array('id' => 'lat'));
echo $html->hidden('Party/long', array('id' => 'long'));
echo $html->hidden('Party/zoom', array('id' => 'zoom'));
echo $html->hidden('Party/geocoded', array('id' => 'geocoded', 'value' => 0)); ?>
<?php endif; ?>
<?php echo $html->submit('Update'); ?>
</form>

View File

@@ -1,19 +0,0 @@
<?php if(GMAP_API_KEY != null): ?>
<div style="text-align: center">
<form action="<?php echo $html->url('/parties/'); ?>" class="fxform" onsubmit="search(event)" method="post">
<label for="PartyMloc"><strong>Find a party:</strong></label>
<?php echo $html->input('Party/mloc', array('size' => 60, 'id' => 'location')).' '.$html->submit('Search'); ?>
<div id="locerr" class="info" style="display: none">Did you mean: <a id="locerrlink" onclick="geocode_suggest()" href="#"></a>? <a href="#" onclick="shide()"><span style="font-size: x-small">(close)</span></a></div>
</form>
</div>
<br/>
<script src="http://maps.google.com/maps?file=api&amp;v=2.67&amp;key=<?php echo GMAP_API_KEY; ?>"
type="text/javascript"></script>
<script src="<?php echo $html->url('/js/maps.js'); ?>" type="text/javascript"></script>
<script src="<?php echo $html->url('/parties/js'); ?>" type="text/javascript"></script>
<div id="map" class="large-map"></div>
<div id="map-load" style="visibility: hidden" class="load">
<img src="<?php echo $html->url('/img/throbber.gif'); ?>"/>
Loading...
</div>
<?php endif; ?>

View File

@@ -1,9 +0,0 @@
<h1>Invite a guest</h1>
<p>To invite a guest, simply enter their email address into the field below,
or hand them a link to
<strong><?php echo $inviteurl; ?></strong></p>
<form action="<?php echo $html->url('/parties/invite/'.$partyid) ?>" method="post">
<label for="PartyEinvite">Guest's email address:</label>
<?php echo $html->input('Party/einvite')."\n".$html->submit('Submit')."\n"; ?>
<?php echo $html->tagErrorMsg('Party/einvite', 'Invalid email address')?>
</form>

View File

@@ -1,36 +0,0 @@
<h1>Confirm Invite</h1>
<?php if (isset($party) && !isset($confirm_only)): ?>
<p>You've been invited to attend <a href="<?php echo $html->url('/parties/view/'.$party['Party']['id']); ?>"><?php echo $party['Party']['name']; ?></a>.
To join this party please select one of the options below, or <a href="<?php echo $html->url('/parties/invited/cancel/');?>">click here</a> to cancel this invitation.</p>
<div style="text-align: center">
<div style="width: 50%; float: left;">
<h2>New User</h2>
<p>Simply register for an account, and you'll be added as a guest as soon as you finish.
<a href="<?php echo $html->url('/users/register'); ?>">Create account &raquo;</a></p>
</div>
<div style="width: 50%; float: right">
<h2>Existing User</h2>
<p>Login to add yourself to the guest list.</p>
<form class="fxform" action="<?php echo $html->url('/users/login'); ?>" method="post">
<div>
<label class="label-large" for="UserEmail">Email Address:</label>
<?php echo $html->input('User/email', array('size' => 20)); ?>
</div>
<div>
<label class="label-large" for="UserPassword">Password:</label>
<?php echo $html->password('User/password', array('size' => 20)).
$html->hidden('User/icode', array('value' => $icode));?>
</div>
<div>
<?php echo $html->submit('Login'); ?>
</div>
</form>
</div>
<div style="clear: both;"></div>
</div>
<?php endif;
if (isset($party) && isset($confirm_only)): ?>
<p>You've been invited to attend <a href="<?php echo $html->url('/parties/view/'.$party['Party']['id']); ?>"><?php echo $party['Party']['name']; ?></a>.
To join this party, <a href="<?php echo $html->url('/parties/invited/'.$icode.'/confirm');?>">click here</a>, or cancel this invitation by <a href="<?php echo $html->url('/parties/invited/cancel/');?>">clicking here</a>.</p>
<?php endif; ?>

View File

@@ -1,11 +0,0 @@
<?php if (isset($party)): ?>
<strong><?php echo $party['Party']['name']?></strong><br/><?php echo $party['Party']['vname']; ?><br/><a href="<?php echo $html->url('/parties/view/'.$party['Party']['id'])?>">View Party</a>
<?php else: ?>
function addParties() {
<?php foreach ($parties as $party):
if (!empty($party['Party']['lat']) && !empty($party['Party']['long']) && !$party['Party']['canceled']): ?>
addParty(<?php echo $party['Party']['lat'];?>, <?php echo $party['Party']['long']?>, <?php echo $party['Party']['id']; ?>);
<?php endif; endforeach;?>
}
//
<?php endif; ?>

View File

@@ -1,140 +0,0 @@
<?php
if (isset($party)): ?>
<h1><?php echo $party['Party']['name']; ?></h1>
<br/>
<?php if ($party['Party']['canceled']): ?>
<div class="error">This party has been canceled</div>
<?php endif; ?>
Host: <a href="<?php echo $html->url('/users/view/'.$party['Party']['owner']).'">'.$host; ?></a><br/>
<?php
if (!empty($party['Party']['address']))
echo 'Location: '.$party['Party']['address']."<br/>\n";
if (!empty($party['Party']['vname']))
echo 'Venue: '.$party['Party']['vname']."<br/>\n";
echo 'Date: '.(($party['Party']['confirmed'] == 1) ? gmdate('Y-m-d h:ia', $party['Party']['date'] + (@$_SESSION['User']['tz'] * 60 * 60))." GMT".@$_SESSION['User']['tz'] : "TBA")."<br/>\n";
echo 'Duration: '.$party['Party']['duration'].' hour'.(($party['Party']['duration'] == 1) ? '' : 's')."\n<br/>";
if (!empty($party['Party']['website']) && preg_match("/^(http|https)\:\/\//i", $party['Party']['website']))
echo 'Website: <a href="'.$party['Party']['website'].'" rel="nofollow">'.$party['Party']['website']."</a><br/>\n";
if (!empty($party['Party']['notes']))
echo 'Notes: '.$party['Party']['notes']."<br/>\n";
?>
<br/>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=<?php echo GMAP_API_KEY; ?>"
type="text/javascript"></script>
<script src="<?php echo $html->url('/js/maps.js'); ?>" type="text/javascript"></script>
<div id="map" class="small-map"></div>
<h1>Who's coming</h1>
<div>
<?php if (!empty($guests)):
$i = 0;
$c = count($guests) - 1;
foreach ($guests as $guest): ?>
<a href="<?php echo $html->url('/users/view/'.$guest['users']['id']); ?>"><?php echo $guest['users']['name']; ?></a><?php echo ($i < $c) ? ", " : ""; ?>
<?php $i++;
endforeach;
else:
echo "No guests yet, be the first!";
endif;
if (isset($_SESSION['User']['id']) && @$_SESSION['User']['id'] != $party['Party']['owner'] && ($party['Party']['inviteonly'] != 1 || $isguest && !$party['Party']['canceled'])):?>
<br/><br/>
<form action="<?php
echo $html->url('/parties/'.((!$isguest) ? 'rsvp/' : 'unrsvp/').$party['Party']['id']); ?>" method="post">
<?php if(!$isguest): ?>
<button>Count me in!</button>
<?php else: ?>
<button>Remove me</button>
<?php endif; ?>
</form>
<?php endif; ?>
<? if ($party['Party']['inviteonly'] == 1 && (!$isguest && @$_SESSION['User']['id'] != $party['Party']['owner'] && !$party['Party']['canceled'])):?>
<p>This party is invite only. You'll need an invite code from the host to join in.</p>
<?php endif; ?>
</div>
<?php if (@$_SESSION['User']['id'] == $party['Party']['owner']):?>
<h1>Party options</h1>
<a href="<?php echo $html->url('/parties/edit/'.$party['Party']['id']);?>">Edit party</a>
<?php if (!$party['Party']['canceled']): ?>| <a href="<?php echo $html->url('/parties/invite/'.$party['Party']['id']);?>">Invite a guest</a>
<?php endif; echo (($party['Party']['canceled'] == 1) ? ' | <a href="'.$html->url('/parties/uncancel/'.$party['Party']['id']).'">
Reactivate this party</a>' : '| <a href="'.$html->url('/parties/cancel/'.$party['Party']['id']).'" onclick="return confirm(\'Are you sure you want to cancel your party?\')"><span style="color: #bc1313">Cancel this party</span></a>'); ?>
<?php endif; ?>
<?php if (isset($flickr)): ?>
<h1 id="photos">Photos <a title="Photo Feed" href="<?php echo $html->url('/feeds/photos/'.$party['Party']['id']); ?>"><img src="<?php echo $html->url('/img/feed16.png'); ?>" alt="Atom"/></a></h1>
<div style="text-align: center">
<?php if (empty($flickr)): ?>
<p>No photos yet. Tag your flickr pictures with <?php echo FLICKR_TAG_PREFIX.$party['Party']['id']; ?> to display them here.</p>
<?php else:
foreach ($flickr as $pic): ?>
<a href="http://www.flickr.com/photos/<?php echo $pic['owner']."/".$pic['id']."/" ?>"><img src="http://static.flickr.com/<?php echo $pic['server']."/".$pic['id']."_".$pic['secret']."_s.jpg" ?>" title="<?php echo $pic['title']; ?>"/></a>
<?php endforeach;
endif; ?>
<br/>
</div>
<?php endif;
if (!empty($comments)): ?>
<h1 id="comments">Comments <a title="Comment Feed" href="<?php echo $html->url('/feeds/comments/'.$party['Party']['id']); ?>"><img src="<?php echo $html->url('/img/feed16.png'); ?>" alt="RSS"/></a></h1>
<?php $i = 0;
foreach ($comments as $comment):
if ($i % 2 == 0)
$class = "";
else
$class = "comment-mod";
$i++;?>
<div id="c<?php echo $comment['comments']['cid'];?>" class="comment <?php echo $class;?>">
<span class="comment-content"><?php echo $comment['comments']['text']; ?></span>
<span class="comment-tag"><br/><br/>Posted by <a href="<?php echo $html->url('/users/view/'.$comment['users']['uid']); ?>">
<?php echo $comment['users']['name']; ?></a> on <?php echo gmdate('Y-m-d h:ia', $comment['comments']['time'] + (@$_SESSION['User']['tz'] * 60 * 60)); ?></span>
</span>
</div>
<?php endforeach;
endif;
if (isset($_SESSION['User'])):
if (($party['Party']['guestcomments'] && $isguest) || !$party['Party']['guestcomments'] || @$_SESSION['User']['id'] == $party['Party']['owner']): ?>
<h1>Add a comment</h1>
<form action="<?php echo $html->url('/comments/add/'.$party['Party']['id'].'/'.$_SESSION['User']['id']); ?>" method="post">
<div>
<?php echo $html->textarea('Comment/text', array('rows' => 10, 'cols' => 50))."<br/>".$html->submit('Submit'); ?>
</div>
</form>
<?php endif;
endif;
endif; ?>
<?php if (isset($parties)):
if (isset($prev))
echo '<a href="'.$html->url('/parties/view/all/'.$prev).'">&laquo; Previous Page</a> ';
if (isset($prev) && isset($next))
echo ' | ';
if (isset($next))
echo '<a href="'.$html->url('/parties/view/all/'.$next).'">Next Page &raquo;</a>';
$i = 0;
foreach ($parties as $party):
if ($party['Party']['canceled'] != 1): ?>
<div>
<h1><?php echo $party['Party']['name']; ?></h1>
<p>
<?php
if (!empty($party['Party']['address']))
echo 'Location: '.$party['Party']['address']."<br/>\n";
if (!empty($party['Party']['vname']))
echo 'Venue: '.$party['Party']['vname']."<br/>\n";
echo 'Date: '.(($party['Party']['confirmed'] == 1) ? gmdate('Y-m-d h:ia', $party['Party']['date'] + (@$_SESSION['User']['tz'] * 60 * 60))." GMT".@$_SESSION['User']['tz'] : "TBA")."<br/>\n";
echo '<a href="'.$html->url('/parties/view/'.$party['Party']['id']).'">View Party</a>';
?>
</p>
</div>
<?php endif; endforeach;
if (isset($prev))
echo '<a href="'.$html->url('/parties/view/all/'.$prev).'">&laquo; Previous Page</a> ';
if (isset($prev) && isset($next))
echo ' | ';
if (isset($next))
echo '<a href="'.$html->url('/parties/view/all/'.$next).'">Next Page &raquo;</a>';
endif;?>

View File

@@ -1,105 +0,0 @@
<?php if ($error): ?>
<div class="error">
There was an error in your submission, please try again.
</div>
<?php endif; ?>
<form class="fxform" action="<?php echo $html->url('/users/edit'); ?>" method="post">
<?php echo $html->hidden('User/id'); ?>
<h1>Profile</h1>
<div>
<label for="UserName" class="label-large">Name:</label>
<?php echo $html->input('User/name', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('User/name', 'You must enter a name.')?>
</div>
<div>
<label for="UserWebsite" class="label-large">Website:</label>
<?php echo $html->input('User/website', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('User/website', 'Invalid URL.')?>
</div>
<div>
<label for="location" class="label-large">Location:</label>
<?php echo $html->input('User/location', array('id' => 'location', 'size' => 40, 'onkeypress' => 'capture(event)')); ?>
</div>
<div>
<label for="UserTz" class="label-large">Timezone:</label>
<?php
$tzs = array('-12' => 'GMT-12',
'-11' => 'GMT-11',
'-10' => 'GMT-10',
'-9' => 'GMT-9',
'-8' => 'GMT-8',
'-7' => 'GMT-7',
'-6' => 'GMT-6',
'-5' => 'GMT-5',
'-4' => 'GMT-4',
'-3' => 'GMT-3',
'-2' => 'GMT-2',
'-1' => 'GMT-1',
'0' => 'GMT+0',
'1' => 'GMT+1',
'2' => 'GMT+2',
'3' => 'GMT+3',
'4' => 'GMT+4',
'5' => 'GMT+5',
'6' => 'GMT+6',
'7' => 'GMT+7',
'8' => 'GMT+8',
'9' => 'GMT+9',
'10' => 'GMT+10',
'11' => 'GMT+11',
'12' => 'GMT+12',
'13' => 'GMT+13');
echo $html->selectTag('User/tz', $tzs, $utz, null, null, false);
?>
(current time is <?php echo gmdate("Y-m-d H:i:s"); ?> GMT)
</div>
<?php if(GMAP_API_KEY != null): ?>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=<?php echo GMAP_API_KEY; ?>"
type="text/javascript"></script>
<script src="<?php echo $html->url('/js/maps.js'); ?>" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function update() {
var loc = document.getElementById("location").value;
geocode(loc);
}
function capture(event) {
if (event.keyCode == 13) {
event.preventDefault();
update();
}
}
//]]>
</script>
<p id="map" class="small-map"></p>
<?php echo $html->hidden('User/lat', array('id' => 'lat'));
echo $html->hidden('User/long', array('id' => 'long'));
echo $html->hidden('User/zoom', array('id' => 'zoom')); ?>
<?php endif; ?>
<h1>Privacy</h1>
<div>
<label for="UserShowemail" class="label-large">Show email:</label>
<?php echo $html->checkbox('User/showemail'); ?><br/>
</div>
<div>
<label for="UserShowloc" class="label-large">Show location:</label>
<?php echo $html->checkbox('User/showloc'); ?><br/>
</div>
<div>
<label for="UserShowmap" class="label-large">Show map:</label>
<?php echo $html->checkbox('User/showmap'); ?><br/>
</div>
<h1>Password</h1>
<div>
<label for="UserPassword" class="label-large">New password:</label>
<?php echo $html->password('User/password', array('size' => 20, 'autocomplete' => 'off')); ?>
</div>
<div>
<label for="UserConfpassword" class="label-large">Confirm new password:</label>
<?php echo $html->password('User/confpassword', array('size' => 20, 'autocomplete' => 'off')); ?>
<?php echo $html->tagErrorMsg('User/confpassword', 'The supplied passwords do not match!')?>
</div>
<?php echo $html->submit('Update'); ?>
</form>

View File

@@ -1,61 +0,0 @@
<h1>My Profile</h1>
<br/>
<h2>Parties I'm attending</h2>
<p>
<?php
$num_parties = count($parties);
if ($num_parties == 0)
echo 'None yet. <a href="'.$html->url('/parties/view/all').'">Find one!</a>';
else {
$c = $num_parties - 1;
$i = 0;
foreach ($parties as $party) {
echo '<a href="'.$html->url('/parties/view/'.$party['parties']['id']).'">'.$party['parties']['name'].'</a>';
echo ($i < $c) ? ', ' : '';
$i++;
}
}
?>
</p>
<h2>Parties I'm hosting</h2>
<p>
<?php
$num_parties = count($hparties);
if (empty($hparties))
echo 'None yet. <a href="'.$html->url('/parties/add').'">Create one!</a>';
else {
$c = $num_parties - 1;
$i = 0;
foreach ($hparties as $party) {
echo '<a href="'.$html->url('/parties/view/'.$party['parties']['id']).'">'.$party['parties']['name'].'</a>';
echo ($i < $c) ? ', ' : '';
$i++;
}
}
?>
<h2>Parties I've been invited to</h2>
<p>
<?php
$num_parties = count($iparties);
if (empty($iparties))
echo 'None yet.';
else {
$c = $num_parties - 1;
$i = 0;
foreach ($iparties as $party) {
echo '<a href="'.$html->url('/parties/view/'.$party['parties']['id']).'">'.$party['parties']['name'].'</a>';
echo ($i < $c) ? ', ' : '';
$i++;
}
}
?>
</p>
<h2>Account Options</h2>
<p>
<a href="<?php echo $html->url('/users/edit'); ?>">Edit my account</a>
<br/>
<a href="<?php echo $html->url('/users/logout'); ?>">Logout</a>
</p>

View File

@@ -1,17 +0,0 @@
<h1>Login</h1>
<form class="fxform" action="<?php echo $html->url('/users/login'); ?>" method="post">
<div>
<label class="label-large" for="UserEmail">Email Address:</label>
<?php echo $html->input('User/email', array('size' => 40)); ?>
</div>
<div>
<label class="label-large" for="UserPassword">Password:</label>
<?php echo $html->password('User/password', array('size' => 40)); ?>
</div>
<div>
<?php echo $html->submit('Login'); ?>
</div>
<p>
<a href="<?php echo $html->url('/users/register'); ?>">Create an account</a> | <a href="<?php echo $html->url('/users/recover/password'); ?>">Forgot your password?</a>
</p>
</form>

View File

@@ -1,26 +0,0 @@
<h1><?php echo $atitle; ?></h1>
<form class="fxform" action="<?php
if (isset($reset))
echo $html->url('/users/recover/reset/'.$code);
else
echo $html->url('/users/recover/'.$url); ?>" method="post">
<?php if (isset($error)): ?>
<div class="error">
<?php echo $error; ?>
</div>
<?php endif; ?>
<div>
<?php if (!$hideInput): ?>
<label class="label-large" for="UserEmail">Email address:</label>
<?php echo $html->input('User/email'); ?>
<?php endif;
if (isset($reset)): ?>
<label class="label-large" for="UserPassword">New password:</label>
<?php echo $html->password('User/password'); ?>
<br/>
<label class="label-large" for="UserConfirm">Confirm password:</label>
<?php echo $html->password('User/confirm'); ?>
<?php endif; ?>
</div>
<?php echo $html->submit('Submit'); ?>
</form>

View File

@@ -1,110 +0,0 @@
<h1>Register</h1>
<form class="fxform" action="<?php echo $html->url('/users/register'); ?>" method="post">
<p>Your e-mail address is used as your username to login. You'll also receive a confirmation e-mail to
this address. In order for your account to be activated successfully, you must specify a valid e-mail address.</p>
<div>
<label class="label-large" for="UserEmail">Email address<span class="required">*</span>:</label>
<?php echo $html->input('User/email', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('User/email', 'The email address you entered is invalid or has already been registered.')?>
</div>
<div>
<label class="label-large" for="UserConfemail">Confirm Email address<span class="required">*</span>:</label>
<?php echo $html->input('User/confemail', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('User/confemail', 'The email addresses you entered do not match.')?>
</div>
<p>How do you want to be known to visitors of <?php echo APP_NAME; ?>?</p>
<div>
<label class="label-large" for="UserName">Name<span class="required">*</span>:</label>
<?php echo $html->input('User/name', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('User/name', 'You must enter a name.')?>
</div>
<p>If you choose to enter it, your location will be shown on your profile. This
field is optional.
<div>
<label class="label-large" for="UserLocation">Location:</label>
<?php echo $html->input('User/location', array('id' => 'location', 'size' => 40, 'onkeypress' => 'capture(event)', 'onblur' => 'update()')); ?>
<div id="locerr" class="info" style="display: none">Did you mean: <a id="locerrlink" onclick="geocode_suggest()" href="#"></a>? <a href="#" onclick="shide()"><span style="font-size: x-small">(close)</span></a></div>
</div>
<p>If you have a website, enter the URL here. (including the http:// ) Your website will be
shown to site visitors on your author profile page. This field is optional; if you don't
have a website or don't want it linked to from <?php echo APP_NAME; ?>, leave this box blank.</p>
<div>
<label class="label-large" for="UserWebsite">Website:</label>
<?php echo $html->input('User/website', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('User/website', 'Invalid URL.')?>
</div>
<div>
<label class="label-large" for="UserTz">Timezone<span class="required">*</span>:</label>
<?php
$tzs = array('-12' => 'GMT-12',
'-11' => 'GMT-11',
'-10' => 'GMT-10',
'-9' => 'GMT-9',
'-8' => 'GMT-8',
'-7' => 'GMT-7',
'-6' => 'GMT-6',
'-5' => 'GMT-5',
'-4' => 'GMT-4',
'-3' => 'GMT-3',
'-2' => 'GMT-2',
'-1' => 'GMT-1',
'0' => 'GMT+0',
'1' => 'GMT+1',
'2' => 'GMT+2',
'3' => 'GMT+3',
'4' => 'GMT+4',
'5' => 'GMT+5',
'6' => 'GMT+6',
'7' => 'GMT+7',
'8' => 'GMT+8',
'9' => 'GMT+9',
'10' => 'GMT+10',
'11' => 'GMT+11',
'12' => 'GMT+12',
'13' => 'GMT+13');
echo $html->selectTag('User/tz', $tzs, $utz, null, null, false);
?>
(this page was loaded at <?php echo gmdate("Y-m-d H:i:s"); ?> GMT)
</div>
<div>
<label class="label-large" for="password">Password<span class="required">*</span>:</label>
<?php echo $html->password('User/password', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('User/password', 'You must enter a password.')?>
</div>
<div>
<label class="label-large" for="confpassword">Confirm password<span class="required">*</span>:</label>
<?php echo $html->password('User/confpass', array('size' => 40)); ?>
<?php echo $html->tagErrorMsg('User/confpass', 'The passwords you supplied do not match.')?>
</div>
<?php if(GMAP_API_KEY != null): ?>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=<?php echo GMAP_API_KEY; ?>"
type="text/javascript"></script>
<script src="<?php echo $html->url('/js/maps.js'); ?>" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function update() {
var loc = document.getElementById("location").value;
geocode(loc);
}
function capture(event) {
if (event.keyCode == 13) {
event.preventDefault();
update();
}
}
//]]>
</script>
<p><span class="required">*</span> Required field</p>
<p>Drag the map or the marker to specify your location. Set the zoom by using the '+' or '-' buttons on the left.</p>
<p id="map" class="med-map-r"></p>
<div>
<?php echo $html->hidden('User/lat', array('id' => 'lat'));
echo $html->hidden('User/long', array('id' => 'long'));
echo $html->hidden('User/zoom', array('id' => 'zoom'));
echo $html->hidden('User/geocoded', array('id' => 'geocoded', 'value' => 0));
echo $html->hidden('User/icode', array('value' => @$icode)); ?>
</div>
<?php endif; ?>
<?php echo $html->submit('Register'); ?>
</form>

View File

@@ -1,44 +0,0 @@
<?php
if (!empty($user['User']['name']))
echo "<h1>".$user['User']['name']."</h1><br/>";
if ($user['User']['showemail'] == 1 && @$_SESSION['User'])
echo "Email: ".$user['User']['email']."<br/>";
if ($user['User']['showloc'] == 1 && !empty($user['User']['location']))
echo "Location: ".$user['User']['location']."<br/>";
if (!empty($user['User']['website']) && preg_match("/^(http|https)\:\/\//i", $user['User']['website']))
echo 'Website: <a href="'.$user['User']['website'].'" rel="nofollow">'.$user['User']['website'].'</a><br/>';
if (!empty($parties)) {
echo "Attending: ";
$c = count($parties) - 1;
$i = 0;
foreach ($parties as $party) {
echo '<a href="'.$html->url('/parties/view/'.$party['parties']['id']).'">'.$party['parties']['name'].'</a>';
echo ($i < $c) ? ', ' : '<br/>';
$i++;
}
}
if (!empty($hparties)) {
echo "Hosting: ";
$c = count($hparties) - 1;
$i = 0;
foreach ($hparties as $party) {
echo '<a href="'.$html->url('/parties/view/'.$party['parties']['id']).'">'.$party['parties']['name'].'</a>';
echo ($i < $c) ? ', ' : '<br/>';
$i++;
}
}
?>
<?php if(isset($map) && $user['User']['showmap'] == 1): ?>
<br/>
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=<?php echo GMAP_API_KEY; ?>" type="text/javascript"></script>
<script src="<?php echo $html->url('/js/maps.js'); ?>" type="text/javascript"></script>
<div id="map" style="height: 200px; width: 350px;"></div>
<?php endif; ?>

View File

@@ -1,6 +0,0 @@
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

View File

@@ -1,101 +0,0 @@
<?php
/* SVN FILE: $Id: css.php,v 1.4 2006-10-08 03:39:23 reed%reedloden.com Exp $ */
/**
* Short description for file.
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2006, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.app.webroot
* @since CakePHP v 0.2.9
* @version $Revision: 1.4 $
* @modifiedby $LastChangedBy: phpnut $
* @lastmodified $Date: 2006-10-08 03:39:23 $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
header('HTTP/1.1 404 Not Found');
}
/**
* Enter description here...
*/
require(LIBS . 'folder.php');
require(LIBS . 'legacy.php');
/**
* Enter description here...
*
* @param unknown_type $path
* @param unknown_type $name
* @return unknown
*/
function make_clean_css($path, $name) {
require(VENDORS . 'csspp' . DS . 'csspp.php');
$data =file_get_contents($path);
$csspp =new csspp();
$output=$csspp->compress($data);
$ratio =100 - (round(strlen($output) / strlen($data), 3) * 100);
$output=" /* file: $name, ratio: $ratio% */ " . $output;
return $output;
}
/**
* Enter description here...
*
* @param unknown_type $path
* @param unknown_type $content
* @return unknown
*/
function write_css_cache($path, $content) {
if (!is_dir(dirname($path))) {
mkdir(dirname($path));
}
$cache=new File($path);
return $cache->write($content);
}
if (preg_match('|\.\.|', $url) || !preg_match('|^ccss/(.+)$|i', $url, $regs)) {
die('Wrong file name.');
}
$filename = 'css/' . $regs[1];
$filepath = CSS . $regs[1];
$cachepath = CACHE . 'css' . DS . str_replace(array('/','\\'), '-', $regs[1]);
if (!file_exists($filepath)) {
die('Wrong file name.');
}
if (file_exists($cachepath)) {
$templateModified=filemtime($filepath);
$cacheModified =filemtime($cachepath);
if ($templateModified > $cacheModified) {
$output=make_clean_css($filepath, $filename);
write_css_cache($cachepath, $output);
} else {
$output = file_get_contents($cachepath);
}
} else {
$output=make_clean_css($filepath, $filename);
write_css_cache($cachepath, $output);
}
header("Date: " . date("D, j M Y G:i:s ", $templateModified) . 'GMT');
header("Content-Type: text/css");
header("Expires: " . gmdate("D, j M Y H:i:s", time() + DAY) . " GMT");
header("Cache-Control: cache"); // HTTP/1.1
header("Pragma: cache"); // HTTP/1.0
print $output;
?>

View File

@@ -1,230 +0,0 @@
.error, .error_message {
background: #ffa5a5;
border: 1px solid red;
text-align: center;
font-weight: bold;
padding: 5px;
margin: 5px 0 5px 0;
}
.form_error {
background: #ffa5a5;
border: 1px solid red;
}
.info {
background: #fffe94;
border: 1px solid yellow;
text-align: center;
font-weight: bold;
padding: 5px;
margin: 5px 0 5px 0;
}
.att { color: #d4d4d4; }
#f-left {
width: 75%;
float: left;
}
#f-right {
width: 25%;
float: right;
}
.cbox {
text-align: center;
border: 1px solid #808080;
background: #eee;
padding: 5px;
margin: 10px;
}
.cbox a { outline: none; }
.ctxt {
font-size: 200%;
font-weight: bold;
}
.cfeed {
position: relative;
bottom: 15px;
float: right;
height: 16px;
width: 16px;
}
.ifeed {
position: relative;
bottom: 15px;
float: right;
height: 16px;
width: 34px;
}
.required { color: red; font-weight: bold;}
.fxform div { margin: 1em 0; }
.label-large, .label-medium, .label-small {
border-bottom: 1px dashed #eee;
float: left;
font-weight: bold;
}
.label-large { width: 14em; }
.large-map { width: 700px; height: 500px; margin: 0 auto; }
.med-map-r { width: 500px; height: 300px; margin: 0 auto; }
.med-map-r div { margin: 0; }
.small-map { width: 400px; height: 200px;}
.small-map div { margin: 0; }
.load { width: 700px; margin: 0 auto; padding-top: 5px; }
.comment {
border: 1px solid #ccc;
border-top: 0;
padding: 10px 5px 0 5px;
}
.comment-mod { background: #ecedf3; }
.comment-content { font-size: 125%; padding-bottom: 50px; }
.comment-tag { font-size: 75%; }
h1 { border-bottom: 1px solid #ccc;
margin-bottom: 0;}
#footer { padding: 30px 0 20px 0; }
img { border: none }
body {
background: #fff url("../img/body_back.png") top repeat-x;
color: #555;
font-family: arial, sans-serif;
margin: 0 10px;
padding: 0;
font-size: x-small;
voice-family: "\"}\"";
voice-family: inherit;
font-size: small;
}
a { color: #34518c; text-decoration: none; }
a:hover { text-decoration: underline; }
#container {
width: 740px;
margin: 0 auto;
}
#mozilla-com a {
float: right;
display: block;
outline: none;
text-indent: -5000em;
width: 110px;
height: 25px;
text-decoration: none;
background: url("../img/mozilla-org.png") no-repeat;
}
#key-menu {
background: #B2C1C8 url("../img/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("../img/header-top.gif") 0 0 no-repeat;
}
#key-menu li {
float: left;
background: url("../img/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("../img/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("../img/tabs.gif") 100% 0;
border-bottom-color: white;
}
#key-menu li.current a, #key-menu li.current span {
background: url("../img/tabs.gif") 0 0;
color: #999;
}
#key-menu a:focus { outline: none; }
#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;
}
#user {
position: absolute;
right: 0;
top: 9px;
margin-left: 200px;
font-family: tahoma, arial, sans-serif;
font-size: 95%;
}
.skipLink {
position: absolute;
left: -1200px;
width: 990px;
}
#map {
border: 1px solid #555;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

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: 443 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 825 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -1,87 +0,0 @@
<?php
/* SVN FILE: $Id: index.php,v 1.4 2006-10-08 03:39:23 reed%reedloden.com Exp $ */
/**
* Short description for file.
*
* Long description for file
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2006, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.app.webroot
* @since CakePHP v 0.2.9
* @version $Revision: 1.4 $
* @modifiedby $LastChangedBy: phpnut $
* @lastmodified $Date: 2006-10-08 03:39:23 $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
* Do not change
*/
if (!defined('DS')) {
define('DS', DIRECTORY_SEPARATOR);
}
/**
* These defines should only be edited if you have cake installed in
* a directory layout other than the way it is distributed.
* Each define has a commented line of code that explains what you would change.
*
*/
if (!defined('ROOT')) {
//define('ROOT', 'FULL PATH TO DIRECTORY WHERE APP DIRECTORY IS LOCATED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
//You should also use the DS define to seperate your directories
define('ROOT', dirname(dirname(dirname(__FILE__))));
}
if (!defined('APP_DIR')) {
//define('APP_DIR', 'DIRECTORY NAME OF APPLICATION';
define('APP_DIR', basename(dirname(dirname(__FILE__))));
}
/**
* This only needs to be changed if the cake installed libs are located
* outside of the distributed directory structure.
*/
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
//define ('CAKE_CORE_INCLUDE_PATH', FULL PATH TO DIRECTORY WHERE CAKE CORE IS INSTALLED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
//You should also use the DS define to seperate your directories
define('CAKE_CORE_INCLUDE_PATH', ROOT);
}
///////////////////////////////
//DO NOT EDIT BELOW THIS LINE//
///////////////////////////////
if (!defined('WEBROOT_DIR')) {
define('WEBROOT_DIR', basename(dirname(__FILE__)));
}
if (!defined('WWW_ROOT')) {
define('WWW_ROOT', dirname(__FILE__) . DS);
}
if (!defined('CORE_PATH')) {
if (function_exists('ini_set')) {
ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS);
define('APP_PATH', null);
define('CORE_PATH', null);
} else {
define('APP_PATH', ROOT . DS . APP_DIR . DS);
define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
}
}
require CORE_PATH . 'cake' . DS . 'bootstrap.php';
if (isset($_GET['url']) && $_GET['url'] === 'favicon.ico') {
} else {
$Dispatcher=new Dispatcher();
$Dispatcher->dispatch($url);
}
if (DEBUG) {
echo "<!-- " . round(getMicrotime() - $TIME_START, 4) . "s -->";
}
?>

View File

@@ -1,172 +0,0 @@
var map;
var marker;
var mouseloc;
function wheelZoom(event) {
function out() {
map.setCenter(mouseloc);
map.zoomOut();
}
if (event.cancelable) event.preventDefault();
{
(event.detail || -event.wheelDelta) < 0 ? map.zoomIn(mouseloc, true) : out();
}
return false;
}
function mapInit(aLat, aLng, aZoom, aState) {
map = new GMap2(document.getElementById("map"));
map.addControl((aState == "stationary") ? new GSmallZoomControl() : new GSmallMapControl());
if (aLat) {
map.setCenter(new GLatLng(aLat, aLng), aZoom);
if (marker) {
map.removeOverlay(marker);
}
marker = new GMarker(new GLatLng(aLat, aLng), (aState != "stationary") ? {draggable: true} : {draggable: false});
}
else {
map.setCenter(new GLatLng(14.944785, -156.796875), 1);
if (marker) {
map.removeOverlay(marker);
}
marker = new GMarker(new GLatLng(14.944785, -156.796875), (aState != "stationary") ? {draggable: true} : {draggable: false});
}
map.addOverlay(marker);
if (aState != "stationary") {
GEvent.addListener(marker, "dragend", function() { onDragEnd(); });
GEvent.addListener(map, "moveend", function(){ onMoveEnd(); });
}
}
function search(event) {
document.getElementById('map-load').setAttribute('style', '');
if (event.cancelable) event.preventDefault();
{
var q = document.getElementById('location').value;
var gcoder = new GClientGeocoder();
gcoder.getLatLng(q, function (point) {
if (!point) {
suggest(q);
document.getElementById('map-load').setAttribute('style', 'visibility: hidden');
}
else {
map.setZoom(10);
map.panTo(point);
document.getElementById('map-load').setAttribute('style', 'visibility: hidden');
}
});
}
return false;
}
function geocode(aLoc) {
var gcoder = new GClientGeocoder();
gcoder.getLatLng(aLoc, function (point) {
if (!point) {
suggest(aLoc);
}
else {
map.setZoom(10);
map.panTo(point);
map.removeOverlay(marker);
marker = new GMarker(point, {draggable: true});
GEvent.addListener(marker, "dragend", function() { onDragEnd(); });
map.addOverlay(marker);
}
});
}
function suggest(loc) {
GDownloadUrl("/js/suggest.php?s=" + loc, function(data, responseCode) {
if (data != 0) {
document.getElementById('locerrlink').innerHTML = data;
document.getElementById('locerr').setAttribute('style', '');
}
});
}
function geocode_suggest() {
var str = document.getElementById('locerrlink').innerHTML;
document.getElementById('location').value = str;
document.getElementById('locerr').setAttribute('style', 'display: none');
geocode(str);
}
function onMoveEnd() {
var point = map.getCenter();
map.removeOverlay(marker);
marker = new GMarker(point, {draggable: true});
map.addOverlay(marker);
GEvent.addListener(marker, "dragend", function() { onDragEnd(); });
editForm();
}
function onDragEnd() {
var point = marker.getPoint()
map.panTo(point);
}
function initMashUp(lat, lng) {
map = new GMap2(document.getElementById("map"));
map.enableDoubleClickZoom();
map.enableContinuousZoom();
map.addControl(new GLargeMapControl());
map.addControl(new GMapTypeControl());
map.setCenter(new GLatLng(0, -5.25), 1);
GEvent.addDomListener(document.getElementById("map"), "DOMMouseScroll", wheelZoom);
GEvent.addDomListener(document.getElementById("map"), "mousewheel", wheelZoom);
GEvent.addListener(map, "mousemove", function(point) { mouseloc = point; });
GEvent.addListener(map, "click", function(overlay, point) {
if (overlay) {
if (overlay.mid) {
downloadMarker(overlay.mid, overlay);
}
}
});
if (lat && lng)
map.setCenter(new GLatLng(lat, lng), 10);
else
map.setCenter(new GLatLng(0, -5.25), 1);
addParties();
}
function editForm() {
var ll = map.getCenter();
document.getElementById('lat').value = ll.lat();
document.getElementById('long').value = ll.lng();
document.getElementById('zoom').value = map.getZoom();
}
function shide() {
document.getElementById('locerr').setAttribute('style', 'display: none');
}
function downloadMarker(mid, overlay) {
document.getElementById('map-load').setAttribute('style', '');
GDownloadUrl("/parties/js/html/" + mid, function(data, responseCode) {
if (data != "" && responseCode == 200) {
document.getElementById('map-load').setAttribute('style', 'visibility: hidden');
overlay.openInfoWindowHtml(data);
}
});
}
function addParty(aLat, aLng, aId) {
var point = new GLatLng(aLat, aLng);
var icon = new GIcon();
icon.image = "/img/marker.png";
icon.iconSize = new GSize(12, 20);
icon.iconAnchor = new GPoint(6, 20);
icon.infoWindowAnchor = new GPoint(5, 1);
var mark = new GMarker(point, icon);
mark.mid = aId;
map.addOverlay(mark);
}

View File

@@ -1,47 +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 Party Tool
*
* The Initial Developer of the Original Code is
* Ryan Flint <rflint@dslr.net>
* Portions created by the Initial Developer are Copyright (C) 2006
* 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 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 ***** */
if (empty($_REQUEST['s']))
die();
include('../../vendors/webServices.php');
include('../../config/bootstrap.php');
$suggest = new webServices(array('type' => 'gsuggest'));
$string = $suggest->GSuggest($_REQUEST['s']);
header('Content-type: text/plain');
echo $string;
?>

View File

@@ -1,43 +0,0 @@
<?php
/* SVN FILE: $Id: vendors.php,v 1.4 2006-10-08 03:39:24 reed%reedloden.com Exp $ */
/**
* Short description for file.
*
* This file includes js vendor-files from /vendor/ directory if they need to
* be accessible to the public.
*
* PHP versions 4 and 5
*
* CakePHP : Rapid Development Framework <http://www.cakephp.org/>
* Copyright (c) 2006, Cake Software Foundation, Inc.
* 1785 E. Sahara Avenue, Suite 490-204
* Las Vegas, Nevada 89104
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @filesource
* @copyright Copyright (c) 2006, Cake Software Foundation, Inc.
* @link http://www.cakefoundation.org/projects/info/cakephp CakePHP Project
* @package cake
* @subpackage cake.app.webroot.js
* @since CakePHP v 0.2.9
* @version $Revision: 1.4 $
* @modifiedby $LastChangedBy: phpnut $
* @lastmodified $Date: 2006-10-08 03:39:24 $
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
/**
* Enter description here...
*/
$file = $_GET['file'];
$pos = strpos($file, '..');
if ($pos === false) {
if(is_file('../../vendors/javascript/'.$file) && (preg_match('/(\/.+)\\.js/', $file)))
{
readfile('../../vendors/javascript/'.$file);
}
} else {
header('HTTP/1.1 404 Not Found');
}
?>

View File

@@ -0,0 +1,239 @@
function createShortcuts()
{
var subkey;
var valname;
var szStartMenuPrograms;
var szStartMenu;
var szFolderDesktop;
var szFolderQuickLaunch;
var szFolderSendTo;
var winreg;
var fWindows;
var fTemp;
var fCommunicator;
var fileExe;
var scExeDesc;
var scProfileDesc;
var scProfileDescParam;
var scFolderName;
var fFolderPath;
var fFolderPathStr;
var is_winnt;
var szCurrentVersion;
winreg = getWinRegistry();
fWindows = getFolder("Windows");
fCommunicator = getFolder("Communicator");
fTemp = fCommunicator + "\\mozilla.exe";
fileExe = getFolder("file:///", fTemp);
scExeDesc = "Mozilla Seamonkey";
scProfileDesc = "Profile Manager";
scProfileDescParam = "-ProfileManager";
scFolderName = "Mozilla Seamonkey";
if(winreg != null)
{
winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
subkey = "SOFTWARE\\Mozilla\\Mozilla Seamonkey\\$UserAgent$\\Main";
valname = "Program Folder Path";
fFolderPathStr = winreg.getValueString(subkey, valname);
if((fFolderPathStr == "") || (fFolderPathStr == null))
{
/* determine if the script is running under NT or not */
winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
subkey = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
valname = "CurrentVersion";
szCurrentVersion = winreg.getValueString(subkey, valname);
logComment("szCurrentVersion: " + szCurrentVersion);
if((szCurrentVersion == "") || (szCurrentVersion == null))
{
is_winnt = false;
}
else
{
is_winnt = true;
}
if(is_winnt == false)
{
logComment("is_winnt is false: " + is_winnt);
winreg.setRootKey(winreg.HKEY_CURRENT_USER);
subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
valname = "Programs";
szStartMenuPrograms = winreg.getValueString(subkey, valname);
valname = "Start Menu";
szStartMenu = winreg.getValueString(subkey, valname);
valname = "Desktop";
szFolderDesktop = winreg.getValueString(subkey, valname);
}
else
{
logComment("is_winnt is true: " + is_winnt);
winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
valname = "Common Programs";
szStartMenuPrograms = winreg.getValueString(subkey, valname);
valname = "Common Start Menu";
szStartMenu = winreg.getValueString(subkey, valname);
valname = "Common Desktop";
szFolderDesktop = winreg.getValueString(subkey, valname);
}
winreg.setRootKey(winreg.HKEY_CURRENT_USER);
subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
valname = "SendTo";
szFolderSendTo = winreg.getValueString(subkey, valname);
subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\GrpConv\\MapGroups";
valname = "Quick Launch";
szFolderQuickLaunch = winreg.getValueString(subkey, valname);
fTemp = szStartMenuPrograms + "\\" + scFolderName;
fFolderPath = getFolder("file:///", fTemp);
logComment("Folder StartMenuPrograms: " + szStartMenuPrograms);
logComment("Folder StartMenu: " + szStartMenu);
logComment("Folder FolderDesktop: " + szFolderDesktop);
logComment("Folder FolderSendTo: " + szFolderSendTo);
logComment("Folder FolderQuickLaunch: " + szFolderQuickLaunch);
}
else
{
/* convert the path string to a path folder object */
fFolderPath = getFolder("file:///", fFolderPathStr);
}
logComment("fileExe: " + fileExe);
logComment("fFolderPath: " + fFolderPath);
logComment("scExeDesc: " + scExeDesc);
logComment("fCommunicator : " + fCommunicator);
/* explicitly create the fFolderPath even though the windowsShortcut function creates the folder.
* This is so that the folder creation gets logged for uninstall to remove it. */
File.dirCreate(fFolderPath);
/* create the shortcuts */
File.windowsShortcut(fileExe, fFolderPath, scExeDesc, fCommunicator, "", fileExe, 0);
File.windowsShortcut(fileExe, fFolderPath, scProfileDesc, fCommunicator, scProfileDescParam, fileExe, 0);
/* set the Program Folder Path in the Mozilla key in the Windows Registry */
winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
subkey = "SOFTWARE\\Mozilla";
winreg.createKey(subkey,"");
valname = "CurrentVersion";
subkey = "SOFTWARE\\Mozilla\\Mozilla Seamonkey";
winreg.createKey(subkey,"");
valname = "CurrentVersion";
value = "$UserAgent$";
err = winreg.setValueString(subkey, valname, value);
subkey = "SOFTWARE\\Mozilla\\Mozilla Seamonkey\\$UserAgent$";
winreg.createKey(subkey,"");
subkey = "SOFTWARE\\Mozilla\\Mozilla Seamonkey\\$UserAgent$\\Main";
winreg.createKey(subkey,"");
valname = "Program Folder Path";
value = fFolderPath;
err = winreg.setValueString(subkey, valname, value);
}
else
{
logComment("winreg is null");
}
}
function updateWinReg()
{
//Notes:
// can't use a double backslash before subkey - Windows already puts it in.
// subkeys have to exist before values can be put in.
var winreg = getWinRegistry();
var subkey; //the name of the subkey you are poking around in
var valname; // the name of the value you want to look at
var value; //the data in the value you want to look at.
if(winreg != null)
{
winreg.setRootKey(winreg.HKEY_LOCAL_MACHINE);
subkey = "SOFTWARE\\Mozilla";
winreg.createKey(subkey,"");
subkey = "SOFTWARE\\Mozilla\\Mozilla Seamonkey";
winreg.createKey(subkey,"");
valname = "CurrentVersion";
value = "$UserAgent$";
err = winreg.setValueString(subkey, valname, value);
subkey = "SOFTWARE\\Mozilla\\Mozilla Seamonkey\\$UserAgent$";
winreg.createKey(subkey,"");
subkey = "SOFTWARE\\Mozilla\\Mozilla Seamonkey\\$UserAgent$\\Main";
winreg.createKey(subkey,"");
valname = "Install Directory";
value = fCommunicator;
err = winreg.setValueString(subkey, valname, value);
// set the App Paths key here
subkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\mozilla.exe";
winreg.createKey(subkey,"");
valname = "";
value = fCommunicator + "\\mozilla.exe";
err = winreg.setValueString(subkey, valname, value);
valname = "Path";
value = fCommunicator;
err = winreg.setValueString(subkey, valname, value);
}
}
// main
var srDest;
var err;
var fCommunicator;
var fWindowsSystem;
var fileComponentRegStr;
var fileComponentReg;
srDest = $SpaceRequired$:bin;
err = startInstall("Mozilla Seamonkey", "Browser", "$Version$");
logComment("startInstall: " + err);
fCommunicator = getFolder("Communicator");
fWindowsSystem = getFolder("Win System");
logComment("fCommunicator: " + fCommunicator);
if(verifyDiskSpace(fCommunicator, srDest) == true)
{
setPackageFolder(fCommunicator);
err = addDirectory("",
"$Version$",
"bin", // dir name in jar to extract
fCommunicator, // Where to put this file (Returned from GetFolder)
"", // subdir name to create relative to fCommunicator
true); // Force Flag
logComment("addDirectory() of Program returned: " + err);
// check return value
if(!checkError(err))
{
fileComponentRegStr = fCommunicator + "\\component.reg";
fileComponentReg = getFolder("file:///", fileComponentRegStr);
err = fileDelete(fileComponentReg);
logComment("fileDelete() returned: " + err);
updateWinReg();
createShortcuts();
err = finalizeInstall();
logComment("finalizeInstall() returned: " + err);
}
}
// end main

View File

@@ -0,0 +1,494 @@
[General]
; Run Mode values:
; Normal - Shows all dialogs. Requires user input.
; Auto - Shows some dialogs, but none requiring user input. It will
; automatically install the product using default values.
; Silent - Show no dialogs at all. It will install product using default
; values.
Run Mode=Normal
Product Name=Mozilla Seamonkey
; Destination Path values:
; PROGRAMFILESDIR
; WINDISK
; WINDIR
; WINSYSDIR
Path=[PROGRAMFILESDIR]\Mozilla\Seamonkey
; Program Folder Path values:
; COMMON_STARTUP
; COMMON_PROGRAMS
; COMMON_STARTMENU
; COMMON_DESKTOP
;
; PERSONAL_STARTUP
; PERSONAL_PROGRAMS
; PERSONAL_STARTMENU
; PERSONAL_DESKTOP
;
; PERSONAL_APPDATA
; PERSONAL_CACHE
; PERSONAL_COOKIES
; PERSONAL_FAVORITES
; PERSONAL_FONTS
; PERSONAL_HISTORY
; PERSONAL_NETHOOD
; PERSONAL_PERSONAL
; PERSONAL_PRINTHOOD (supported only under Windows NT)
; PERSONAL_RECENT
; PERSONAL_SENDTO
; PERSONAL_TEMPLATES
;
; PROGRAMFILESDIR
; COMMONFILESDIR
; MEDIAPATH
; CONFIGPATH (supported only under Windows95 and Windows98)
; DEVICEPATH
Program Folder Name=Mozilla Seamonkey
Program Folder Path=[COMMON_PROGRAMS]
; Default Setup Type values:
; Setup Type 0 - first radio button (default)
; Setup Type 1 - second radio button
; Setup Type 2 - third radio button
; Setup Type 3 - fourth radio button (usually the Custom option)
Default Setup Type=Setup Type 0
; Default Font Size is 32
; Default Font Color is WHITE (of BLACK and GREEN)
; Default Font Shadow is TRUE
Setup Title0=Mozilla Seamonkey Pr2 Setup
Setup Title0 Font Size=
Setup Title0 Font Color=
Setup Title0 Font Shadow=TRUE
Setup Title1=Build $Version$
Setup Title1 Font Size=12
Setup Title1 Font Color=BLACK
Setup Title1 Font Shadow=FALSE
Setup Title2=
Setup Title2 Font Size=
Setup Title2 Font Color=
Setup Title2 Font Shadow=TRUE
; HKey: valid decryptable setup keys are [Mozilla Seamonkey CurrentVersion]
; and [Mozilla Seamonkey CurrentVersion].
; Decrypt HKey: there are times when '[' and ']' are valid part of windows registry key names.
; Contains Filename: tells setup that the path contains filename needed to be removed before
; using it as a path.
; Verify Existance: FILE or PATH
;
[Locate Previous Product Path0]
HRoot=HKEY_LOCAL_MACHINE
HKey=[Netscape Seamonkey CurrentVersion]\Main
Name=Install Directory
Decrypt HKey=TRUE
Contains Filename=FALSE
Verify Existance=
; This section checks for legacy files.
; If the file(s), indicated by the Filename= key, is found to have a version of less than the value
; indicated by the Version= key, then display the string in the Message= key.
[Legacy Check0]
Filename=[SETUP PATH]\mozilla.exe
Version=6.0.0.0
Message=Setup has detected an old version of Mozilla in the chosen destination directory that may pose compatibility issues. It is highly recommended that a different destination directory be used. Would you like to choose a different directory?
[Dialog Welcome]
Show Dialog=TRUE
Title=Welcome
Message0=Welcome to %s Setup.
Message1=It is strongly recommended that you exit all Windows programs before running this Setup program.
Message2=Click Cancel to quit Setup and then close any programs you have running. Click Next to continue the Setup program.
[Dialog License]
Show Dialog=FALSE
Title=Software License Agreement
License File=license.txt
Message0=Please read the following license agreement. Use the scroll bar to view the rest of this agreement.
Message1=Click Accept if you accept the terms of the preceeding license agreement. If No is clicked, setup will quit.
[Dialog Setup Type]
Show Dialog=TRUE
Title=Setup Type
Message0=Click the type of setup you prefer, then click Next.
Readme Filename=readme.txt
Readme App=notepad.exe
; at least one Setup Type needs to be set, and up to 4 can be
; set (Setup Type0, Setup Type1, Setup Type2, Setup Type3).
[Setup Type0]
Description Short=B&ase
Description Long=Program will be installed with the minimal options.
; List of components to install/enable for this Setup Type.
; All other components not listed here will be disabled if
; this Setup Type is selected.
C0=Component0
C1=Component1
[Setup Type1]
Description Short=C&omplete
Description Long=Program will be installed with the most common options.
; List of components to install/enable for this Setup Type.
; All other components not listed here will be disabled if
; this Setup Type is selected.
C0=Component0
C1=Component1
C2=Component2
[Setup Type2]
Description Short=C&ustom
Description Long=You may choose the options you want to install. Recommended for advanced users only.
;Description Short=&Pro
;Description Long=Program will be installed with all the options available.
; List of components to install/enable for this Setup Type.
; All other components not listed here will be disabled if
; this Setup Type is selected.
C0=Component0
C1=Component1
C2=Component2
;[Setup Type3]
;Description Short=C&ustom
;Description Long=You may choose the options you want to install. Recommended for advanced users.
; List of components to install/enable for this Setup Type.
; All other components not listed here will be disabled if
; this Setup Type is selected.
;C0=Component0
;C1=Component1
;C2=Component2
;C3=Component3
[Dialog Select Components]
Show Dialog=TRUE
Title=Select Components
Message0=The browser is always installed. Select or clear the additional components you want to install.
[Dialog Windows Integration]
Show Dialog=FALSE
Title=Windows Integration
Message0=Check the Mozilla Preference options you would like Setup to perform.
Message1=These settings allow you to set default Internet preferences for browsing and searching. They affect browsers installed on your machine, including Mozilla Communicator and Microsoft Internet Explorer.
; Only a maximum of 4 "Windows Integration-Item"s are allowded. Each Item
; shows up as a checkbox in the Windows Integration dialog.
[Windows Integration-Item0]
CheckBoxState=FALSE
Description=Make Mozilla Communicator my default Internet browser
Archive=
[Windows Integration-Item1]
CheckBoxState=FALSE
Description=Make Mozilla Netcenter my home page
Archive=
[Windows Integration-Item2]
CheckBoxState=FALSE
Description=Use Mozilla Netcenter to search the Web
Archive=
[Dialog Program Folder]
Show Dialog=TRUE
Title=Select Program Folder
Message0=Setup will add program icons to the Program Folder listed below. You may type a new folder name, or select one from the Existing Folder list. Click Install to begin installation.
[Dialog Site Selector]
Show Dialog=FALSE
Title=Site Selector
Message0=Select the region you wish to download from, or leave it on Default for Setup to automatically determine the best place to download from relative to where you are.
[Dialog Start Install]
Show Dialog=FALSE
Title=Start Install
Message0=Setup has enough information to start copying the program files. If you want to review or change settings, click Back. If you are satisfied with the current settings, click Install to begin copying files.
[Dialog Reboot]
; Show Dialog values are:
; TRUE - Always show
; FALSE - Don't show unless at least one component has its reboot show value set
; to TRUE. This will not show even if some files were in use and a reboot
; is necessary.
; AUTO - Don't show unless a component has its reboot show value set to
; TRUE or there was at least one file in use and a reboot is
; is required for the file to be replaced correctly.
Show Dialog=AUTO
; These SmartDownload sections contain information to configure SmartDownload.
; The info is applied to all components to be downloaded.
[SmartDownload-Netscape Install]
;core_file=base.zip
;core_dir=[SETUP PATH]
no_ads=true
silent=false
execution=false
confirm_install=false
;extract_msg=Uncompressing Seamonkey. Please wait...
[SmartDownload-Proxy]
[SmartDownload-Execution]
exe=
exe_param=
[Check Instance0]
Class Name=NetscapeWindowClass
Window Name=
Message=Setup has detected that an instance of Seamonkey is currently running. Please quit Seamonkey before continuing Setup.
[Check Instance1]
Process Name=psm.exe
Message=Setup has detected that an instance of Personal Security Manager is currently running. Personal Security Manager will quit by itself when there are no other applications running that require it. A reboot might be necessary. Setup will then be able to continue.
; These are the components to be offered to the user (shown in the Select
; Components dialog) for installation.
; There is no limit to the number of components to install.
[Component0]
Description Short=Mozilla Xpinstall Engine
Description Long=Install Engine
Archive=core.xpi
$InstallSize$:core
$InstallSizeSystem$
$InstallSizeArchive$:core.xpi
;Dependency0=
Dependee0=Mozilla Seamonkey
; Attributes can be the following values:
; SELECTED - the component is selected to be installed by default.
; INVISIBLE - the component is not shown in the Select Components dialog.
Attributes=SELECTED|INVISIBLE
; url keys can be as many as needed. url0 is attempted first. if it fails,
; the next url key is tried in sequential order.
; The url should not contain the filename. Setup will assemble the complete url
; using the url keys and the Archive key.
Domain0=$Domain$
Server Path0=$ServerPath$
[Component1]
Description Short=Mozilla Seamonkey
Description Long=Browser software for the internet
Archive=browser.xpi
$InstallSize$:browser
$InstallSizeSystem$
$InstallSizeArchive$:browser.xpi
;Dependency0=
; Attributes can be the following values:
; SELECTED - the component is selected to be installed by default.
; INVISIBLE - the component is not shown in the Select Components dialog.
Attributes=SELECTED|DISABLED
; url keys can be as many as needed. url0 is attempted first. if it fails,
; the next url key is tried in sequential order.
; The url should not contain the filename. Setup will assemble the complete url
; using the url keys and the Archive key.
Domain0=$Domain$
Server Path0=$ServerPath$
;url0=$URLPath$
[Component2]
Description Short=Mail & News
Description Long=Seamonkey Mail && News
Archive=mail.xpi
$InstallSize$:mail
$InstallSizeSystem$
$InstallSizeArchive$:mail.xpi
;Dependency0=
; Attributes can be the following values:
; SELECTED - the component is selected to be installed by default.
; INVISIBLE - the component is not shown in the Select Components dialog.
Attributes=SELECTED
Parameter=
; url keys can be as many as needed. url0 is attempted first. if it fails,
; the next url key is tried in sequential order.
; The url should not contain the filename. Setup will assemble the complete url
; using the url keys and the Archive key.
Domain0=$Domain$
Server Path0=$ServerPath$
;url0=$URLPath$
[Core]
Source=[XPI PATH]\core.xpi
Destination=[WIZTEMP]\core.ns
$InstallSize$:core
Cleanup=TRUE
Message=Preparing Install, please wait...
[Redirect]
Status=Enabled
url0=$RedirIniUrl$
Description=
Message=
; The Timing key needs to be one of the following values:
; pre download - process before any files have been downloaded.
; post download - process after all files have been downloaded.
; pre core - process before the core file has been uncompressed.
; post core - process after the core file has been uncompressed.
; pre smartupdate - process before the smartupdate engine has been launched.
; post smartupdate - process after the smartupdate engine has been launched.
; pre launchapp - process before the launching of executables.
; post launchapp - process after the launching of executables.
; depend reboot - process depending on if a reboot is necessary or not.
; if reboot is necessary, installer can set it up so
; the app runs once upon windows reboot.
;Uncompress FileX sections
;[Uncompress File0]
;Timing=post download
;Source=[XPI PATH]\core.xpi
;Destination=[SETUP PATH]
;Message=Configuring Seamonkey, please wait...
;[Uncompress File1]
;Timing=post download
;Source=[XPI PATH]\extratest.xpi
;Destination=[SETUP PATH]
;Message=Configuring Extra test files, please wait...
;Move FileX sections
;[Move File0]
;Timing=post download
;Source=[SETUP PATH]\bin\*
;Destination=[SETUP PATH]\program
;[Move File1]
;Timing=post download
;Source=[SETUP PATH]\ftmain\*
;Destination=[SETUP PATH]\program
;Copy FileX sections
[Copy File0]
Timing=post launchapp
Source=[JRE BIN PATH]\npjava*.dll
Destination=[SETUP PATH]\Plugins
Fail If Exists=FALSE
;[Copy File1]
;Timing=post launchapp
;Source=[TEMP]\xtratest\bin\*.*
;Destination=[SETUP PATH]
;Fail If Exists=FALSE
;[Copy File1]
;Timing=post download
;Source=[SETUP PATH]\bin\*.exe
;Destination=[TEMP]
;Fail If Exists=
;Create DirectoryX sections
[Create Directory0]
Timing=post download
Destination=[SETUP PATH]\Plugins
;[Create Directory1]
;Timing=post download
;Destination=[TEMP]\Test\temp
;Delete FileX sections
[Delete File0]
Timing=post download
Destination=[COMMON_PROGRAMS]\Mozilla Seamonkey\Mozilla AppRunner.lnk
;Remove DirectoryX sections
;[Remove Directory0]
;Timing=post launchapp
;Destination=[TEMP]\xtratest
;Remove subdirs=TRUE
;RunAppX sections
[RunApp0]
Timing=depend reboot
Wait=FALSE
Target=[SETUP PATH]\mozilla.exe
Parameters=-installer
WorkingDir=[SETUP PATH]
[Windows Registry0]
Root Key=HKEY_LOCAL_MACHINE
Key=Software\Mozilla\Mozilla Seamonkey\$UserAgent$\Main
Name=Program Folder Path
Name Value=[Default Folder]
Type=REG_SZ
Decrypt Key=FALSE
Decrypt Name=FALSE
Decrypt Name Value=TRUE
Overwrite Key=TRUE
Overwrite Name=TRUE
Timing=pre smartupdate
; Values for Show Folder:
; HIDE Hides the window and activates another window.
; MAXIMIZE Maximizes the specified window.
; MINIMIZE Minimizes the specified window and activates the next
; top-level window in the z-order.
; RESTORE Activates and displays the window. If the window is
; minimized or maximized, Windows restores it to its
; original size and position. An application should specify
; this flag when restoring a minimized window.
; SHOW Activates the window and displays it in its current size
; and position.
; SHOWMAXIMIZED Activates the window and displays it as a maximized
; window.
; SHOWMINIMIZED Activates the window and displays it as a minimized
; window.
; SHOWMINNOACTIVE Displays the window as a minimized window. The active
; window remains active.
; SHOWNA Displays the window in its current state. The active
; window remains active.
; SHOWNOACTIVATE Displays a window in its most recent size and position.
; The active window remains active.
; SHOWNORMAL Activates and displays a window. If the window is
; minimized or maximized, Windows restores it to its
; original size and position. An application should specify
; this flag when displaying the window for the first time.
[Program Folder0]
Timing=post smartupdate
Show Folder=SHOW
Program Folder=[Default Folder]
;[Program Folder0-Shortcut0]
;File=[SETUP PATH]\mozilla.exe
;Arguments=
;Working Dir=[SETUP PATH]
;Description=Mozilla Seamonkey
;Icon Path=[SETUP PATH]\mozilla.exe
;Icon Id=0
;[Program Folder0-Shortcut1]
;File=[SETUP PATH]\mozilla.exe
;Arguments=-ProfileManager
;Working Dir=[SETUP PATH]
;Description=Profile Manager
;Icon Path=[SETUP PATH]\mozilla.exe
;Icon Id=0
;[Program Folder0-Shortcut2]
;File=[SETUP PATH]\bin\Net2fone.exe
;Arguments=
;Working Dir=[SETUP PATH]
;Description=Net2Fone
;Icon Path=[SETUP PATH]\bin\Net2fone.exe
;Icon Id=0
;[Program Folder1]
;Timing=post download
;Show Folder=SHOW
;Program Folder=[Default Folder]\lala land
;[Program Folder1-Shortcut0]
;File=c:\bin\getver.exe
;Arguments=
;Working Dir=[TEMP]
;Description=Getver Test
;Icon Path=[WINDISK]\4nt\4nt.exe
;Icon Id=0
;[Program Folder1-Shortcut1]
;File=c:\perl\bin\perl.exe
;Arguments=
;Working Dir=[WINSYS]
;Description=Perl
;Icon Path=c:\perl\bin\perl.exe
;Icon Id=0

View File

@@ -0,0 +1,41 @@
// main
var srDest;
var err;
var communicatorFolder;
var fWindowsSystem;
var fileComponentRegStr;
var fileComponentReg;
srDest = $SpaceRequired$:bin;
err = startInstall("Mozilla XPCom", "XPCom", "$Version$");
logComment("startInstall: " + err);
communicatorFolder = getFolder("Communicator");
fWindowsSystem = getFolder("Win System");
logComment("communicatorFolder: " + communicatorFolder);
if(verifyDiskSpace(communicatorFolder, srDest) == true)
{
setPackageFolder(communicatorFolder);
err = addDirectory("",
"$Version$",
"bin", // dir name in jar to extract
communicatorFolder, // Where to put this file (Returned from GetFolder)
"", // subdir name to create relative to communicatorFolder
true); // Force Flag
logComment("addDirectory() of Program returned: " + err);
// check return value
if(!checkError(err))
{
fileComponentRegStr = communicatorFolder + "\\component.reg";
fileComponentReg = getFolder("file:///", fileComponentRegStr);
err = fileDelete(fileComponentReg);
logComment("fileDelete() returned: " + err);
err = finalizeInstall();
logComment("finalizeInstall() returned: " + err);
}
}
// end main

View File

@@ -0,0 +1,18 @@
var err = StartInstall("Mozilla Editor", "Seamonkey", "$Version$");
LogComment("StartInstall: " + err);
var communicatorFolder = Install.GetFolder("Communicator");
LogComment("communicatorFolder: " + communicatorFolder);
err = AddDirectory("Program",
"$Version$",
"bin", // fileName in jar,
communicatorFolder, // Where to put this file (Returned from GetFolder)
"", // fileName in jar,
true); // Force Flag
LogComment("AddDirectory() returned: " + err);
err = FinalizeInstall();
LogComment("FinalizeInstall() returned: " + err);

View File

@@ -0,0 +1,34 @@
// main
var srDest;
var err;
var communicatorFolder;
srDest = $SpaceRequired$:bin;
err = startInstall("Mozilla Mail", "Mail", "$Version$");
logComment("startInstall: " + err);
// check return value
checkError(err);
communicatorFolder = getFolder("Communicator");
logComment("communicatorFolder: " + communicatorFolder);
if(verifyDiskSpace(communicatorFolder, srDest) == true)
{
setPackageFolder(communicatorFolder);
err = addDirectory("",
"$Version$",
"bin", // dir name in jar to extract
communicatorFolder, // Where to put this file (Returned from GetFolder)
"", // subdir name to create relative to communicatorFolder
true); // Force Flag
logComment("addDirectory() returned: " + err);
// check return value
if(!checkError(err))
{
err = finalizeInstall();
logComment("finalizeInstall() returned: " + err);
}
}
// end main

View File

@@ -0,0 +1,134 @@
#!c:\perl\bin\perl
#
# 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, released
# March 31, 1998.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998-1999 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Sean Su <ssu@netscape.com>
#
#
# This perl script builds the xpi, config.ini, and js files.
#
# Make sure there are at least four arguments
if($#ARGV < 2)
{
die "usage: $0 <default version> <staging path> <dist install path>
default version : y2k compliant based date version.
ie: 5.0.0.2000040413
staging path : full path to where the components are staged at
dist install path : full path to where the dist install dir is at.
ie: d:\\builds\\mozilla\\dist\\win32_o.obj\\install
\n";
}
$inDefaultVersion = $ARGV[0];
$inStagePath = $ARGV[1];
$inDistPath = $ARGV[2];
$inRedirIniUrl = "ftp://not.needed.com/because/the/xpi/files/will/be/located/in/the/same/dir/as/the/installer";
$inXpiUrl = "ftp://not.needed.com/because/the/xpi/files/will/be/located/in/the/same/dir/as/the/installer";
$seiFileNameGeneric = "nsinstall.exe";
$seiFileNameSpecific = "mozilla-win32-installer.exe";
$userAgent = "5.0b2 (en)";
# Check for existance of staging path
if(!(-e "$inStagePath"))
{
die "invalid path: $inStagePath\n";
}
# Make sure inDestPath exists
if(!(-e "$inDistPath"))
{
mkdir ("$inDestPath",0775);
}
# Make .js files
MakeJsFile("core");
MakeJsFile("browser");
MakeJsFile("mail");
# Make .xpi files
MakeXpiFile("core");
MakeXpiFile("browser");
MakeXpiFile("mail");
MakeConfigFile();
if(-e "$inDistPath\\setup")
{
unlink <$inDistPath\\setup\\*>;
}
else
{
mkdir ("$inDistPath\\setup",0775);
}
# Copy the setup files to the dist setup directory.
system("xcopy /f config.ini $inDistPath\\");
system("xcopy /f config.ini $inDistPath\\setup\\");
system("xcopy /f $inDistPath\\setup.exe $inDistPath\\setup\\");
system("xcopy /f $inDistPath\\setuprsc.dll $inDistPath\\setup\\");
# build the self-extracting .exe file.
print "\nbuilding self-extracting installer ($seiFileNameSpecific)...\n";
system("copy $inDistPath\\$seiFileNameGeneric $inDistPath\\$seiFileNameSpecific");
system("$inDistPath\\nszip.exe $inDistPath\\$seiFileNameSpecific $inDistPath\\setup\\*.* $inDistPath\\xpi\\*.*");
print " done!\n";
# end of script
exit(0);
sub MakeConfigFile
{
# Make config.ini file
if(system("perl makecfgini.pl config.it $inDefaultVersion \"$userAgent\" $inStagePath $inDistPath\\xpi $inRedirIniUrl $inXpiUrl") != 0)
{
exit(1);
}
}
sub MakeJsFile
{
my($componentName) = @_;
# Make .js file
if(system("perl makejs.pl $componentName.jst $inDefaultVersion \"$userAgent\" $inStagePath\\$componentName") != 0)
{
exit(1);
}
}
sub MakeXpiFile
{
my($componentName) = @_;
# Make .xpi file
if(system("perl makexpi.pl $componentName $inStagePath $inDistPath\\xpi") != 0)
{
exit(1);
}
}

View File

@@ -0,0 +1,277 @@
#!c:\perl\bin\perl
#
# 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, released
# March 31, 1998.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998-1999 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Sean Su <ssu@netscape.com>
#
#
# This perl script parses the input file for special variables
# in the format of $Variable$ and replace it with the appropriate
# value(s).
#
# Input: .it file
# - which is a .ini template
#
# version
# - version to display on the blue background
#
# UserAgent
# - user agent to use in the windows registry. should be the same as the one
# built into the browser (ie "6.0b2 (en)")
#
# Path to staging area
# - path on where the seamonkey built bits are staged to
#
# xpi path
# - path on where xpi files will be located at
#
# redirect file url
# - url to where the redirect.ini file will be staged at.
# Either ftp:// or http:// can be used
# ie: ftp://ftp.netscape.com/pub/seamonkey
#
# xpi url
# - url to where the .xpi files will be staged at.
# Either ftp:// or http:// can be used
# ie: ftp://ftp.netscape.com/pub/seamonkey/xpi
#
# ie: perl makecfgini.pl config.it 5.0.0.1999120608 "5.0b1 (en)" k:\windows\32bit\5.0 d:\builds\mozilla\dist\win32_o.obj\install\xpi ftp://ftp.netscape.com/pub/seamonkey/windows/32bit/x86/1999-09-13-10-M10 ftp://ftp.netscape.com/pub/seamonkey/windows/32bit/x86/1999-09-13-10-M10/xpi
#
#
# Make sure there are at least two arguments
if($#ARGV < 6)
{
die "usage: $0 <.it file> <version> <UserAgent> <staging path> <.xpi path> <redirect file url> <xpi url>
.it file : input ini template file
version : version to be shown in setup. Typically the same version
as show in mozilla.exe.
UserAgent : user agent to use in the windows registry. should be the same as the one
built into the browser (ie \"6.0b2 (en)\")
staging path : path to where the components are staged at
.xpi path : path to where the .xpi files have been built to
ie: d:\\builds\\mozilla\\dist\\win32_o.obj\\install\\xpi
redirect file : url to where the redirect.ini file will be staged at.
url Either ftp:// or http:// can be used
ie: ftp://ftp.netscape.com/pub/seamonkey
xpi url : url to where the .xpi files will be staged at.
Either ftp:// or http:// can be used
ie: ftp://ftp.netscape.com/pub/seamonkey/xpi
\n";
}
$inItFile = $ARGV[0];
$inVersion = $ARGV[1];
$inUserAgent = $ARGV[2];
$inStagePath = $ARGV[3];
$inXpiPath = $ARGV[4];
$inRedirIniUrl = $ARGV[5];
$inUrl = $ARGV[6];
$inDomain;
$inServerPath;
($inDomain, $inServerPath) = ParseDomainAndPath($inUrl);
# Get the name of the file replacing the .it extension with a .ini extension
@inItFileSplit = split(/\./,$inItFile);
$outIniFile = $inItFileSplit[0];
$outIniFile .= ".ini";
# Open the input file
open(fpInIt, $inItFile) || die "\ncould not open $ARGV[0]: $!\n";
# Open the output file
open(fpOutIni, ">$outIniFile") || die "\nCould not open $outIniFile: $!\n";
print "\n Making $outIniFile...\n";
# While loop to read each line from input file
while($line = <fpInIt>)
{
# For each line read, search and replace $InstallSize$ with the calculated size
if($line =~ /\$InstallSize\$/i)
{
$installSize = 0;
$installSizeSystem = 0;
# split read line by ":" deliminator
@colonSplit = split(/:/, $line);
if($#colonSplit >= 0)
{
$componentName = $colonSplit[1];
chop($componentName);
$installSize = OutputInstallSize("$inStagePath\\$componentName");
# special oji consideration here. Since it's an installer that
# seamonkey installer will be calling, the disk space allocation
# needs to be adjusted by an expansion factor of 3.62.
if($componentName =~ /oji/i)
{
$installSize = int($installSize * 3.62);
}
}
# Read the next line to calculate for the "Install Size System="
if($line = <fpInIt>)
{
if($line =~ /\$InstallSizeSystem\$/i)
{
$installSizeSystem = OutputInstallSizeSystem($line, "$inStagePath\\$componentName");
}
}
$installSize -= $installSizeSystem;
print fpOutIni "Install Size=$installSize\n";
print fpOutIni "Install Size System=$installSizeSystem\n";
}
elsif($line =~ /\$InstallSizeArchive\$/i)
{
$installSizeArchive = 0;
# split read line by ":" deliminator
@colonSplit = split(/:/, $line);
if($#colonSplit >= 0)
{
$componentName = $colonSplit[1];
chop($componentName);
$installSizeArchive = OutputInstallSizeArchive("$inXpiPath\\$componentName");
}
print fpOutIni "Install Size Archive=$installSizeArchive\n";
}
else
{
# For each line read, search and replace $Version$ with the version passed in
$line =~ s/\$Version\$/$inVersion/i;
$line =~ s/\$Domain\$/$inDomain/i;
$line =~ s/\$ServerPath\$/$inServerPath/i;
$line =~ s/\$RedirIniUrl\$/$inRedirIniUrl/i;
$line =~ s/\$UserAgent\$/$inUserAgent/i;
print fpOutIni $line;
}
}
print " done!\n";
# end of script
exit(0);
sub ParseDomainAndPath()
{
my($aUrl) = @_;
my($aDomain, $aServerPath);
@slashSplit = split(/\//, $aUrl);
if($#slashSplit >= 0)
{
for($i = 0; $i <= $#slashSplit; $i++)
{
if($i <= 2)
{
if($aDomain eq "")
{
$aDomain = "$slashSplit[$i]";
}
else
{
$aDomain = "$aDomain/$slashSplit[$i]";
}
}
else
{
if($aServerPath eq "")
{
$aServerPath = "/$slashSplit[$i]";
}
else
{
$aServerPath = "$aServerPath/$slashSplit[$i]";
}
}
}
}
return($aDomain, $aServerPath);
}
sub OutputInstallSize()
{
my($inPath) = @_;
my($installSize);
print " calculating size for $inPath\n";
$installSize = `ds32.exe /D /L0 /A /S /C 32768 $inPath`;
$installSize += 32768; # take into account install.js
$installSize = int($installSize / 1024);
$installSize += 1;
return($installSize);
}
sub OutputInstallSizeArchive()
{
my($inPath) = @_;
my($installSizeArchive);
my($dev, $ino, $mode, $nlink, $uid, $gui, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks);
print " calculating size for $inPath\n";
($dev, $ino, $mode, $nlink, $uid, $gui, $rdev, $size, $atime, $mtime, $ctime, $blksize, $blocks) = stat $inPath;
$installSizeArchive += 32768; # take into account install.js
$installSizeArchive = int($size / 1024);
$installSizeArchive += 1;
return($installSizeArchive);
}
sub OutputInstallSizeSystem()
{
my($inLine, $inPath) = @_;
my($installSizeSystem) = 0;
# split read line by ":" deliminator
@colonSplit = split(/:/, $inLine);
if($#colonSplit >= 0)
{
# split line by "," deliminator
@commaSplit = split(/\,/, $colonSplit[1]);
if($#commaSplit >= 0)
{
foreach(@commaSplit)
{
# calculate the size of component installed using ds32.exe in Kbytes
print " calculating size for $inPath\\$_";
$installSizeSystem += `ds32.exe /D /L0 /A /S /C 32768 $inPath\\$_`;
}
}
}
$installSizeSystem = int($installSizeSystem / 1024);
$installSizeSystem += 1;
return($installSizeSystem);
}

View File

@@ -0,0 +1,122 @@
#!c:\perl\bin\perl
#
# 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, released
# March 31, 1998.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998-1999 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Sean Su <ssu@netscape.com>
#
#
# This perl script parses the input file for special variables
# in the format of $Variable$ and replace it with the appropriate
# value(s).
#
# Input: .jst file - which is a .js template
# default version - a julian date in the form of:
# major.minor.release.yydoy
# ie: 5.0.0.99256
# user agent - user agent of product
# component staging path - path to where the components are staged at
#
# ie: perl makejs.pl core.jst 5.0.0.99256
#
# Make sure there are at least two arguments
if($#ARGV < 3)
{
die "usage: $0 <.jst file> <default version> <UserAgent> <staging path>
.jst file : .js template input file
default version : default julian base version number to use in the
form of: major.minor.release.yydoy
ie: 5.0.0.99256
user agent : user agent of product (5.0b1 [en])
component staging path : path to where this component is staged at
ie: z:\\stage\\windows\\32bit\\en\\5.0\\core
\n";
}
$inJstFile = $ARGV[0];
$inVersion = $ARGV[1];
$inUserAgent = $ARGV[2];
$inStagePath = $ARGV[3];
# Get the name of the file replacing the .jst extension with a .js extension
@inJstFileSplit = split(/\./,$inJstFile);
$outJsFile = $inJstFileSplit[0];
$outJsFile .= ".js";
$outTempFile = $inJstFileSplit[0];
$outTempFile .= ".template";
system("copy ..\\common\\share.t $outTempFile");
system("cat $inJstFile >> $outTempFile");
# Open the input .template file
open(fpInTemplate, $outTempFile) || die "\ncould not open $outTempFile: $!\n";
# Open the output .js file
open(fpOutJs, ">$outJsFile") || die "\nCould not open $outJsFile: $!\n";
# While loop to read each line from input file
while($line = <fpInTemplate>)
{
# For each line read, search and replace $Version$ with the version passed in
if($line =~ /\$Version\$/i)
{
$line =~ s/\$Version\$/$inVersion/i;
}
elsif($line =~ /\$UserAgent\$/i)
{
$line =~ s/\$UserAgent\$/$inUserAgent/i;
}
elsif($line =~ /\$SpaceRequired\$/i) # For each line read, search and replace $InstallSize$ with the calculated size
{
$spaceRequired = 0;
# split read line by ":" deliminator
@colonSplit = split(/:/, $line);
if($#colonSplit > 0)
{
@semiColonSplit = split(/;/, $colonSplit[1]);
$subDir = $semiColonSplit[0];
$spaceRequired = GetSpaceRequired("$inStagePath\\$subDir");
$line =~ s/\$SpaceRequired\$:$subDir/$spaceRequired/i;
}
else
{
$spaceRequired = GetSpaceRequired("$inStagePath");
$line =~ s/\$SpaceRequired\$/$spaceRequired/i;
}
}
print fpOutJs $line;
}
sub GetSpaceRequired()
{
my($inPath) = @_;
my($spaceRequired);
print " calulating size for $inPath\n";
$spaceRequired = `ds32.exe /D /L0 /A /S /C 32768 $inPath`;
$spaceRequired = int($spaceRequired / 1024);
$spaceRequired += 1;
return($spaceRequired);
}

View File

@@ -0,0 +1,114 @@
#!c:\perl\bin\perl
#
# 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, released
# March 31, 1998.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998-1999 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Sean Su <ssu@netscape.com>
#
#
# This perl script creates .xpi files given component input name
#
# Input: component name
# - name of the component directory located in the staging path
# staging path
# - path to where the built files are staged at
# dest path
# - path to where the .xpi files are are to be created at.
# ** MUST BE AN ABSOLUTE PATH, NOT A RELATIVE PATH **
#
# ie: perl makexpi.pl core z:\exposed\windows\32bit\en\5.0 d:\build\mozilla\dist\win32_o.obj\install\working
#
use File::Copy;
use Cwd;
# Make sure there are at least three arguments
if($#ARGV < 2)
{
die "usage: $0 <component name> <staging path> <dest path>
component name : name of component directory within staging path
staging path : path to where the components are staged at
dest path : path to where the .xpi files are to be created at
\n";
}
$inComponentName = $ARGV[0];
$inStagePath = $ARGV[1];
$inDestPath = $ARGV[2];
# check for existance of staging component path
if(!(-e "$inStagePath\\$inComponentName"))
{
die "invalid path: $inStagePath\\$inComponentName\n";
}
# check for existance of .js script
if(!(-e "$inComponentName.js"))
{
die "missing .js script: $inComponentName.js\n";
}
# delete component .xpi file
if(-e "$inDestPath\\$inComponentName.xpi")
{
unlink("$inDestPath\\$inComponentName.xpi");
}
if(-e "$inStagePath\\$incomponentName\\$inComponentName.xpi")
{
unlink("$inDestPath\\$inComponentName.xpi");
}
# delete install.js
if(-e "install.js")
{
unlink("install.js");
}
# make sure inDestPath exists
if(!(-e "$inDestPath"))
{
system("mkdir $inDestPath");
}
print "\n Making $inComponentName.xpi...\n";
$saveCwdir = cwd();
# change directory to where the files are, else zip will store
# unwanted path information.
chdir("$inStagePath\\$inComponentName");
system("zip -r $inDestPath\\$inComponentName.xpi *");
chdir("$saveCwdir");
copy("$inComponentName.js", "install.js");
system("zip -g $inDestPath\\$inComponentName.xpi install.js");
# delete install.js
if(-e "install.js")
{
unlink("install.js");
}
print " done!\n";
# end of script
exit(0);

View File

@@ -0,0 +1,111 @@
#!c:\perl\bin\perl
#
# 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, released
# March 31, 1998.
#
# The Initial Developer of the Original Code is Netscape
# Communications Corporation. Portions created by Netscape are
# Copyright (C) 1998-1999 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s):
# Sean Su <ssu@netscape.com>
#
use Cwd;
if($#ARGV < 0)
{
print_usage();
exit(1);
}
print "removing directory:\n";
for($i = 0; $i <= $#ARGV; $i++)
{
print " $ARGV[$i]";
remove_dir_structure($ARGV[$i]);
print "\n";
}
exit(0);
# end
sub remove_dir_structure
{
my($curr_dir) = @_;
$save_cwd = cwd();
$save_cwd =~ s/\//\\/g;
if((-e "$curr_dir") && (-d "$curr_dir"))
{
remove_all_dir($curr_dir);
chdir($save_cwd);
remove_directory($curr_dir);
print " done!";
}
else
{
if(!(-e "$curr_dir"))
{
print "\n";
print "$curr_dir does not exist!";
}
elsif(!(-d "$curr_dir"))
{
print "\n";
print "$curr_dir is not a valid directory!";
}
}
}
sub remove_all_dir
{
my($curr_dir) = @_;
my(@dirlist);
my($dir);
chdir("$curr_dir");
@dirlist = <*>;
foreach $dir (@dirlist)
{
if(-d "$dir")
{
print ".";
remove_all_dir($dir);
}
}
chdir("..");
remove_directory($curr_dir);
}
sub remove_directory
{
my($directory) = @_;
my($save_cwd);
$save_cwd = cwd();
$save_cwd =~ s/\//\\/g;
if(-e "$directory")
{
chdir($directory);
unlink <*>; # remove files
chdir($save_cwd);
rmdir $directory; # remove directory
}
}
sub print_usage
{
print "usage: $0 <dir1> [dir2 dir3...]\n";
}

View File

@@ -0,0 +1,83 @@
#
# 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,
# released March 31, 1998.
#
# 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):
# Daniel Veditz <dveditz@netscape.com>
# Douglas Turner <dougt@netscape.com>
#
DEPTH = ../..
topsrcdir = @top_srcdir@
srcdir = @srcdir@
VPATH = @srcdir@
include $(DEPTH)/config/autoconf.mk
MODULE = xpinstall
LIBRARY_NAME = xpinstall
SHORT_LIBNAME = xpinstal
IS_COMPONENT = 1
EXTRA_DSO_LIBS = jsdom
REQUIRES = dom js netlib raptor xpcom
# XXX shouldn't need to export this
EXPORTS = nsXPITriggerInfo.h
CPPSRCS = \
nsInstall.cpp \
nsInstallTrigger.cpp \
nsInstallVersion.cpp \
nsInstallFolder.cpp \
nsJSInstall.cpp \
nsJSFile.cpp \
nsJSInstallTriggerGlobal.cpp \
nsJSInstallVersion.cpp \
nsSoftwareUpdate.cpp \
nsSoftwareUpdateRun.cpp \
nsInstallFile.cpp \
nsInstallDelete.cpp \
nsInstallExecute.cpp \
nsInstallPatch.cpp \
nsInstallUninstall.cpp \
nsInstallResources.cpp \
nsTopProgressNotifier.cpp \
nsLoggingProgressNotifier.cpp \
ScheduledTasks.cpp \
nsInstallProgressDialog.cpp \
nsXPITriggerInfo.cpp \
nsXPInstallManager.cpp \
nsInstallFileOpItem.cpp \
nsJSFileSpecObj.cpp \
$(NULL)
LOCAL_INCLUDES = -I$(srcdir)/../public
EXTRA_DSO_LDOPTS = \
$(MOZ_REGISTRY_LIBS) \
-L$(DIST)/bin \
$(EXTRA_DSO_LIBS) \
$(MOZ_JS_LIBS) \
$(MOZ_COMPONENT_LIBS) \
$(ZLIB_LIBS) \
$(NULL)
include $(topsrcdir)/config/rules.mk

View File

@@ -0,0 +1,924 @@
/* -*- Mode: C; tab-width: 4; 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 Communicator client code,
* released March 31, 1998.
*
* 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):
* Douglas Turner <dougt@netscape.com>
*/
#include "PatchableAppleSingle.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
OSErr PAS_EncodeFile(FSSpec *inSpec, FSSpec *outSpec);
OSErr PAS_DecodeFile(FSSpec *inSpec, FSSpec *outSpec);
OSErr PAS_encodeResource(FSSpec *inFile, short outRefNum);
OSErr PAS_decodeResource(PASEntry *entry, FSSpec *outFile, short inRefNum);
OSErr PAS_encodeMisc(FSSpec *inFile, short outRefNum);
OSErr PAS_decodeMisc(PASEntry *entry, FSSpec *outFile, short inRefNum);
OSErr PAS_encodeData(FSSpec *inFile, short outRefNum);
OSErr PAS_decodeData(PASEntry *entry, FSSpec *outFile, short inRefNum);
OSErr PAS_encodeHeader(short refnum);
OSErr PAS_decodeHeader(short refNum, PASHeader *header);
unsigned long PAS_getDataSize(FSSpec *spec);
short PAS_getResourceID(Handle resource);
OSErr PAS_flattenResource(ResType type, short *ids, long count, short source, short dest);
OSErr PAS_unflattenResource(PASResource *pasRes, Ptr buffer);
void PAS_sortTypes(short sourceRefNum, ResType **resTypePtr, long *count);
void PAS_sortIDs(short sourceRefNum, OSType theType, short **IdPtr, long *count);
void PAS_bubbleSortResType(ResType *types, long count);
void PAS_bubbleSortIDS(short *ids, long count);
OSErr PAS_EncodeFile(FSSpec *inSpec, FSSpec *outSpec)
{
OSErr err;
short outRefNum;
PASEntry dataEntry, miscEntry, resourceEntry;
long sizeOfEntry;
if (inSpec == NULL || outSpec == NULL)
return paramErr;
memset(&dataEntry, 0, sizeof(PASEntry));
memset(&miscEntry, 0, sizeof(PASEntry));
memset(&resourceEntry, 0, sizeof(PASEntry));
FSpDelete( outSpec ) ;
err = FSpCreate( outSpec, kCreator, kType ,smSystemScript );
if (err != noErr) return err;
err = FSpOpenDF(outSpec, fsRdWrPerm, &outRefNum);
if (err != noErr) goto error;
// Write Out Header
err = PAS_encodeHeader(outRefNum);
if (err != noErr) goto error;
/* Why am I using three (3)?
E stand for entry.
The data for the entry is after the THREE headers
|---------|----|----|----|---------------------->
header E E E
*/
// Write Out Data Entry
dataEntry.entryID = ePas_Data;
dataEntry.entryLength = PAS_getDataSize(inSpec);
dataEntry.entryOffset = sizeof(PASHeader) + (3 * sizeof(PASEntry));
sizeOfEntry = sizeof(PASEntry);
if(dataEntry.entryLength < 0)
{
err = dataEntry.entryLength;
goto error;
}
err = FSWrite(outRefNum, &sizeOfEntry, &dataEntry);
if (err != noErr) goto error;
// Write Out Misc Entry
miscEntry.entryID = ePas_Misc;
miscEntry.entryLength = sizeof(PASMiscInfo);
miscEntry.entryOffset = sizeof(PASHeader) + (3 * sizeof(PASEntry)) + dataEntry.entryLength;
sizeOfEntry = sizeof(PASEntry);
err = FSWrite(outRefNum, &sizeOfEntry, &miscEntry);
if (err != noErr) goto error;
// Write Out Resource Entry
resourceEntry.entryID = ePas_Resource;
resourceEntry.entryLength = -1;
resourceEntry.entryOffset = sizeof(PASHeader) + (3 * sizeof(PASEntry)) + dataEntry.entryLength + miscEntry.entryLength;
sizeOfEntry = sizeof(PASEntry);
err = FSWrite(outRefNum, &sizeOfEntry, &resourceEntry);
if (err != noErr) goto error;
err = PAS_encodeData(inSpec, outRefNum);
if (err != noErr) goto error;
err = PAS_encodeMisc(inSpec, outRefNum);
if (err != noErr) goto error;
err = PAS_encodeResource(inSpec, outRefNum);
if (err == kResFileNotOpened)
{
// there was no resource fork
err = noErr;
}
else if (err != noErr)
{
goto error;
}
FSClose(outRefNum);
return noErr;
error:
if (outRefNum != kResFileNotOpened)
{
FSClose(outRefNum);
}
FSpDelete( outSpec ) ;
return err;
}
OSErr PAS_DecodeFile(FSSpec *inSpec, FSSpec *outSpec)
{
OSErr err;
short inRefNum;
PASHeader header;
PASEntry dataEntry, miscEntry, resourceEntry;
long sizeOfEntry;
if (inSpec == NULL || outSpec == NULL)
return paramErr;
FSpDelete( outSpec ) ;
err = FSpCreate( outSpec, kCreator, kType ,smSystemScript );
if (err != noErr) return err;
err = FSpOpenDF(inSpec, fsRdPerm, &inRefNum);
if (err != noErr) goto error;
// Read Header
err = PAS_decodeHeader(inRefNum, &header);
if (err != noErr) goto error;
if( header.magicNum != PAS_MAGIC_NUM ||
header.versionNum != PAS_VERSION)
{
err = -1;
goto error;
}
// Read Data Entry
err = SetFPos(inRefNum, fsFromStart, sizeof(PASHeader));
if (err != noErr) goto error;
sizeOfEntry = sizeof(PASEntry);
err = FSRead(inRefNum, &sizeOfEntry, &dataEntry);
if (err != noErr) goto error;
// Read Misc Entry
err = SetFPos(inRefNum, fsFromStart, (sizeof(PASHeader) + sizeof(PASEntry)));
if (err != noErr) goto error;
sizeOfEntry = sizeof(PASEntry);
err = FSRead(inRefNum, &sizeOfEntry, &miscEntry);
if (err != noErr) goto error;
// Read Resource Entry
err = SetFPos(inRefNum, fsFromStart, (sizeof(PASHeader) + (2 * sizeof(PASEntry)))) ;
if (err != noErr) goto error;
sizeOfEntry = sizeof(PASEntry);
err = FSRead(inRefNum, &sizeOfEntry, &resourceEntry);
if (err != noErr) goto error;
err = PAS_decodeData(&dataEntry, outSpec, inRefNum);
if (err != noErr) goto error;
err = PAS_decodeMisc(&miscEntry, outSpec, inRefNum);
if (err != noErr) goto error;
err = PAS_decodeResource(&resourceEntry, outSpec, inRefNum);
if (err == kResFileNotOpened)
{
// there was no resource fork
err = noErr;
}
else if (err != noErr)
{
goto error;
}
FSClose(inRefNum);
return noErr;
error:
if (inRefNum != kResFileNotOpened)
{
FSClose(inRefNum);
}
FSpDelete( outSpec ) ;
return err;
}
#pragma mark -
OSErr PAS_encodeResource(FSSpec *inFile, short outRefNum)
{
OSErr err;
short inRefNum;
PASResFork resInfo;
SInt32 currentWrite;
ResType *resTypes;
long typeCount;
short *ids;
long idCount;
short oldResFile;
oldResFile=CurResFile();
inRefNum = FSpOpenResFile(inFile, fsRdPerm);
if (inRefNum < noErr) return inRefNum;
UseResFile(inRefNum);
memset(&resInfo, 0, sizeof(PASResFork));
PAS_sortTypes(inRefNum, &resTypes, &typeCount);
resInfo.NumberOfTypes = typeCount;
currentWrite = sizeof(PASResFork);
err = FSWrite(outRefNum, &currentWrite, &resInfo);
if (err != noErr) return err;
for (typeCount = 0; ((typeCount < resInfo.NumberOfTypes) && (err == noErr)); typeCount++)
{
PAS_sortIDs(inRefNum, resTypes[typeCount], &ids, &idCount);
err = PAS_flattenResource(resTypes[typeCount], ids, idCount, inRefNum, outRefNum);
DisposePtr((Ptr)ids);
}
DisposePtr((Ptr)resTypes);
UseResFile(oldResFile);
CloseResFile(inRefNum);
return err;
}
OSErr PAS_decodeResource(PASEntry *entry, FSSpec *outFile, short inRefNum)
{
OSErr err = noErr;
short outRefNum;
PASResFork info;
SInt32 infoSize;
short oldResFile;
PASResource pasRes;
SInt32 pasResSize;
long bufSize;
Handle buffer;
long counter=0;
infoSize = sizeof(PASResFork);
err = SetFPos(inRefNum, fsFromStart, (*entry).entryOffset );
if (err != noErr) return err;
err = FSRead( inRefNum, &infoSize, &info);
if (err != noErr) return err;
if(infoSize != sizeof(PASResFork))
{
err = -1;
goto error;
}
oldResFile=CurResFile();
outRefNum = FSpOpenResFile(outFile, fsRdWrPerm);
if (outRefNum < noErr) return outRefNum;
UseResFile(outRefNum);
while (1)
{
pasResSize = sizeof(PASResource);
err = FSRead( inRefNum, &pasResSize, &pasRes);
if (err != noErr)
{
if(err == eofErr)
err = noErr;
break;
}
bufSize = pasRes.length;
buffer = NewHandle(bufSize);
HLock(buffer);
if(buffer == NULL)
{
// if we did not get our memory, try updateresfile
HUnlock(buffer);
UpdateResFile(outRefNum);
counter=0;
buffer = NewHandle(bufSize);
HLock(buffer);
if(buffer == NULL)
{
err = memFullErr;
break;
}
}
err = FSRead( inRefNum, &bufSize, &(**buffer));
if (err != noErr && err != eofErr) break;
AddResource(buffer, pasRes.attrType, pasRes.attrID, pasRes.attrName);
WriteResource(buffer);
SetResAttrs(buffer, pasRes.attr);
ChangedResource(buffer);
WriteResource(buffer);
ReleaseResource(buffer);
if (counter++ > 100)
{
UpdateResFile(outRefNum);
counter=0;
}
}
error:
UseResFile(oldResFile);
CloseResFile(outRefNum);
return err;
}
#pragma mark -
OSErr PAS_encodeMisc(FSSpec *inFile, short outRefNum)
{
OSErr err;
short inRefNum;
PASMiscInfo infoBlock;
FInfo fInfo;
SInt32 currentRead;
err = FSpOpenDF(inFile, fsRdPerm, &inRefNum);
if (err != noErr) return err;
memset(&infoBlock, 0, sizeof(PASMiscInfo));
err = FSpGetFInfo(inFile, &fInfo);
if (err != noErr) return err;
infoBlock.fileType = fInfo.fdType;
infoBlock.fileCreator = fInfo.fdCreator;
infoBlock.fileFlags = fInfo.fdFlags;
FSClose(inRefNum);
inRefNum = FSpOpenResFile(inFile, fsRdPerm);
if (inRefNum > noErr)
{
infoBlock.fileHasResFork = 1;
infoBlock.fileResAttrs = GetResFileAttrs(inRefNum);
FSClose(inRefNum);
}
else
{
infoBlock.fileHasResFork = 0;
infoBlock.fileResAttrs = 0;
}
currentRead = sizeof(PASMiscInfo);
err = FSWrite(outRefNum, &currentRead, &infoBlock);
if (err != noErr) return err;
CloseResFile(inRefNum);
return noErr;
}
OSErr PAS_decodeMisc(PASEntry *entry, FSSpec *outFile, short inRefNum)
{
OSErr err = noErr;
short outRefNum;
PASMiscInfo info;
SInt32 infoSize;
FInfo theFInfo;
infoSize = sizeof(PASMiscInfo);
err = SetFPos(inRefNum, fsFromStart, (*entry).entryOffset );
if (err != noErr) return err;
err = FSRead( inRefNum, &infoSize, &info);
if (err != noErr) return err;
if(infoSize != sizeof(PASMiscInfo))
{
return -1;
}
err = FSpOpenDF(outFile, fsRdWrPerm, &outRefNum);
if (err != noErr) return err;
memset(&theFInfo, 0, sizeof(FInfo));
theFInfo.fdType = info.fileType;
theFInfo.fdCreator = info.fileCreator;
theFInfo.fdFlags = info.fileFlags;
err = FSpSetFInfo(outFile, &theFInfo);
if (err != noErr) return err;
FSClose(outRefNum);
if (info.fileHasResFork)
{
outRefNum = FSpOpenResFile(outFile, fsRdWrPerm);
if (outRefNum < noErr)
{
// maybe it does not have one!
FSpCreateResFile(outFile, info.fileCreator, info.fileType, smSystemScript);
outRefNum = FSpOpenResFile(outFile, fsRdWrPerm);
if (outRefNum < noErr)
{
return outRefNum;
}
}
SetResFileAttrs(outRefNum, info.fileResAttrs);
CloseResFile(outRefNum);
}
if(info.fileType == 'APPL')
{
// we need to add applications to the desktop database.
/* FIX :: need to find DTSetAPPL() function
err = DTSetAPPL( NULL,
outFile->vRefNum,
info.fileCreator,
outFile->parID,
outFile->name);
*/ }
return err;
}
#pragma mark -
OSErr PAS_encodeData(FSSpec *inFile, short outRefNum)
{
OSErr err;
short inRefNum;
Ptr buffer;
SInt32 currentRead = PAS_BUFFER_SIZE;
buffer = NewPtr(currentRead);
err = FSpOpenDF(inFile, fsRdPerm, &inRefNum);
if (err != noErr) return err;
while ( currentRead > 0 )
{
err = FSRead( inRefNum, &currentRead, buffer);
if (err != noErr && err != eofErr) return err;
err = FSWrite(outRefNum, &currentRead, buffer);
if (err != noErr) return err;
}
FSClose(inRefNum);
DisposePtr(buffer);
return noErr;
}
OSErr PAS_decodeData(PASEntry *entry, FSSpec *outFile, short inRefNum)
{
OSErr err;
short outRefNum;
Ptr buffer;
SInt32 currentWrite = PAS_BUFFER_SIZE;
SInt32 totalSize;
buffer = NewPtr(currentWrite);
err = FSpOpenDF(outFile, fsRdWrPerm, &outRefNum);
if (err != noErr) return err;
err = SetFPos(inRefNum, fsFromStart, (*entry).entryOffset );
if (err != noErr) return err;
err = SetFPos(outRefNum, fsFromStart, 0 );
if (err != noErr) return err;
totalSize = (*entry).entryLength;
while(totalSize > 0)
{
currentWrite = PAS_BUFFER_SIZE;
if (totalSize < currentWrite)
{
currentWrite = totalSize;
}
err = FSRead( inRefNum, &currentWrite, buffer);
if (err != noErr && err != eofErr) return err;
err = FSWrite(outRefNum, &currentWrite, buffer);
if (err != noErr) return err;
totalSize = totalSize - currentWrite;
}
FSClose(outRefNum);
DisposePtr(buffer);
return noErr;
}
#pragma mark -
OSErr PAS_encodeHeader(short refnum)
{
PASHeader header;
long sizeOfHeader;
OSErr err;
sizeOfHeader = sizeof(PASHeader);
memset(&header, 0, sizeOfHeader);
header.magicNum = PAS_MAGIC_NUM;
header.versionNum = PAS_VERSION;
header.numEntries = 3;
// Write Out Header
err = FSWrite(refnum, &sizeOfHeader, &header);
return err;
}
OSErr PAS_decodeHeader(short refNum, PASHeader *header)
{
OSErr err;
long sizeOfHeader = sizeof(PASHeader);
memset(header, 0, sizeOfHeader);
err = FSRead(refNum, &sizeOfHeader, header);
return err;
}
#pragma mark -
unsigned long PAS_getDataSize(FSSpec *spec)
{
short refNum;
OSErr err;
Str255 temp;
CInfoPBRec cbrec;
err = FSpOpenDF(spec, fsRdPerm, &refNum);
memcpy( temp, spec->name, spec->name[0] + 1);
cbrec.hFileInfo.ioNamePtr = temp;
cbrec.hFileInfo.ioDirID = spec->parID;
cbrec.hFileInfo.ioVRefNum = spec->vRefNum;
cbrec.hFileInfo.ioFDirIndex = 0;
err = PBGetCatInfoSync(&cbrec);
FSClose(refNum);
if(err != noErr)
{
cbrec.hFileInfo.ioFlLgLen = err;
}
return (cbrec.hFileInfo.ioFlLgLen);
}
short PAS_getResourceID(Handle resource)
{
ResType theType;
Str255 name;
short theID;
memset(&name, 0, sizeof(Str255));
GetResInfo(resource, &theID, &theType, name);
return theID;
}
#pragma mark -
OSErr PAS_flattenResource(ResType type, short *ids, long count, short source, short dest)
{
long idIndex;
Handle resToCopy;
long handleLength;
PASResource pasResource;
long pasResLen;
OSErr err;
for (idIndex=0; idIndex < count; idIndex++)
{
if( (type == 'SIZE') && ( ids[idIndex] == 1 || ids[idIndex] == 0 ) )
{
/*
We do not want to encode/flatten SIZE 0 or 1 because this
is the resource that the user can modify. Most applications
will not be affected if we remove these resources
*/
}
else
{
resToCopy=Get1Resource(type,ids[idIndex]);
if(!resToCopy)
{
return resNotFound;
}
memset(&pasResource, 0, sizeof(PASResource));
GetResInfo( resToCopy,
&pasResource.attrID,
&pasResource.attrType,
pasResource.attrName);
pasResource.attr = GetResAttrs(resToCopy);
DetachResource(resToCopy);
HLock(resToCopy);
pasResource.length = GetHandleSize(resToCopy);
handleLength = pasResource.length;
pasResLen = sizeof(PASResource);
err = FSWrite(dest, &pasResLen, &pasResource);
if(err != noErr)
{
return err;
}
err = FSWrite(dest, &handleLength, &(**resToCopy));
if(err != noErr)
{
return err;
}
HUnlock(resToCopy);
DisposeHandle(resToCopy);
}
}
return noErr;
}
#pragma mark -
void PAS_sortTypes(short sourceRefNum, ResType **resTypePtr, long *count)
{
short oldRef;
short typeIndex;
short numberOfTypes;
*count = -1;
oldRef = CurResFile();
UseResFile(sourceRefNum);
numberOfTypes = Count1Types();
*resTypePtr = (ResType*) NewPtrClear( numberOfTypes * sizeof(OSType) );
for (typeIndex=1; typeIndex <= numberOfTypes; typeIndex++)
{
Get1IndType(&(*resTypePtr)[typeIndex-1], typeIndex);
}
UseResFile(oldRef);
PAS_bubbleSortResType(*resTypePtr, numberOfTypes);
*count = numberOfTypes;
}
void PAS_sortIDs(short sourceRefNum, OSType theType, short **IdPtr, long *count)
{
short oldRef;
Handle theHandle;
short resCount;
short resIndex;
*count = -1;
oldRef = CurResFile();
UseResFile(sourceRefNum);
resCount = Count1Resources(theType);
*IdPtr = (short*) NewPtrClear( resCount * sizeof(short) );
for (resIndex=1; resIndex <= resCount; resIndex++)
{
theHandle = Get1IndResource(theType, resIndex);
if(theHandle == NULL) return;
(*IdPtr)[resIndex-1] = PAS_getResourceID(theHandle);
ReleaseResource(theHandle);
}
UseResFile(oldRef);
PAS_bubbleSortIDS(*IdPtr, resCount);
*count = resCount;
}
#pragma mark -
void
PAS_bubbleSortResType(ResType *types, long count)
{
long x, y;
OSType temp;
for (x=0; x < count-1; x++)
{
for (y=0; y < count-x-1; y++)
{
if (types[y] > types[y+1])
{
temp=types[y];
types[y]=types[y+1];
types[y+1]=temp;
}
}
}
}
void
PAS_bubbleSortIDS(short *ids, long count)
{
long x, y;
short temp;
for (x=0; x < count-1; x++)
{
for (y=0; y < count-x-1; y++)
{
if (ids[y] > ids[y+1])
{
temp=ids[y];
ids[y]=ids[y+1];
ids[y+1]=temp;
}
}
}
}

View File

@@ -0,0 +1,117 @@
/* -*- Mode: C; tab-width: 4; 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 Communicator client code,
* released March 31, 1998.
*
* 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):
* Douglas Turner <dougt@netscape.com>
*/
#ifndef SU_PAS_H
#define SU_PAS_H
#include <Errors.h>
#include <Types.h>
#include <Files.h>
#include <Script.h>
#include <Resources.h>
typedef struct PASHeader /* header portion of Patchable AppleSingle */
{
UInt32 magicNum; /* internal file type tag = 0x00244200*/
UInt32 versionNum; /* format version: 1 = 0x00010000 */
UInt8 filler[16]; /* filler */
UInt16 numEntries; /* number of entries which follow */
} PASHeader ;
typedef struct PASEntry /* one Patchable AppleSingle entry descriptor */
{
UInt32 entryID; /* entry type: see list, 0 invalid */
UInt32 entryOffset; /* offset, in bytes, from beginning */
/* of file to this entry's data */
UInt32 entryLength; /* length of data in octets */
} PASEntry;
typedef struct PASMiscInfo
{
short fileHasResFork;
short fileResAttrs;
OSType fileType;
OSType fileCreator;
UInt32 fileFlags;
} PASMiscInfo;
typedef struct PASResFork
{
short NumberOfTypes;
} PASResFork;
typedef struct PASResource
{
short attr;
short attrID;
OSType attrType;
Str255 attrName;
unsigned long length;
} PASResource;
#if PRAGMA_ALIGN_SUPPORTED
#pragma options align=reset
#endif
#define kCreator 'MOSS'
#define kType 'PASf'
#define PAS_BUFFER_SIZE (1024*512)
#define PAS_MAGIC_NUM (0x00244200)
#define PAS_VERSION (0x00010000)
enum
{
ePas_Data = 1,
ePas_Misc,
ePas_Resource
};
#ifdef __cplusplus
extern "C" {
#endif
/* Prototypes */
OSErr PAS_EncodeFile(FSSpec *inSpec, FSSpec *outSpec);
OSErr PAS_DecodeFile(FSSpec *inSpec, FSSpec *outSpec);
#ifdef __cplusplus
}
#endif
#endif /* SU_PAS_H */

View File

@@ -0,0 +1,481 @@
/* -*- Mode: C; tab-width: 4; 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 Communicator client code,
* released March 31, 1998.
*
* 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):
* Daniel Veditz <dveditz@netscape.com>
* Douglas Turner <dougt@netscape.com>
*/
#include "nscore.h"
#include "nsFileSpec.h"
#include "nsFileStream.h"
#include "nsInstall.h" // for error codes
#include "prmem.h"
#include "ScheduledTasks.h"
static nsresult
GetPersistentStringFromSpec(const nsFileSpec& inSpec, char **string)
{
if (!string) return NS_ERROR_NULL_POINTER;
nsCOMPtr<nsIFileSpec> spec;
#ifdef XP_MAC
nsFileSpec interim = inSpec.GetFSSpec(); /* XXX get rid of mError in nsFileSpec */
nsresult rv = NS_NewFileSpecWithSpec(interim, getter_AddRefs(spec));
#else
nsresult rv = NS_NewFileSpecWithSpec(inSpec, getter_AddRefs(spec));
#endif
if (NS_SUCCEEDED(rv)) {
rv = spec->GetPersistentDescriptorString(string);
}
else {
*string = nsnull;
}
return rv;
}
#ifdef _WINDOWS
#include <sys/stat.h>
#include <windows.h>
PRInt32 ReplaceExistingWindowsFile(const nsFileSpec& currentSpec, const nsFileSpec& finalSpec)
{
// this routine is now for DOS-based windows only. WinNT should
// be taken care of by the XP code
//
// NOTE for WINNT:
//
// the MOVEFILE_DELAY_UNTIL_REBOOT option doesn't work on
// NT 3.51 SP4 or on NT 4.0 until SP2. On the broken versions
// of NT 4.0 Microsoft warns using it can lead to an irreparably
// corrupt windows' registry "after an unknown number of calls".
// Time to reinstall windows when that happens.
//
// I don't want to risk it, I also don't want two separate code
// paths to test, so we do it the lame way on all NT systems
// until such time as there are few enough old revs around to
// make it worth switching back to MoveFileEx().
PRInt32 err = -1;
/* Get OS version info */
DWORD dwVersion = GetVersion();
/* Get build numbers for Windows NT or Win32s */
if (dwVersion > 0x80000000)
{
// Windows 95 or Win16
// Place an entry in the WININIT.INI file in the Windows directory
// to delete finalName and rename currentName to be finalName at reboot
int strlen;
char Src[_MAX_PATH]; // 8.3 name
char Dest[_MAX_PATH]; // 8.3 name
char* final = strdup(finalSpec.GetNativePathCString());
char* current = strdup(currentSpec.GetNativePathCString());
strlen = GetShortPathName( (LPCTSTR)current, (LPTSTR)Src, (DWORD)sizeof(Src) );
if ( strlen > 0 )
{
free(current);
current = strdup(Src);
}
strlen = GetShortPathName( (LPCTSTR) final, (LPTSTR) Dest, (DWORD) sizeof(Dest));
if ( strlen > 0 )
{
free(final);
final = strdup(Dest);
}
/* NOTE: use OEM filenames! Even though it looks like a Windows
* .INI file, WININIT.INI is processed under DOS
*/
AnsiToOem( final, final );
AnsiToOem( current, current );
if ( WritePrivateProfileString( "Rename", final, current, "WININIT.INI" ) )
err = 0;
free(final);
free(current);
}
return err;
}
#endif
PRInt32 DeleteFileNowOrSchedule(const nsFileSpec& filename)
{
PRInt32 result = nsInstall::SUCCESS;
filename.Delete(PR_FALSE);
if (filename.Exists())
{
// could not delete, schedule it for later
RKEY newkey;
HREG reg;
REGERR err;
result = nsInstall::UNEXPECTED_ERROR;
err = NR_RegOpen("", &reg) ;
if ( err == REGERR_OK )
{
err = NR_RegAddKey(reg,ROOTKEY_PRIVATE,REG_DELETE_LIST_KEY,&newkey);
if ( err == REGERR_OK )
{
char valname[20];
char* fnamestr = nsnull;
err = NR_RegGetUniqueName( reg, valname, sizeof(valname) );
if ( err == REGERR_OK )
{
nsresult rv;
rv = GetPersistentStringFromSpec( filename, &fnamestr );
if ( NS_SUCCEEDED(rv) && fnamestr )
{
err = NR_RegSetEntry( reg, newkey, valname,
REGTYPE_ENTRY_BYTES,
(void*)fnamestr,
strlen(fnamestr)+1);
if ( err == REGERR_OK )
result = nsInstall::REBOOT_NEEDED;
}
}
}
NR_RegClose(reg);
}
}
return result;
}
PRInt32 ReplaceFileNow(nsFileSpec& replacementFile, nsFileSpec& doomedFile )
{
// replacement file must exist, doomed file doesn't have to
if ( !replacementFile.Exists() )
return nsInstall::DOES_NOT_EXIST;
// don't have to do anything if the files are the same
if ( replacementFile == doomedFile )
return nsInstall::SUCCESS;
PRInt32 result = nsInstall::ACCESS_DENIED;
// first try to rename the doomed file out of the way (if it exists)
char* leafname;
nsFileSpec tmpFile( doomedFile );
if ( tmpFile.Exists() )
{
tmpFile.MakeUnique();
leafname = tmpFile.GetLeafName();
tmpFile = doomedFile;
tmpFile.Rename( leafname );
nsCRT::free( leafname );
}
// if doomedFile is gone move new file into place
nsresult rv;
if ( !doomedFile.Exists() )
{
nsFileSpec parentofFinalFile;
nsFileSpec parentofReplacementFile;
doomedFile.GetParent(parentofFinalFile);
replacementFile.GetParent(parentofReplacementFile);
// XXX looks dangerous, the replacement file name may NOT be unique in the
// target directory if we have to move it! Either we should never move the
// files like this (i.e. error if not in the same dir) or we need to take
// a little more care in the move.
if(parentofReplacementFile != parentofFinalFile)
{
NS_WARN_IF_FALSE( 0, "File unpacked into a non-dest dir" );
rv = replacementFile.MoveToDir(parentofFinalFile);
}
else
rv = NS_OK;
leafname = doomedFile.GetLeafName();
if ( NS_SUCCEEDED(rv) )
rv = replacementFile.Rename( leafname );
if ( NS_SUCCEEDED(rv) )
{
// we replaced the old file OK, now we have to
// get rid of it permanently
result = DeleteFileNowOrSchedule( tmpFile );
}
else
{
// couldn't rename file, try to put old file back
tmpFile.Rename( leafname );
}
nsCRT::free( leafname );
}
return result;
}
PRInt32 ReplaceFileNowOrSchedule(nsFileSpec& replacementFile, nsFileSpec& doomedFile )
{
PRInt32 result = ReplaceFileNow( replacementFile, doomedFile );
if ( result == nsInstall::ACCESS_DENIED )
{
// if we couldn't replace the file schedule it for later
#ifdef _WINDOWS
if ( ReplaceExistingWindowsFile(replacementFile, doomedFile) == 0 )
return nsInstall::REBOOT_NEEDED;
#endif
RKEY listkey;
RKEY filekey;
HREG reg;
REGERR err;
if ( REGERR_OK == NR_RegOpen("", &reg) )
{
err = NR_RegAddKey( reg, ROOTKEY_PRIVATE, REG_REPLACE_LIST_KEY, &listkey );
if ( err == REGERR_OK )
{
char valname[20];
char* fsrc = nsnull;
char* fdest = nsnull;
REGERR err2;
nsresult rv, rv2;
err = NR_RegGetUniqueName( reg, valname, sizeof(valname) );
if ( err == REGERR_OK )
{
err = NR_RegAddKey( reg, listkey, valname, &filekey );
if ( REGERR_OK == err )
{
rv = GetPersistentStringFromSpec(replacementFile, &fsrc);
rv2 = GetPersistentStringFromSpec(doomedFile, &fdest);
if ( NS_SUCCEEDED(rv) && NS_SUCCEEDED(rv2) )
{
err = NR_RegSetEntry( reg, filekey,
REG_REPLACE_SRCFILE,
REGTYPE_ENTRY_BYTES,
(void*)fsrc,
strlen(fsrc));
err2 = NR_RegSetEntry(reg, filekey,
REG_REPLACE_DESTFILE,
REGTYPE_ENTRY_BYTES,
(void*)fdest,
strlen(fdest));
if ( err == REGERR_OK && err2 == REGERR_OK )
result = nsInstall::REBOOT_NEEDED;
else
NR_RegDeleteKey( reg, listkey, valname );
}
if (NS_SUCCEEDED(rv))
nsCRT::free(fsrc);
if (NS_SUCCEEDED(rv2))
nsCRT::free(fdest);
}
}
}
NR_RegClose(reg);
}
}
return result;
}
//-----------------------------------------------------------------------------
//
// STARTUP: DO SCHEDULED ACTIONS
//
//-----------------------------------------------------------------------------
void DeleteScheduledFiles(HREG);
void ReplaceScheduledFiles(HREG);
void PerformScheduledTasks(HREG reg)
{
DeleteScheduledFiles( reg );
ReplaceScheduledFiles( reg );
}
void DeleteScheduledFiles( HREG reg )
{
REGERR err;
RKEY key;
REGENUM state = 0;
/* perform scheduled file deletions */
if (REGERR_OK == NR_RegGetKey(reg,ROOTKEY_PRIVATE,REG_DELETE_LIST_KEY,&key))
{
// the delete key exists, so we loop through its children
// and try to delete all the listed files
char namebuf[MAXREGNAMELEN];
char valbuf[MAXREGPATHLEN];
nsFileSpec doomedFile;
nsCOMPtr<nsIFileSpec> spec;
nsresult rv = NS_NewFileSpec(getter_AddRefs(spec));
if (NS_SUCCEEDED(rv))
{
while (REGERR_OK == NR_RegEnumEntries( reg, key, &state, namebuf,
sizeof(namebuf), 0 ) )
{
uint32 bufsize = sizeof(valbuf); // gets changed, must reset
err = NR_RegGetEntry( reg, key, namebuf, valbuf, &bufsize );
if ( err == REGERR_OK )
{
// no need to check return value of
// SetPersistentDescriptorString, it's always NS_OK
spec->SetPersistentDescriptorString(valbuf);
rv = spec->GetFileSpec(&doomedFile);
if (NS_SUCCEEDED(rv))
{
doomedFile.Delete(PR_FALSE);
if ( !doomedFile.Exists() )
{
// deletion successful, don't have to retry
NR_RegDeleteEntry( reg, key, namebuf );
}
}
}
}
/* delete list node if empty */
state = 0;
err = NR_RegEnumEntries(reg, key, &state, namebuf, sizeof(namebuf), 0);
if ( err == REGERR_NOMORE )
{
NR_RegDeleteKey(reg, ROOTKEY_PRIVATE, REG_DELETE_LIST_KEY);
}
}
}
}
void ReplaceScheduledFiles( HREG reg )
{
RKEY key;
/* replace files if any listed */
if (REGERR_OK == NR_RegGetKey(reg,ROOTKEY_PRIVATE,REG_REPLACE_LIST_KEY,&key))
{
char keyname[MAXREGNAMELEN];
char doomedFile[MAXREGPATHLEN];
char srcFile[MAXREGPATHLEN];
nsFileSpec doomedSpec;
nsFileSpec srcSpec;
nsCOMPtr<nsIFileSpec> src;
nsCOMPtr<nsIFileSpec> dest;
nsresult rv1, rv2;
rv1 = NS_NewFileSpec(getter_AddRefs(src));
rv2 = NS_NewFileSpec(getter_AddRefs(dest));
if (NS_SUCCEEDED(rv1) && NS_SUCCEEDED(rv2))
{
uint32 bufsize;
REGENUM state = 0;
while (REGERR_OK == NR_RegEnumSubkeys( reg, key, &state,
keyname, sizeof(keyname), REGENUM_CHILDREN))
{
bufsize = sizeof(srcFile);
REGERR err1 = NR_RegGetEntry( reg, (RKEY)state,
REG_REPLACE_SRCFILE, srcFile, &bufsize);
bufsize = sizeof(doomedFile);
REGERR err2 = NR_RegGetEntry( reg, (RKEY)state,
REG_REPLACE_DESTFILE, doomedFile, &bufsize);
if ( err1 == REGERR_OK && err2 == REGERR_OK )
{
src->SetPersistentDescriptorString(srcFile);
rv1 = src->GetFileSpec(&srcSpec);
dest->SetPersistentDescriptorString(doomedFile);
rv2 = dest->GetFileSpec(&doomedSpec);
if (NS_SUCCEEDED(rv1) && NS_SUCCEEDED(rv2))
{
// finally now try to do the replace
PRInt32 result = ReplaceFileNow( srcSpec, doomedSpec );
if ( result == nsInstall::DOES_NOT_EXIST ||
result == nsInstall::SUCCESS )
{
// This one is done
NR_RegDeleteKey( reg, key, keyname );
}
}
}
}
/* delete list node if empty */
state = 0;
if (REGERR_NOMORE == NR_RegEnumSubkeys( reg, key, &state, keyname,
sizeof(keyname), REGENUM_CHILDREN ))
{
NR_RegDeleteKey(reg, ROOTKEY_PRIVATE, REG_REPLACE_LIST_KEY);
}
}
}
}

View File

@@ -0,0 +1,44 @@
/* -*- Mode: C; tab-width: 4; 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 Communicator client code,
* released March 31, 1998.
*
* 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):
* Daniel Veditz <dveditz@netscape.com>
* Douglas Turner <dougt@netscape.com>
*/
#ifndef __SCHEDULEDTASKS_H__
#define __SCHEDULEDTASKS_H__
#include "NSReg.h"
//#include "mozreg.h"
#include "nsFileSpec.h"
PR_BEGIN_EXTERN_C
PRInt32 DeleteFileNowOrSchedule(const nsFileSpec& filename);
PRInt32 ReplaceFileNowOrSchedule(nsFileSpec& tmpfile, nsFileSpec& target );
void PerformScheduledTasks(HREG reg);
PR_END_EXTERN_C
#endif

View File

@@ -0,0 +1,139 @@
/* -*- Mode: C; tab-width: 4; 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):
*/
/*--------------------------------------------------------------
* GDIFF.H
*
* Constants used in processing the GDIFF format
*--------------------------------------------------------------*/
#include "prio.h"
#include "nsFileSpec.h"
#define GDIFF_MAGIC "\xD1\xFF\xD1\xFF"
#define GDIFF_MAGIC_LEN 4
#define GDIFF_VER 5
#define GDIFF_EOF "\0"
#define GDIFF_VER_POS 4
#define GDIFF_CS_POS 5
#define GDIFF_CSLEN_POS 6
#define GDIFF_HEADERSIZE 7
#define GDIFF_APPDATALEN 4
#define GDIFF_CS_NONE 0
#define GDIFF_CS_MD5 1
#define GDIFF_CS_SHA 2
#define GDIFF_CS_CRC32 32
#define CRC32_LEN 4
/*--------------------------------------
* GDIFF opcodes
*------------------------------------*/
#define ENDDIFF 0
#define ADD8MAX 246
#define ADD16 247
#define ADD32 248
#define COPY16BYTE 249
#define COPY16SHORT 250
#define COPY16LONG 251
#define COPY32BYTE 252
#define COPY32SHORT 253
#define COPY32LONG 254
#define COPY64 255
/* instruction sizes */
#define ADD16SIZE 2
#define ADD32SIZE 4
#define COPY16BYTESIZE 3
#define COPY16SHORTSIZE 4
#define COPY16LONGSIZE 6
#define COPY32BYTESIZE 5
#define COPY32SHORTSIZE 6
#define COPY32LONGSIZE 8
#define COPY64SIZE 12
/*--------------------------------------
* error codes
*------------------------------------*/
#define GDIFF_OK 0
#define GDIFF_ERR_UNKNOWN -1
#define GDIFF_ERR_ARGS -2
#define GDIFF_ERR_ACCESS -3
#define GDIFF_ERR_MEM -4
#define GDIFF_ERR_HEADER -5
#define GDIFF_ERR_BADDIFF -6
#define GDIFF_ERR_OPCODE -7
#define GDIFF_ERR_OLDFILE -8
#define GDIFF_ERR_CHKSUMTYPE -9
#define GDIFF_ERR_CHECKSUM -10
#define GDIFF_ERR_CHECKSUM_TARGET -11
#define GDIFF_ERR_CHECKSUM_RESULT -12
/*--------------------------------------
* types
*------------------------------------*/
#ifndef AIX
#ifdef OSF1
#include <sys/types.h>
#else
typedef unsigned char uchar;
#endif
#endif
typedef struct _diffdata {
PRFileDesc* fSrc;
PRFileDesc* fOut;
PRFileDesc* fDiff;
uint8 checksumType;
uint8 checksumLength;
uchar* oldChecksum;
uchar* newChecksum;
PRBool bMacAppleSingle;
PRBool bWin32BoundImage;
uchar* databuf;
uint32 bufsize;
} DIFFDATA;
typedef DIFFDATA* pDIFFDATA;
/*--------------------------------------
* miscellaneous
*------------------------------------*/
#define APPFLAG_W32BOUND "autoinstall:Win32PE"
#define APPFLAG_APPLESINGLE "autoinstall:AppleSingle"
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif

View File

@@ -0,0 +1,106 @@
#!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 Communicator client code,
# released March 31, 1998.
#
# 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):
# Daniel Veditz <dveditz@netscape.com>
# Douglas Turner <dougt@netscape.com>
DEPTH=..\..
include <$(DEPTH)/config/config.mak>
MAKE_OBJ_TYPE = DLL
MODULE=xpinstal
XPIDL_MODULE=xpinstall
DLL=.\$(OBJDIR)\$(MODULE).dll
DEFINES=-D_IMPL_NS_DOM -DWIN32_LEAN_AND_MEAN
LCFLAGS = \
$(LCFLAGS) \
$(DEFINES) \
$(NULL)
LLIBS = \
$(DIST)\lib\xpcom.lib \
$(DIST)\lib\js3250.lib \
$(DIST)\lib\jsdombase_s.lib \
$(DIST)\lib\jsdomevents_s.lib \
$(DIST)\lib\zlib.lib \
$(DIST)\lib\strres.lib \
$(LIBNSPR) \
$(DIST)\lib\mozreg.lib \
$(NULL)
OBJS = \
.\$(OBJDIR)\nsInstall.obj \
.\$(OBJDIR)\nsInstallTrigger.obj \
.\$(OBJDIR)\nsInstallVersion.obj \
.\$(OBJDIR)\nsInstallFolder.obj \
.\$(OBJDIR)\nsJSInstall.obj \
.\$(OBJDIR)\nsJSFile.obj \
.\$(OBJDIR)\nsJSInstallTriggerGlobal.obj \
.\$(OBJDIR)\nsJSInstallVersion.obj \
.\$(OBJDIR)\nsSoftwareUpdate.obj \
.\$(OBJDIR)\nsSoftwareUpdateRun.obj \
.\$(OBJDIR)\nsInstallFile.obj \
.\$(OBJDIR)\nsInstallDelete.obj \
.\$(OBJDIR)\nsInstallExecute.obj \
.\$(OBJDIR)\nsInstallPatch.obj \
.\$(OBJDIR)\nsInstallUninstall.obj \
.\$(OBJDIR)\nsInstallResources.obj \
.\$(OBJDIR)\nsTopProgressNotifier.obj \
.\$(OBJDIR)\nsLoggingProgressNotifier.obj\
.\$(OBJDIR)\ScheduledTasks.obj \
.\$(OBJDIR)\nsWinReg.obj \
.\$(OBJDIR)\nsJSWinReg.obj \
.\$(OBJDIR)\nsWinRegItem.obj \
.\$(OBJDIR)\nsWinRegValue.obj \
.\$(OBJDIR)\nsWinProfile.obj \
.\$(OBJDIR)\nsJSWinProfile.obj \
.\$(OBJDIR)\nsWinProfileItem.obj \
.\$(OBJDIR)\nsInstallProgressDialog.obj \
.\$(OBJDIR)\nsXPITriggerInfo.obj \
.\$(OBJDIR)\nsXPInstallManager.obj \
.\$(OBJDIR)\nsInstallFileOpItem.obj \
.\$(OBJDIR)\nsWinShortcut.obj \
.\$(OBJDIR)\nsJSFileSpecObj.obj \
# .\$(OBJDIR)\nsUpdateNotification.obj \
$(NULL)
WIN_LIBS= \
ole32.lib \
$(NULL)
include <$(DEPTH)\config\rules.mak>
install:: $(DLL)
$(MAKE_INSTALL) .\$(OBJDIR)\$(MODULE).lib $(DIST)\lib
$(MAKE_INSTALL) .\$(OBJDIR)\$(MODULE).dll $(DIST)\bin\components
clobber::
$(RM) $(DIST)\lib\$(MODULE).lib
$(RM) $(DIST)\bin\components\$(MODULE).dll

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