You've already forked postfixadmin
mirror of
https://github.com/postfixadmin/postfixadmin.git
synced 2025-08-07 17:42:53 +03:00
- big merge of Postfixadmin smarty into trunk
git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/trunk@757 a1433add-5e2c-0410-b055-b7f2511e0802
This commit is contained in:
@@ -10,8 +10,8 @@
|
||||
# Last update:
|
||||
# $Id$
|
||||
|
||||
Version 2.3 - 2009/10/24 - SVN r739
|
||||
-----------------------------------
|
||||
Version ***svn*** - 2009/10/24 - SVN r*****
|
||||
--------------------------------------
|
||||
|
||||
- automatically create quota tables for dovecot (both 1.0/1.1 and >= 1.2)
|
||||
- list-virtual can now handle both table formats
|
||||
|
@@ -9,7 +9,7 @@ REQUIRED!!
|
||||
----------
|
||||
- You are using Postfix 2.0 or higher.
|
||||
- You are using Apache 1.3.27 / Lighttpd 1.3.15 or higher.
|
||||
- You are using PHP 5.1.2 or higher.
|
||||
- You are using PHP 5.X
|
||||
- You are using MySQL 3.23 or higher (5.x recommended) OR PostgreSQL 7.4 (or higher)
|
||||
|
||||
|
||||
|
@@ -56,13 +56,16 @@
|
||||
# Use Log4Perl
|
||||
# Added better testing (and -t option)
|
||||
#
|
||||
# 2009-06-29 Stevan Bajic <stevan@bajic.ch>
|
||||
# 2009-06-29 Stevan Bajic <stevan at bajic.ch>
|
||||
# Add Mail::Sender for SMTP auth + more flexibility
|
||||
#
|
||||
# 2009-07-07 Stevan Bajic <stevan@bajic.ch>
|
||||
# 2009-07-07 Stevan Bajic <stevan at bajic.ch>
|
||||
# Add better alias lookups
|
||||
# Check for more heades from Anti-Virus/Anti-Spam solutions
|
||||
#
|
||||
# 2009-08-10 Sebastian <reg9009 at yahoo dot de>
|
||||
# Adjust SQL query for vacation timeframe. It is now possible to set from/until date for vacation message.
|
||||
#
|
||||
# Requirements - the following perl modules are required:
|
||||
# DBD::Pg or DBD::mysql
|
||||
# Mail::Sender, Email::Valid MIME::Charset, Log::Log4perl, Log::Dispatch, MIME::EncWords and GetOpt::Std
|
||||
@@ -316,24 +319,25 @@ sub find_real_address {
|
||||
exit(1);
|
||||
}
|
||||
my $realemail = '';
|
||||
my $query = qq{SELECT email FROM vacation WHERE email=? AND active=$db_true};
|
||||
my $query = qq{SELECT email FROM vacation WHERE email=? and active=$db_true and activefrom <= NOW() and activeuntil >= NOW()};
|
||||
my $stm = $dbh->prepare($query) or panic_prepare($query);
|
||||
$stm->execute($email) or panic_execute($query,"email='$email'");
|
||||
my $rv = $stm->rows;
|
||||
|
||||
# Recipient has vacation
|
||||
if ($rv == 1) {
|
||||
$realemail = $email;
|
||||
$logger->debug("Found '\$email'\ has vacation active");
|
||||
} else {
|
||||
my $vemail = $email;
|
||||
$vemail =~ s/\@/#/g;
|
||||
$vemail = $vemail . "\@" . $vacation_domain;
|
||||
$logger->debug("Looking for alias records that \'$email\' resolves to with vacation turned on");
|
||||
$query = qq{SELECT goto FROM alias WHERE address=? AND (goto LIKE ? OR goto LIKE ? OR goto LIKE ? OR goto = ?)};
|
||||
$stm = $dbh->prepare($query) or panic_prepare($query);
|
||||
$stm->execute($email,"$vemail,%","%,$vemail","%,$vemail,%", "$vemail") or panic_execute($query,"address='$email'");
|
||||
$rv = $stm->rows;
|
||||
if ($rv == 1) {
|
||||
$realemail = $email;
|
||||
$logger->debug("Found '\$email'\ has vacation active");
|
||||
} else {
|
||||
my $vemail = $email;
|
||||
$vemail =~ s/\@/#/g;
|
||||
$vemail = $vemail . "\@" . $vacation_domain;
|
||||
$logger->debug("Looking for alias records that \'$email\' resolves to with vacation turned on");
|
||||
$query = qq{SELECT goto FROM alias WHERE address=? AND (goto LIKE ? OR goto LIKE ? OR goto LIKE ? OR goto = ?)};
|
||||
$stm = $dbh->prepare($query) or panic_prepare($query);
|
||||
$stm->execute($email,"$vemail,%","%,$vemail","%,$vemail,%", "$vemail") or panic_execute($query,"address='$email'");
|
||||
$rv = $stm->rows;
|
||||
|
||||
|
||||
# Recipient is an alias, check if mailbox has vacation
|
||||
if ($rv == 1) {
|
||||
|
18
backup.php
18
backup.php
@@ -30,7 +30,11 @@ authentication_require_role('global-admin');
|
||||
// TODO: make backup supported for postgres
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
print '<p>Sorry: Backup is currently not supported for your DBMS.</p>';
|
||||
$smarty->assign ('tMessage', '<p>Sorry: Backup is currently not supported for your DBMS ('.$CONF['database_type'].').</p>');
|
||||
$smarty->assign ('smarty_template', 'message');
|
||||
$smarty->display ('index.tpl');
|
||||
// print '<p>Sorry: Backup is currently not supported for your DBMS.</p>';
|
||||
die;
|
||||
}
|
||||
/*
|
||||
SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,adsrc
|
||||
@@ -63,10 +67,10 @@ if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
if (!$fh = fopen ($backup, 'w'))
|
||||
{
|
||||
$tMessage = "<div class=\"error_msg\">Cannot open file ($backup)</div>";
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/message.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'message');
|
||||
$smarty->display ('index.tpl');
|
||||
// include ("templates/message.php");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -82,8 +86,8 @@ if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
'fetchmail',
|
||||
'log',
|
||||
'mailbox',
|
||||
'quota',
|
||||
'quota2',
|
||||
'quota',
|
||||
'quota2',
|
||||
'vacation',
|
||||
'vacation_notification'
|
||||
);
|
||||
|
@@ -31,69 +31,70 @@ require_once('common.php');
|
||||
authentication_require_role('global-admin');
|
||||
|
||||
if ($CONF['sendmail'] != 'YES') {
|
||||
header("Location: " . $CONF['postfix_admin_url'] . "/main.php");
|
||||
exit;
|
||||
header("Location: " . $CONF['postfix_admin_url'] . "/main.php");
|
||||
exit;
|
||||
}
|
||||
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
if (empty($_POST['subject']) || empty($_POST['message']) || empty($_POST['name']))
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$table_mailbox = table_by_key('mailbox');
|
||||
$table_alias = table_by_key('alias');
|
||||
if (empty($_POST['subject']) || empty($_POST['message']) || empty($_POST['name']))
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$table_mailbox = table_by_key('mailbox');
|
||||
$table_alias = table_by_key('alias');
|
||||
|
||||
$q = "select username from $table_mailbox union select goto from $table_alias " .
|
||||
"where goto not in (select username from $table_mailbox)";
|
||||
|
||||
$q = "select username from $table_mailbox union select goto from $table_alias " .
|
||||
"where goto not in (select username from $table_mailbox)";
|
||||
$result = db_query ($q);
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
mb_internal_encoding("UTF-8");
|
||||
$b_name = mb_encode_mimeheader( $_POST['name'], 'UTF-8', 'Q');
|
||||
$b_subject = mb_encode_mimeheader( $_POST['subject'], 'UTF-8', 'Q');
|
||||
$b_message = base64_encode($_POST['message']);
|
||||
|
||||
$result = db_query ($q);
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
mb_internal_encoding("UTF-8");
|
||||
$b_name = mb_encode_mimeheader( $_POST['name'], 'UTF-8', 'Q');
|
||||
$b_subject = mb_encode_mimeheader( $_POST['subject'], 'UTF-8', 'Q');
|
||||
$b_message = base64_encode($_POST['message']);
|
||||
$i = 0;
|
||||
while ($row = db_array ($result['result'])) {
|
||||
$fTo = $row[0];
|
||||
$fHeaders = 'To: ' . $fTo . "\n";
|
||||
$fHeaders .= 'From: ' . $b_name . ' <' . $CONF['admin_email'] . ">\n";
|
||||
$fHeaders .= 'Subject: ' . $b_subject . "\n";
|
||||
$fHeaders .= 'MIME-Version: 1.0' . "\n";
|
||||
$fHeaders .= 'Content-Type: text/plain; charset=UTF-8' . "\n";
|
||||
$fHeaders .= 'Content-Transfer-Encoding: base64' . "\n";
|
||||
|
||||
$i = 0;
|
||||
while ($row = db_array ($result['result'])) {
|
||||
$fTo = $row[0];
|
||||
$fHeaders = 'To: ' . $fTo . "\n";
|
||||
$fHeaders .= 'From: ' . $b_name . ' <' . $CONF['admin_email'] . ">\n";
|
||||
$fHeaders .= 'Subject: ' . $b_subject . "\n";
|
||||
$fHeaders .= 'MIME-Version: 1.0' . "\n";
|
||||
$fHeaders .= 'Content-Type: text/plain; charset=UTF-8' . "\n";
|
||||
$fHeaders .= 'Content-Transfer-Encoding: base64' . "\n";
|
||||
$fHeaders .= $b_message;
|
||||
|
||||
$fHeaders .= $b_message;
|
||||
|
||||
if (!smtp_mail ($fTo, $CONF['admin_email'], $fHeaders))
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
|
||||
}
|
||||
else
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
|
||||
}
|
||||
if (!smtp_mail ($fTo, $CONF['admin_email'], $fHeaders))
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
|
||||
}
|
||||
}
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
echo '<p>'.$PALANG['pBroadcast_success'].'</p>';
|
||||
include ("templates/footer.php");
|
||||
}
|
||||
else
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
|
||||
}
|
||||
}
|
||||
}
|
||||
$smarty->assign ('tMessage', $PALANG['pBroadcast_success']);
|
||||
$smarty->assign ('smarty_template', 'message');
|
||||
$smarty->display ('index.tpl');
|
||||
// echo '<p>'.$PALANG['pBroadcast_success'].'</p>';
|
||||
}
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET" || $error == 1)
|
||||
{
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/broadcast-message.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('error', $error);
|
||||
$smarty->assign ('smarty_template', 'broadcast-message');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
// include ("templates/broadcast-message.php");
|
||||
}
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
|
336
calendar.js
Normal file
336
calendar.js
Normal file
@@ -0,0 +1,336 @@
|
||||
// Tigra Calendar v4.0.2 (12-01-2009) European (dd.mm.yyyy)
|
||||
// http://www.softcomplex.com/products/tigra_calendar/
|
||||
// Public Domain Software... You're welcome.
|
||||
|
||||
// default settins
|
||||
var A_TCALDEF = {
|
||||
'months' : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
||||
'weekdays' : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
|
||||
'yearscroll': true, // show year scroller
|
||||
'weekstart': 1, // first day of week: 0-Su or 1-Mo
|
||||
'centyear' : 70, // 2 digit years less than 'centyear' are in 20xx, othewise in 19xx.
|
||||
'imgpath' : 'images/calendar/' // directory with calendar images
|
||||
}
|
||||
// date parsing function
|
||||
function f_tcalParseDate (s_date) {
|
||||
|
||||
var re_date = /^\s*(\d{1,2})\.(\d{1,2})\.(\d{2,4})\s*$/;
|
||||
if (!re_date.exec(s_date))
|
||||
return alert ("Invalid date: '" + s_date + "'.\nAccepted format is dd.mm.yyyy.")
|
||||
var n_day = Number(RegExp.$1),
|
||||
n_month = Number(RegExp.$2),
|
||||
n_year = Number(RegExp.$3);
|
||||
|
||||
if (n_year < 100)
|
||||
n_year += (n_year < this.a_tpl.centyear ? 2000 : 1900);
|
||||
if (n_month < 1 || n_month > 12)
|
||||
return alert ("Invalid month value: '" + n_month + "'.\nAllowed range is 01-12.");
|
||||
var d_numdays = new Date(n_year, n_month, 0);
|
||||
if (n_day > d_numdays.getDate())
|
||||
return alert("Invalid day of month value: '" + n_day + "'.\nAllowed range for selected month is 01 - " + d_numdays.getDate() + ".");
|
||||
|
||||
return new Date (n_year, n_month - 1, n_day);
|
||||
}
|
||||
// date generating function
|
||||
function f_tcalGenerDate (d_date) {
|
||||
return (
|
||||
(d_date.getDate() < 10 ? '0' : '') + d_date.getDate() + "."
|
||||
+ (d_date.getMonth() < 9 ? '0' : '') + (d_date.getMonth() + 1) + "."
|
||||
+ d_date.getFullYear()
|
||||
);
|
||||
}
|
||||
|
||||
// implementation
|
||||
function tcal (a_cfg, a_tpl) {
|
||||
|
||||
// apply default template if not specified
|
||||
if (!a_tpl)
|
||||
a_tpl = A_TCALDEF;
|
||||
|
||||
// register in global collections
|
||||
if (!window.A_TCALS)
|
||||
window.A_TCALS = [];
|
||||
if (!window.A_TCALSIDX)
|
||||
window.A_TCALSIDX = [];
|
||||
|
||||
this.s_id = a_cfg.id ? a_cfg.id : A_TCALS.length;
|
||||
window.A_TCALS[this.s_id] = this;
|
||||
window.A_TCALSIDX[window.A_TCALSIDX.length] = this;
|
||||
|
||||
// assign methods
|
||||
this.f_show = f_tcalShow;
|
||||
this.f_hide = f_tcalHide;
|
||||
this.f_toggle = f_tcalToggle;
|
||||
this.f_update = f_tcalUpdate;
|
||||
this.f_relDate = f_tcalRelDate;
|
||||
this.f_parseDate = f_tcalParseDate;
|
||||
this.f_generDate = f_tcalGenerDate;
|
||||
|
||||
// create calendar icon
|
||||
this.s_iconId = 'tcalico_' + this.s_id;
|
||||
this.e_icon = f_getElement(this.s_iconId);
|
||||
if (!this.e_icon) {
|
||||
document.write('<img src="' + a_tpl.imgpath + 'cal.gif" id="' + this.s_iconId + '" onclick="A_TCALS[\'' + this.s_id + '\'].f_toggle()" class="tcalIcon" alt="Open Calendar" />');
|
||||
this.e_icon = f_getElement(this.s_iconId);
|
||||
}
|
||||
// save received parameters
|
||||
this.a_cfg = a_cfg;
|
||||
this.a_tpl = a_tpl;
|
||||
}
|
||||
|
||||
function f_tcalShow (d_date) {
|
||||
|
||||
// find input field
|
||||
if (!this.a_cfg.controlname)
|
||||
throw("TC: control name is not specified");
|
||||
if (this.a_cfg.formname) {
|
||||
var e_form = document.forms[this.a_cfg.formname];
|
||||
if (!e_form)
|
||||
throw("TC: form '" + this.a_cfg.formname + "' can not be found");
|
||||
this.e_input = e_form.elements[this.a_cfg.controlname];
|
||||
}
|
||||
else
|
||||
this.e_input = f_getElement(this.a_cfg.controlname);
|
||||
|
||||
if (!this.e_input || !this.e_input.tagName || this.e_input.tagName != 'INPUT')
|
||||
throw("TC: element '" + this.a_cfg.controlname + "' does not exist in "
|
||||
+ (this.a_cfg.formname ? "form '" + this.a_cfg.controlname + "'" : 'this document'));
|
||||
|
||||
// dynamically create HTML elements if needed
|
||||
this.e_div = f_getElement('tcal');
|
||||
if (!this.e_div) {
|
||||
this.e_div = document.createElement("DIV");
|
||||
this.e_div.id = 'tcal';
|
||||
document.body.appendChild(this.e_div);
|
||||
}
|
||||
this.e_shade = f_getElement('tcalShade');
|
||||
if (!this.e_shade) {
|
||||
this.e_shade = document.createElement("DIV");
|
||||
this.e_shade.id = 'tcalShade';
|
||||
document.body.appendChild(this.e_shade);
|
||||
}
|
||||
this.e_iframe = f_getElement('tcalIF')
|
||||
if (b_ieFix && !this.e_iframe) {
|
||||
this.e_iframe = document.createElement("IFRAME");
|
||||
this.e_iframe.style.filter = 'alpha(opacity=0)';
|
||||
this.e_iframe.id = 'tcalIF';
|
||||
this.e_iframe.src = this.a_tpl.imgpath + 'pixel.gif';
|
||||
document.body.appendChild(this.e_iframe);
|
||||
}
|
||||
|
||||
// hide all calendars
|
||||
f_tcalHideAll();
|
||||
|
||||
// generate HTML and show calendar
|
||||
this.e_icon = f_getElement(this.s_iconId);
|
||||
if (!this.f_update())
|
||||
return;
|
||||
|
||||
this.e_div.style.visibility = 'visible';
|
||||
this.e_shade.style.visibility = 'visible';
|
||||
if (this.e_iframe)
|
||||
this.e_iframe.style.visibility = 'visible';
|
||||
|
||||
// change icon and status
|
||||
this.e_icon.src = this.a_tpl.imgpath + 'no_cal.gif';
|
||||
this.e_icon.title = 'Close Calendar';
|
||||
this.b_visible = true;
|
||||
}
|
||||
|
||||
function f_tcalHide (n_date) {
|
||||
if (n_date)
|
||||
this.e_input.value = this.f_generDate(new Date(n_date));
|
||||
|
||||
// no action if not visible
|
||||
if (!this.b_visible)
|
||||
return;
|
||||
|
||||
// hide elements
|
||||
if (this.e_iframe)
|
||||
this.e_iframe.style.visibility = 'hidden';
|
||||
if (this.e_shade)
|
||||
this.e_shade.style.visibility = 'hidden';
|
||||
this.e_div.style.visibility = 'hidden';
|
||||
|
||||
// change icon and status
|
||||
this.e_icon = f_getElement(this.s_iconId);
|
||||
this.e_icon.src = this.a_tpl.imgpath + 'cal.gif';
|
||||
this.e_icon.title = 'Open Calendar';
|
||||
this.b_visible = false;
|
||||
}
|
||||
|
||||
function f_tcalToggle () {
|
||||
return this.b_visible ? this.f_hide() : this.f_show();
|
||||
}
|
||||
|
||||
function f_tcalUpdate (d_date) {
|
||||
|
||||
var d_today = this.a_cfg.today ? this.f_parseDate(this.a_cfg.today) : f_tcalResetTime(new Date());
|
||||
var d_selected = this.e_input.value == ''
|
||||
? (this.a_cfg.selected ? this.f_parseDate(this.a_cfg.selected) : d_today)
|
||||
: this.f_parseDate(this.e_input.value);
|
||||
|
||||
// figure out date to display
|
||||
if (!d_date)
|
||||
// selected by default
|
||||
d_date = d_selected;
|
||||
else if (typeof(d_date) == 'number')
|
||||
// get from number
|
||||
d_date = f_tcalResetTime(new Date(d_date));
|
||||
else if (typeof(d_date) == 'string')
|
||||
// parse from string
|
||||
this.f_parseDate(d_date);
|
||||
|
||||
if (!d_date) return false;
|
||||
|
||||
// first date to display
|
||||
var d_firstday = new Date(d_date);
|
||||
d_firstday.setDate(1);
|
||||
d_firstday.setDate(1 - (7 + d_firstday.getDay() - this.a_tpl.weekstart) % 7);
|
||||
|
||||
var a_class, s_html = '<table class="ctrl"><tbody><tr>'
|
||||
+ (this.a_tpl.yearscroll ? '<td' + this.f_relDate(d_date, -1, 'y') + ' title="Previous Year"><img src="' + this.a_tpl.imgpath + 'prev_year.gif" /></td>' : '')
|
||||
+ '<td' + this.f_relDate(d_date, -1) + ' title="Previous Month"><img src="' + this.a_tpl.imgpath + 'prev_mon.gif" /></td><th>'
|
||||
+ this.a_tpl.months[d_date.getMonth()] + ' ' + d_date.getFullYear()
|
||||
+ '</th><td' + this.f_relDate(d_date, 1) + ' title="Next Month"><img src="' + this.a_tpl.imgpath + 'next_mon.gif" /></td>'
|
||||
+ (this.a_tpl.yearscroll ? '<td' + this.f_relDate(d_date, 1, 'y') + ' title="Next Year"><img src="' + this.a_tpl.imgpath + 'next_year.gif" /></td></td>' : '')
|
||||
+ '</tr></tbody></table><table><tbody><tr class="wd">';
|
||||
|
||||
// print weekdays titles
|
||||
for (var i = 0; i < 7; i++)
|
||||
s_html += '<th>' + this.a_tpl.weekdays[(this.a_tpl.weekstart + i) % 7] + '</th>';
|
||||
s_html += '</tr>' ;
|
||||
|
||||
// print calendar table
|
||||
var n_date, n_month, d_current = new Date(d_firstday);
|
||||
while (d_current.getMonth() == d_date.getMonth() ||
|
||||
d_current.getMonth() == d_firstday.getMonth()) {
|
||||
|
||||
// print row heder
|
||||
s_html +='<tr>';
|
||||
for (var n_wday = 0; n_wday < 7; n_wday++) {
|
||||
|
||||
a_class = [];
|
||||
n_date = d_current.getDate();
|
||||
n_month = d_current.getMonth();
|
||||
|
||||
// other month
|
||||
if (d_current.getMonth() != d_date.getMonth())
|
||||
a_class[a_class.length] = 'othermonth';
|
||||
// weekend
|
||||
if (d_current.getDay() == 0 || d_current.getDay() == 6)
|
||||
a_class[a_class.length] = 'weekend';
|
||||
// today
|
||||
if (d_current.valueOf() == d_today.valueOf())
|
||||
a_class[a_class.length] = 'today';
|
||||
// selected
|
||||
if (d_current.valueOf() == d_selected.valueOf())
|
||||
a_class[a_class.length] = 'selected';
|
||||
|
||||
s_html += '<td onclick="A_TCALS[\'' + this.s_id + '\'].f_hide(' + d_current.valueOf() + ')"' + (a_class.length ? ' class="' + a_class.join(' ') + '">' : '>') + n_date + '</td>'
|
||||
|
||||
d_current.setDate(++n_date);
|
||||
while (d_current.getDate() != n_date && d_current.getMonth() == n_month) {
|
||||
alert(n_date + "\n" + d_current + "\n" + new Date());
|
||||
d_current.setHours(d_current.getHours + 1);
|
||||
d_current = f_tcalResetTime(d_current);
|
||||
}
|
||||
}
|
||||
// print row footer
|
||||
s_html +='</tr>';
|
||||
}
|
||||
s_html +='</tbody></table>';
|
||||
|
||||
// update HTML, positions and sizes
|
||||
this.e_div.innerHTML = s_html;
|
||||
|
||||
var n_width = this.e_div.offsetWidth;
|
||||
var n_height = this.e_div.offsetHeight;
|
||||
var n_top = f_getPosition (this.e_icon, 'Top') + this.e_icon.offsetHeight;
|
||||
var n_left = f_getPosition (this.e_icon, 'Left') - n_width + this.e_icon.offsetWidth;
|
||||
if (n_left < 0) n_left = 0;
|
||||
|
||||
this.e_div.style.left = n_left + 'px';
|
||||
this.e_div.style.top = n_top + 'px';
|
||||
|
||||
this.e_shade.style.width = (n_width + 8) + 'px';
|
||||
this.e_shade.style.left = (n_left - 1) + 'px';
|
||||
this.e_shade.style.top = (n_top - 1) + 'px';
|
||||
this.e_shade.innerHTML = b_ieFix
|
||||
? '<table><tbody><tr><td rowspan="2" colspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_tr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td height="' + (n_height - 7) + '" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_mr.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td width="7" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bl.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_bm.png\', sizingMethod=\'scale\');" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + this.a_tpl.imgpath + 'shade_br.png\', sizingMethod=\'scale\');"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tbody></table>'
|
||||
: '<table><tbody><tr><td rowspan="2" width="6"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td rowspan="2"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td width="7" height="7"><img src="' + this.a_tpl.imgpath + 'shade_tr.png"></td></tr><tr><td background="' + this.a_tpl.imgpath + 'shade_mr.png" height="' + (n_height - 7) + '"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td></tr><tr><td><img src="' + this.a_tpl.imgpath + 'shade_bl.png"></td><td background="' + this.a_tpl.imgpath + 'shade_bm.png" height="7" align="left"><img src="' + this.a_tpl.imgpath + 'pixel.gif"></td><td><img src="' + this.a_tpl.imgpath + 'shade_br.png"></td></tr><tbody></table>';
|
||||
|
||||
if (this.e_iframe) {
|
||||
this.e_iframe.style.left = n_left + 'px';
|
||||
this.e_iframe.style.top = n_top + 'px';
|
||||
this.e_iframe.style.width = (n_width + 6) + 'px';
|
||||
this.e_iframe.style.height = (n_height + 6) +'px';
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function f_getPosition (e_elemRef, s_coord) {
|
||||
var n_pos = 0, n_offset,
|
||||
e_elem = e_elemRef;
|
||||
|
||||
while (e_elem) {
|
||||
n_offset = e_elem["offset" + s_coord];
|
||||
n_pos += n_offset;
|
||||
e_elem = e_elem.offsetParent;
|
||||
}
|
||||
// margin correction in some browsers
|
||||
if (b_ieMac)
|
||||
n_pos += parseInt(document.body[s_coord.toLowerCase() + 'Margin']);
|
||||
else if (b_safari)
|
||||
n_pos -= n_offset;
|
||||
|
||||
e_elem = e_elemRef;
|
||||
while (e_elem != document.body) {
|
||||
n_offset = e_elem["scroll" + s_coord];
|
||||
if (n_offset && e_elem.style.overflow == 'scroll')
|
||||
n_pos -= n_offset;
|
||||
e_elem = e_elem.parentNode;
|
||||
}
|
||||
return n_pos;
|
||||
}
|
||||
|
||||
function f_tcalRelDate (d_date, d_diff, s_units) {
|
||||
var s_units = (s_units == 'y' ? 'FullYear' : 'Month');
|
||||
var d_result = new Date(d_date);
|
||||
d_result['set' + s_units](d_date['get' + s_units]() + d_diff);
|
||||
if (d_result.getDate() != d_date.getDate())
|
||||
d_result.setDate(0);
|
||||
return ' onclick="A_TCALS[\'' + this.s_id + '\'].f_update(' + d_result.valueOf() + ')"';
|
||||
}
|
||||
|
||||
function f_tcalHideAll () {
|
||||
for (var i = 0; i < window.A_TCALSIDX.length; i++)
|
||||
window.A_TCALSIDX[i].f_hide();
|
||||
}
|
||||
|
||||
function f_tcalResetTime (d_date) {
|
||||
d_date.setHours(0);
|
||||
d_date.setMinutes(0);
|
||||
d_date.setSeconds(0);
|
||||
d_date.setMilliseconds(0);
|
||||
return d_date;
|
||||
}
|
||||
|
||||
f_getElement = document.all ?
|
||||
function (s_id) { return document.all[s_id] } :
|
||||
function (s_id) { return document.getElementById(s_id) };
|
||||
|
||||
if (document.addEventListener)
|
||||
window.addEventListener('scroll', f_tcalHideAll, false);
|
||||
if (window.attachEvent)
|
||||
window.attachEvent('onscroll', f_tcalHideAll);
|
||||
|
||||
// global variables
|
||||
var s_userAgent = navigator.userAgent.toLowerCase(),
|
||||
re_webkit = /WebKit\/(\d+)/i;
|
||||
var b_mac = s_userAgent.indexOf('mac') != -1,
|
||||
b_ie5 = s_userAgent.indexOf('msie 5') != -1,
|
||||
b_ie6 = s_userAgent.indexOf('msie 6') != -1 && s_userAgent.indexOf('opera') == -1;
|
||||
var b_ieFix = b_ie5 || b_ie6,
|
||||
b_ieMac = b_mac && b_ie5,
|
||||
b_safari = b_mac && re_webkit.exec(s_userAgent) && Number(RegExp.$1) < 500;
|
@@ -19,7 +19,7 @@
|
||||
|
||||
if(!defined('POSTFIXADMIN')) { # already defined if called from setup.php
|
||||
session_start();
|
||||
define('POSTFIXADMIN', 1); # checked in included files
|
||||
define('POSTFIXADMIN', 1); # checked in included files
|
||||
}
|
||||
|
||||
$incpath = dirname(__FILE__);
|
||||
@@ -62,4 +62,8 @@ function postfixadmin_autoload($class) {
|
||||
}
|
||||
spl_autoload_register('postfixadmin_autoload');
|
||||
|
||||
//*****
|
||||
require_once ("$incpath/smarty.inc.php");
|
||||
//*****
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
@@ -29,7 +29,6 @@ $CONF['configured'] = false;
|
||||
// To create the hash, visit setup.php in a browser and type a password into the field,
|
||||
// on submission it will be echoed out to you as a hashed value.
|
||||
$CONF['setup_password'] = 'changeme';
|
||||
|
||||
// Postfix Admin Path
|
||||
// Set the location of your Postfix Admin installation here.
|
||||
// YOU MUST ENTER THE COMPLETE URL e.g. http://domain.tld/postfixadmin
|
||||
@@ -58,7 +57,6 @@ $CONF['database_prefix'] = '';
|
||||
// uncomment and change the following
|
||||
// $CONF['database_port'] = '5432';
|
||||
|
||||
|
||||
// Here, if you need, you can customize table names.
|
||||
$CONF['database_prefix'] = '';
|
||||
$CONF['database_tables'] = array (
|
||||
@@ -74,7 +72,7 @@ $CONF['database_tables'] = array (
|
||||
'vacation' => 'vacation',
|
||||
'vacation_notification' => 'vacation_notification',
|
||||
'quota' => 'quota',
|
||||
'quota2' => 'quota2',
|
||||
'quota2' => 'quota2',
|
||||
);
|
||||
|
||||
// Site Admin
|
||||
@@ -308,7 +306,6 @@ $CONF['show_custom_colors']=array("lightgreen","lightblue");
|
||||
// Set to "" to disable this check.
|
||||
$CONF['recipient_delimiter'] = "";
|
||||
|
||||
|
||||
// Optional:
|
||||
// Script to run after creation of mailboxes.
|
||||
// Note that this may fail if PHP is run in "safe mode", or if
|
||||
@@ -389,12 +386,11 @@ $CONF['theme_logo'] = 'images/logo-default.png';
|
||||
$CONF['theme_css'] = 'css/default.css';
|
||||
|
||||
// XMLRPC Interface.
|
||||
// This should be only of use if you wish to use e.g the
|
||||
// This should be only of use if you wish to use e.g the
|
||||
// Postfixadmin-Squirrelmail package
|
||||
// change to boolean true to enable xmlrpc
|
||||
$CONF['xmlrpc_enabled'] = false;
|
||||
|
||||
|
||||
// If you want to keep most settings at default values and/or want to ensure
|
||||
// that future updates work without problems, you can use a separate config
|
||||
// file (config.local.php) instead of editing this file and override some
|
||||
|
72
configs/menu.conf
Normal file
72
configs/menu.conf
Normal file
@@ -0,0 +1,72 @@
|
||||
url_main = main.php
|
||||
# list_admin
|
||||
url_list_admin = list-admin.php
|
||||
url_create_admin = create-admin.php
|
||||
# list-domain
|
||||
url_list_domain = list-domain.php
|
||||
url_create_domain = create-domain.php
|
||||
# list-virtual
|
||||
url_list_virtual = list-virtual.php
|
||||
url_create_mailbox = create-mailbox.php
|
||||
url_create_alias = create-alias.php
|
||||
url_create_alias_domain = create-alias-domain.php
|
||||
# fetchmail
|
||||
url_fetchmail = fetchmail.php
|
||||
url_fetchmail_new_entry = fetchmail.php?new=1
|
||||
# sendmail
|
||||
url_sendmail = sendmail.php
|
||||
url_broadcast_message = broadcast-message.php
|
||||
# password
|
||||
url_password = password.php
|
||||
# backup
|
||||
url_backup = backup.php
|
||||
# viewlog
|
||||
url_viewlog = viewlog.php
|
||||
# logout
|
||||
url_logout = logout.php
|
||||
|
||||
# user-menu
|
||||
url_user_edit_alias = edit-alias.php
|
||||
url_user_vacation = vacation.php
|
||||
url_user_password = password.php
|
||||
url_user_logout = logout.php
|
||||
|
||||
|
||||
url_edit_active = edit-active.php
|
||||
|
||||
tr_header = <tr class="header">
|
||||
tr_hilightoff = <tr class="hilightoff" onmouseover="className='hilighton';" onmouseout="className='hilightoff';">
|
||||
|
||||
url_delete = delete.php
|
||||
url_search = search.php
|
||||
form_search = <form name="search" method="post" action="search.php"><input name="search" size="10" /></form>
|
||||
|
||||
[main]
|
||||
_txt_list_domain = pMenu_overview
|
||||
|
||||
[admin_list-admin]
|
||||
url_edit_active_admin = edit-active-admin.php
|
||||
url_edit_admin = edit-admin.php
|
||||
|
||||
[admin_list-domain]
|
||||
url_edit_active_domain = edit-active-domain.php
|
||||
url_edit_domain = edit-domain.php
|
||||
|
||||
[DISCARDED]
|
||||
_txt_main = pMenu_main
|
||||
_txt_list_admin = pAdminMenu_list_admin
|
||||
_txt_create_admin = pAdminMenu_create_admin
|
||||
_txt_list_domain = pAdminMenu_list_domain
|
||||
_txt_create_domain = pAdminMenu_create_domain
|
||||
_txt_list_virtual = pAdminMenu_list_virtual
|
||||
_txt_create_mailbox = pMenu_create_mailbox
|
||||
_txt_create_alias = pMenu_create_alias
|
||||
_txt_create_alias_domain = pMenu_create_alias_domain
|
||||
_txt_fetchmail = pMenu_fetchmail
|
||||
_txt_fetchmail_new_entry = pFetchmail_new_entry
|
||||
_txt_logout = pMenu_logout
|
||||
_txt_viewlog = pMenu_viewlog
|
||||
_txt_password = pMenu_password
|
||||
_txt_backup = pAdminMenu_backup
|
||||
_txt_sendmail = pMenu_sendmail
|
||||
_txt_broadcast_message = pAdminMenu_broadcast_message
|
@@ -34,7 +34,6 @@
|
||||
require_once('common.php');
|
||||
|
||||
authentication_require_role('global-admin');
|
||||
|
||||
$list_domains = list_domains ();
|
||||
$tDomains = array();
|
||||
|
||||
@@ -51,7 +50,6 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
|
||||
$fDomains = array();
|
||||
if (!empty ($_POST['fDomains'])) $fDomains = $_POST['fDomains'];
|
||||
|
||||
list ($error, $tMessage, $pAdminCreate_admin_username_text, $pAdminCreate_admin_password_text) = create_admin($fUsername, $fPassword, $fPassword2, $fDomains);
|
||||
|
||||
if ($error != 0) {
|
||||
@@ -60,10 +58,14 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/admin_create-admin.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('tUsername', $tUsername);
|
||||
$smarty->assign ('pAdminCreate_admin_username_text', $pAdminCreate_admin_username_text);
|
||||
$smarty->assign ('pAdminCreate_admin_password_text', $pAdminCreate_admin_password_text);
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('select_options', select_options ($list_domains, $tDomains));
|
||||
|
||||
$smarty->assign ('smarty_template', 'admin_create-admin');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
@@ -86,11 +86,14 @@ if (isset ($_REQUEST['target_domain'])) {
|
||||
$fTargetDomain = escape_string ($_REQUEST['target_domain']);
|
||||
$fTargetDomain = strtolower ($fTargetDomain);
|
||||
}
|
||||
//*** ?????
|
||||
if (isset ($_REQUEST['active'])) {
|
||||
$fActive = (bool)$_REQUEST['active'];
|
||||
} else {
|
||||
$fActive = true;
|
||||
$fActive = false;
|
||||
}
|
||||
if (!isset ($_REQUEST['submit']))
|
||||
$fActive = true;
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
@@ -132,10 +135,13 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
|
||||
$tMessage .= "<br />($fAliasDomain -> $fTargetDomain)<br />\n";
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/create-alias-domain.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('alias_domains', (count($alias_domains) > 0));
|
||||
$smarty->assign ('select_options_alias', select_options ($alias_domains, array ($fAliasDomain)));
|
||||
$smarty->assign ('select_options_target', select_options ($target_domains, array ($fTargetDomain)));
|
||||
if ($fActive) $smarty->assign ('fActive', ' checked="checked"');
|
||||
if ($error == 1) $tMessage = '<span class="error_msg">'.$tMessage.'</span>';
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'create-alias-domain');
|
||||
$smarty->display ('index.tpl');
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
@@ -124,7 +124,7 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
$tAddress = escape_string ($_POST['fAddress']);
|
||||
$tGoto = $fGoto;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error2'];
|
||||
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error2'];
|
||||
}
|
||||
|
||||
if ($fActive == "on") {
|
||||
@@ -150,12 +150,17 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
$tDomain = $fDomain;
|
||||
$tMessage = $PALANG['pCreate_alias_result_success'] . "<br />($fAddress -> $fGoto)<br />\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/create-alias.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('tAddress', $tAddress);
|
||||
$smarty->assign ('select_options', select_options ($list_domains, array ($tDomain)));
|
||||
$smarty->assign ('pCreate_alias_address_text', $pCreate_alias_address_text);
|
||||
$smarty->assign ('tGoto', $tGoto);
|
||||
$smarty->assign ('pCreate_alias_goto_text', $pCreate_alias_goto_text);
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'create-alias');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
|
@@ -142,10 +142,18 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/admin_create-domain.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('tDomain', $tDomain);
|
||||
$smarty->assign ('pAdminCreate_domain_domain_text', $pAdminCreate_domain_domain_text);
|
||||
$smarty->assign ('tDescription', $tDescription);
|
||||
$smarty->assign ('tAliases', $tAliases);
|
||||
$smarty->assign ('tMailboxes', $tMailboxes);
|
||||
$smarty->assign ('tMaxquota', $tMaxquota);
|
||||
$smarty->assign ('select_options', select_options ($CONF ['transport_options'], array ($tTransport)));
|
||||
$smarty->assign ('tDefaultaliases', ($tDefaultaliases == 'on') ? ' checked="checked"' : '');
|
||||
$smarty->assign ('tBackupmx', ($tBackupmx == 'on') ? ' checked="checked"' : '');
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'admin_create-domain');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
|
@@ -40,235 +40,240 @@ require_once('common.php');
|
||||
authentication_require_role('admin');
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
if(authentication_has_role('global-admin')) {
|
||||
$list_domains = list_domains ();
|
||||
$list_domains = list_domains ();
|
||||
}
|
||||
else {
|
||||
$list_domains = list_domains_for_admin($SESSID_USERNAME);
|
||||
$list_domains = list_domains_for_admin($SESSID_USERNAME);
|
||||
}
|
||||
|
||||
|
||||
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text'];
|
||||
$pCreate_mailbox_name_text = $PALANG['pCreate_mailbox_name_text'];
|
||||
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text'];
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
$fDomain = $list_domains[0];
|
||||
if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
|
||||
$fDomain = $list_domains[0];
|
||||
if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
|
||||
|
||||
if(!in_array($fDomain, $list_domains)) {
|
||||
die("Invalid domain name selected, or you tried to select a domain you are not an admin for");
|
||||
}
|
||||
$tDomain = $fDomain;
|
||||
$result = db_query ("SELECT * FROM $table_domain WHERE domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$tQuota = $row['maxquota'];
|
||||
}
|
||||
if(!in_array($fDomain, $list_domains)) {
|
||||
die("Invalid domain name selected, or you tried to select a domain you are not an admin for");
|
||||
}
|
||||
$tDomain = $fDomain;
|
||||
$result = db_query ("SELECT * FROM $table_domain WHERE domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$tQuota = $row['maxquota'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
|
||||
if (isset ($_POST['fUsername']) && isset ($_POST['fDomain'])) $fUsername = escape_string ($_POST['fUsername']) . "@" . escape_string ($_POST['fDomain']);
|
||||
$fUsername = strtolower ($fUsername);
|
||||
if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']);
|
||||
if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
|
||||
isset ($_POST['fName']) ? $fName = escape_string ($_POST['fName']) : $fName = "";
|
||||
if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']);
|
||||
isset ($_POST['fQuota']) ? $fQuota = intval($_POST['fQuota']) : $fQuota = 0;
|
||||
isset ($_POST['fActive']) ? $fActive = escape_string ($_POST['fActive']) : $fActive = "1";
|
||||
if (isset ($_POST['fMail'])) $fMail = escape_string ($_POST['fMail']);
|
||||
if (isset ($_POST['fUsername']) && isset ($_POST['fDomain'])) $fUsername = escape_string ($_POST['fUsername']) . "@" . escape_string ($_POST['fDomain']);
|
||||
$fUsername = strtolower ($fUsername);
|
||||
if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']);
|
||||
if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
|
||||
isset ($_POST['fName']) ? $fName = escape_string ($_POST['fName']) : $fName = "";
|
||||
if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']);
|
||||
isset ($_POST['fQuota']) ? $fQuota = intval($_POST['fQuota']) : $fQuota = 0;
|
||||
isset ($_POST['fActive']) ? $fActive = escape_string ($_POST['fActive']) : $fActive = "1";
|
||||
if (isset ($_POST['fMail'])) $fMail = escape_string ($_POST['fMail']);
|
||||
|
||||
|
||||
if ( (!check_owner ($SESSID_USERNAME, $fDomain)) && (!authentication_has_role('global-admin')) )
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
|
||||
}
|
||||
if ( (!check_owner ($SESSID_USERNAME, $fDomain)) && (!authentication_has_role('global-admin')) )
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
|
||||
}
|
||||
|
||||
if (!check_mailbox ($fDomain))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error3'];
|
||||
}
|
||||
if (!check_mailbox ($fDomain))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error3'];
|
||||
}
|
||||
|
||||
if (empty ($fUsername) or !check_email ($fUsername))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
|
||||
}
|
||||
if (empty ($fUsername) or !check_email ($fUsername))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
|
||||
}
|
||||
|
||||
$tPassGenerated = 0;
|
||||
if (empty ($fPassword) or empty ($fPassword2) or ($fPassword != $fPassword2))
|
||||
{
|
||||
if (empty ($fPassword) and empty ($fPassword2) and $CONF['generate_password'] == "YES")
|
||||
{
|
||||
$fPassword = generate_password ();
|
||||
$tPassGenerated = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text_error'];
|
||||
}
|
||||
}
|
||||
$tPassGenerated = 0;
|
||||
if (empty ($fPassword) or empty ($fPassword2) or ($fPassword != $fPassword2))
|
||||
{
|
||||
if (empty ($fPassword) and empty ($fPassword2) and $CONF['generate_password'] == "YES")
|
||||
{
|
||||
$fPassword = generate_password ();
|
||||
$tPassGenerated = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text_error'];
|
||||
}
|
||||
}
|
||||
|
||||
if ($CONF['quota'] == "YES")
|
||||
{
|
||||
if (!check_quota ($fQuota, $fDomain))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text_error'];
|
||||
}
|
||||
}
|
||||
if ($CONF['quota'] == "YES")
|
||||
{
|
||||
if (!check_quota ($fQuota, $fDomain))
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text_error'];
|
||||
}
|
||||
}
|
||||
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error2'];
|
||||
}
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$error = 1;
|
||||
$tUsername = escape_string ($_POST['fUsername']);
|
||||
$tName = $fName;
|
||||
$tQuota = $fQuota;
|
||||
$tDomain = $fDomain;
|
||||
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error2'];
|
||||
}
|
||||
|
||||
if ($error != 1)
|
||||
{
|
||||
$password = pacrypt ($fPassword);
|
||||
if ($error != 1)
|
||||
{
|
||||
$password = pacrypt ($fPassword);
|
||||
|
||||
if ($CONF['domain_path'] == "YES")
|
||||
{
|
||||
if ($CONF['domain_in_mailbox'] == "YES")
|
||||
{
|
||||
$maildir = $fDomain . "/" . $fUsername . "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
$maildir = $fDomain . "/" . escape_string (strtolower($_POST['fUsername'])) . "/";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$maildir = $fUsername . "/";
|
||||
}
|
||||
if ($CONF['domain_path'] == "YES")
|
||||
{
|
||||
if ($CONF['domain_in_mailbox'] == "YES")
|
||||
{
|
||||
$maildir = $fDomain . "/" . $fUsername . "/";
|
||||
}
|
||||
else
|
||||
{
|
||||
$maildir = $fDomain . "/" . escape_string (strtolower($_POST['fUsername'])) . "/";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$maildir = $fUsername . "/";
|
||||
}
|
||||
|
||||
if (!empty ($fQuota))
|
||||
{
|
||||
$quota = multiply_quota ($fQuota);
|
||||
}
|
||||
else
|
||||
{
|
||||
$quota = 0;
|
||||
}
|
||||
if (!empty ($fQuota))
|
||||
{
|
||||
$quota = multiply_quota ($fQuota);
|
||||
}
|
||||
else
|
||||
{
|
||||
$quota = 0;
|
||||
}
|
||||
|
||||
if ($fActive == "on")
|
||||
{
|
||||
$sqlActive = db_get_boolean(True);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sqlActive = db_get_boolean(False);
|
||||
}
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
db_query('BEGIN');
|
||||
}
|
||||
if ($fActive == "on")
|
||||
{
|
||||
$sqlActive = db_get_boolean(True);
|
||||
}
|
||||
else
|
||||
{
|
||||
$sqlActive = db_get_boolean(False);
|
||||
}
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
db_query('BEGIN');
|
||||
}
|
||||
|
||||
$result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$tDomain = $fDomain;
|
||||
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
|
||||
}
|
||||
$result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$tDomain = $fDomain;
|
||||
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
|
||||
}
|
||||
|
||||
// apparently uppercase usernames really confuse some IMAP clients.
|
||||
$fUsername = strtolower($fUsername);
|
||||
$local_part = '';
|
||||
if(preg_match('/^(.*)@/', $fUsername, $matches)) {
|
||||
$local_part = $matches[1];
|
||||
}
|
||||
|
||||
// apparently uppercase usernames really confuse some IMAP clients.
|
||||
$fUsername = strtolower($fUsername);
|
||||
$local_part = '';
|
||||
if(preg_match('/^(.*)@/', $fUsername, $matches)) {
|
||||
$local_part = $matches[1];
|
||||
}
|
||||
$result = db_query ("INSERT INTO $table_mailbox (username,password,name,maildir,local_part,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$local_part','$quota','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||
if ($result['rows'] != 1 || !mailbox_postcreation($fUsername,$fDomain,$maildir, $quota))
|
||||
{
|
||||
$tDomain = $fDomain;
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
|
||||
db_query('ROLLBACK');
|
||||
}
|
||||
else
|
||||
{
|
||||
db_query('COMMIT');
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'create_mailbox', "$fUsername");
|
||||
$tDomain = $fDomain;
|
||||
|
||||
$result = db_query ("INSERT INTO $table_mailbox (username,password,name,maildir,local_part,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$local_part','$quota','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||
if ($result['rows'] != 1 || !mailbox_postcreation($fUsername,$fDomain,$maildir, $quota))
|
||||
{
|
||||
$tDomain = $fDomain;
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
|
||||
db_query('ROLLBACK');
|
||||
}
|
||||
else
|
||||
{
|
||||
db_query('COMMIT');
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'create_mailbox', "$fUsername");
|
||||
$tDomain = $fDomain;
|
||||
$tQuota = $CONF['maxquota'];
|
||||
|
||||
$tQuota = $CONF['maxquota'];
|
||||
if ($fMail == "on")
|
||||
{
|
||||
$fTo = $fUsername;
|
||||
$fFrom = $SESSID_USERNAME;
|
||||
$fHeaders = "To: " . $fTo . "\n";
|
||||
$fHeaders .= "From: " . $fFrom . "\n";
|
||||
|
||||
if ($fMail == "on")
|
||||
{
|
||||
$fTo = $fUsername;
|
||||
$fFrom = $SESSID_USERNAME;
|
||||
$fHeaders = "To: " . $fTo . "\n";
|
||||
$fHeaders .= "From: " . $fFrom . "\n";
|
||||
$fHeaders .= "Subject: " . encode_header ($PALANG['pSendmail_subject_text']) . "\n";
|
||||
$fHeaders .= "MIME-Version: 1.0\n";
|
||||
$fHeaders .= "Content-Type: text/plain; charset=utf-8\n";
|
||||
$fHeaders .= "Content-Transfer-Encoding: 8bit\n";
|
||||
|
||||
$fHeaders .= $CONF['welcome_text'];
|
||||
|
||||
$fHeaders .= "Subject: " . encode_header ($PALANG['pSendmail_subject_text']) . "\n";
|
||||
$fHeaders .= "MIME-Version: 1.0\n";
|
||||
$fHeaders .= "Content-Type: text/plain; charset=utf-8\n";
|
||||
$fHeaders .= "Content-Transfer-Encoding: 8bit\n";
|
||||
if (!smtp_mail ($fTo, $fFrom, $fHeaders))
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
|
||||
}
|
||||
else
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
|
||||
}
|
||||
}
|
||||
|
||||
$fHeaders .= $CONF['welcome_text'];
|
||||
$tShowpass = "";
|
||||
if ( $tPassGenerated == 1 || $CONF['show_password'] == "YES") $tShowpass = " / $fPassword";
|
||||
|
||||
if (!smtp_mail ($fTo, $fFrom, $fHeaders))
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
|
||||
}
|
||||
else
|
||||
{
|
||||
$tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
|
||||
}
|
||||
}
|
||||
if (create_mailbox_subfolders($fUsername,$fPassword))
|
||||
{
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_success'] . "<br />($fUsername$tShowpass)";
|
||||
} else {
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_succes_nosubfolders'] . "<br />($fUsername$tShowpass)";
|
||||
}
|
||||
|
||||
$tShowpass = "";
|
||||
if ( $tPassGenerated == 1 || $CONF['show_password'] == "YES") $tShowpass = " / $fPassword";
|
||||
|
||||
if (create_mailbox_subfolders($fUsername,$fPassword))
|
||||
{
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_success'] . "<br />($fUsername$tShowpass)";
|
||||
} else {
|
||||
$tMessage .= $PALANG['pCreate_mailbox_result_succes_nosubfolders'] . "<br />($fUsername$tShowpass)";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/create-mailbox.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('tUsername', $tUsername);
|
||||
$smarty->assign ('select_options', select_options ($list_domains, array ($tDomain)));
|
||||
$smarty->assign ('pCreate_mailbox_username_text', $pCreate_mailbox_username_text);
|
||||
$smarty->assign ('pCreate_mailbox_password_text', $pCreate_mailbox_password_text);
|
||||
$smarty->assign ('tName', $tName);
|
||||
$smarty->assign ('tQuota', $tQuota);
|
||||
$smarty->assign ('pCreate_mailbox_quota_text', $pCreate_mailbox_quota_text);
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'create-mailbox');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
95
css/calendar.css
Normal file
95
css/calendar.css
Normal file
@@ -0,0 +1,95 @@
|
||||
/* calendar icon */
|
||||
img.tcalIcon {
|
||||
cursor: pointer;
|
||||
margin-left: 1px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
/* calendar container element */
|
||||
div#tcal {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
z-index: 100;
|
||||
width: 158px;
|
||||
padding: 2px 0 0 0;
|
||||
}
|
||||
/* all tables in calendar */
|
||||
div#tcal table {
|
||||
width: 100%;
|
||||
border: 1px solid silver;
|
||||
border-collapse: collapse;
|
||||
background-color: white;
|
||||
}
|
||||
/* navigation table */
|
||||
div#tcal table.ctrl {
|
||||
border-bottom: 0;
|
||||
}
|
||||
/* navigation buttons */
|
||||
div#tcal table.ctrl td {
|
||||
width: 15px;
|
||||
height: 20px;
|
||||
}
|
||||
/* month year header */
|
||||
div#tcal table.ctrl th {
|
||||
background-color: white;
|
||||
color: black;
|
||||
border: 0;
|
||||
}
|
||||
/* week days header */
|
||||
div#tcal th {
|
||||
border: 1px solid silver;
|
||||
border-collapse: collapse;
|
||||
text-align: center;
|
||||
padding: 3px 0;
|
||||
font-family: tahoma, verdana, arial;
|
||||
font-size: 10px;
|
||||
background-color: gray;
|
||||
color: white;
|
||||
}
|
||||
/* date cells */
|
||||
div#tcal td {
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
text-align: center;
|
||||
padding: 2px 0;
|
||||
font-family: tahoma, verdana, arial;
|
||||
font-size: 11px;
|
||||
width: 22px;
|
||||
cursor: pointer;
|
||||
}
|
||||
/* date highlight
|
||||
in case of conflicting settings order here determines the priority from least to most important */
|
||||
div#tcal td.othermonth {
|
||||
color: silver;
|
||||
}
|
||||
div#tcal td.weekend {
|
||||
background-color: #ACD6F5;
|
||||
}
|
||||
div#tcal td.today {
|
||||
border: 1px solid red;
|
||||
}
|
||||
div#tcal td.selected {
|
||||
background-color: #FFB3BE;
|
||||
}
|
||||
/* iframe element used to suppress windowed controls in IE5/6 */
|
||||
iframe#tcalIF {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
z-index: 98;
|
||||
border: 0;
|
||||
}
|
||||
/* transparent shadow */
|
||||
div#tcalShade {
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
z-index: 99;
|
||||
}
|
||||
div#tcalShade table {
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
}
|
||||
div#tcalShade table td {
|
||||
border: 0;
|
||||
border-collapse: collapse;
|
||||
padding: 0;
|
||||
}
|
@@ -98,14 +98,14 @@ ul.flash-error {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
#menu {
|
||||
#menu, #tabbar {
|
||||
width: 750px;
|
||||
margin: 0 auto;
|
||||
padding-top: 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#menu ul {
|
||||
#menu ul, #tabbar ul {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
margin-left:auto;
|
||||
@@ -113,18 +113,18 @@ ul.flash-error {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
#menu li {
|
||||
#menu li, #tabbar li {
|
||||
float: left;
|
||||
background: #efefef;
|
||||
margin-right: 3px;
|
||||
border-top: 4px solid #aaaaaa;
|
||||
}
|
||||
|
||||
#menu li:hover, #menu li.sfhover {
|
||||
#menu li:hover, #menu li.sfhover, #tabbar li:hover, #tabbar li.sfhover {
|
||||
background: #BFFF00;
|
||||
}
|
||||
|
||||
#menu li ul {
|
||||
#menu li ul, #tabbar li ul {
|
||||
position: absolute;
|
||||
width: auto;
|
||||
left: -999em;
|
||||
@@ -132,12 +132,12 @@ ul.flash-error {
|
||||
border:2px solid white;
|
||||
border-top:none;
|
||||
}
|
||||
#menu li:hover ul, #menu li.sfhover ul {
|
||||
#menu li:hover ul, #menu li.sfhover ul, #tabbar li:hover ul, #tabbar li.sfhover ul {
|
||||
left: auto;
|
||||
}
|
||||
|
||||
|
||||
#menu li ul li {
|
||||
#menu li ul li, #tabbar li ul li {
|
||||
float: none;
|
||||
margin-right: 0px;
|
||||
border-top:2px solid white;;
|
||||
@@ -145,22 +145,20 @@ ul.flash-error {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#menu a {
|
||||
#menu a, #tabbar a {
|
||||
display: block;
|
||||
width: auto;
|
||||
padding: 20px 5px 5px 5px;
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
#menu a:hover {
|
||||
#menu a:hover, #tabbar a:hover {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#menu li ul li a {
|
||||
#menu li ul li a, #tabbar li ul li a {
|
||||
padding: 5px 5px 5px 5px;
|
||||
}
|
||||
|
||||
@@ -240,12 +238,6 @@ ul.flash-error {
|
||||
line-height: 30px;
|
||||
}
|
||||
|
||||
#nav_bar {
|
||||
text-align: right;
|
||||
width: 750px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#alias_domain_table, #alias_table, #mailbox_table, #overview_table, #log_table, #admin_table {
|
||||
width: 750px;
|
||||
margin: 0px auto;
|
||||
@@ -281,6 +273,10 @@ ul.flash-error {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#alias_domain_table td, #alias_table td, #mailbox_table td, #overview_table td, #log_table td, #admin_table td {
|
||||
text-align : left;
|
||||
}
|
||||
|
||||
#footer {
|
||||
width: 750px;
|
||||
margin: 20px auto;
|
||||
@@ -313,3 +309,9 @@ div.setup {
|
||||
div.setup li {
|
||||
padding-bottom:1em;
|
||||
}
|
||||
|
||||
div.nav_bar {
|
||||
text-align: left;
|
||||
width: 750px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
6
debian/changelog
vendored
6
debian/changelog
vendored
@@ -1,9 +1,3 @@
|
||||
postfixadmin (2.3) unstable; urgency=low
|
||||
|
||||
* New 'upstream' release.
|
||||
|
||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Mon, 27 Jul 2009 22:08:26 +0100
|
||||
|
||||
postfixadmin (2.3rc7) unstable; urgency=low
|
||||
|
||||
* Fix issue with pre.rm script
|
||||
|
86
delete.php
86
delete.php
@@ -114,63 +114,61 @@ elseif ($fTable == "alias" or $fTable == "mailbox")
|
||||
else
|
||||
{
|
||||
if ($CONF['database_type'] == "pgsql") db_query('BEGIN');
|
||||
/* there may be no aliases to delete */
|
||||
$result = db_query("SELECT * FROM $table_alias WHERE address = '$fDelete' AND domain = '$fDomain'");
|
||||
if($result['rows'] == 1) {
|
||||
$result = db_query ("DELETE FROM $table_alias WHERE address='$fDelete' AND domain='$fDomain'");
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'delete_alias', $fDelete);
|
||||
}
|
||||
|
||||
/* is there a mailbox? if do delete it from orbit; it's the only way to be sure */
|
||||
$result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$result = db_query ("DELETE FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'");
|
||||
$postdel_res=mailbox_postdeletion($fDelete,$fDomain);
|
||||
if ($result['rows'] != 1 || !$postdel_res)
|
||||
/* there may be no aliases to delete */
|
||||
$result = db_query("SELECT * FROM $table_alias WHERE address = '$fDelete' AND domain = '$fDomain'");
|
||||
if($result['rows'] == 1) {
|
||||
$result = db_query ("DELETE FROM $table_alias WHERE address='$fDelete' AND domain='$fDomain'");
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'delete_alias', $fDelete);
|
||||
}
|
||||
/* is there a mailbox? if do delete it from orbit; it's the only way to be sure */
|
||||
$result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$error = 1;
|
||||
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (";
|
||||
if ($result['rows']!=1)
|
||||
$result = db_query ("DELETE FROM $table_mailbox WHERE username='$fDelete' AND domain='$fDomain'");
|
||||
$postdel_res=mailbox_postdeletion($fDelete,$fDomain);
|
||||
if ($result['rows'] != 1 || !$postdel_res)
|
||||
{
|
||||
$tMessage.='mailbox';
|
||||
if (!$postdel_res) $tMessage.=', ';
|
||||
$error = 1;
|
||||
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (";
|
||||
if ($result['rows']!=1)
|
||||
{
|
||||
$tMessage.='mailbox';
|
||||
if (!$postdel_res) $tMessage.=', ';
|
||||
}
|
||||
if (!$postdel_res)
|
||||
{
|
||||
$tMessage.='post-deletion';
|
||||
}
|
||||
$tMessage.=')</span>';
|
||||
}
|
||||
if (!$postdel_res)
|
||||
{
|
||||
$tMessage.='post-deletion';
|
||||
}
|
||||
$tMessage.=')</span>';
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'delete_mailbox', $fDelete);
|
||||
}
|
||||
$result = db_query("SELECT * FROM $table_vacation WHERE email = '$fDelete' AND domain = '$fDomain'");
|
||||
if($result['rows'] == 1) {
|
||||
db_query ("DELETE FROM $table_vacation WHERE email='$fDelete' AND domain='$fDomain'");
|
||||
db_query ("DELETE FROM $table_vacation_notification WHERE on_vacation ='$fDelete' "); /* should be caught by cascade, if PgSQL */
|
||||
}
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'delete_mailbox', $fDelete);
|
||||
}
|
||||
$result = db_query("SELECT * FROM $table_vacation WHERE email = '$fDelete' AND domain = '$fDomain'");
|
||||
if($result['rows'] == 1) {
|
||||
db_query ("DELETE FROM $table_vacation WHERE email='$fDelete' AND domain='$fDomain'");
|
||||
db_query ("DELETE FROM $table_vacation_notification WHERE on_vacation ='$fDelete' "); /* should be caught by cascade, if PgSQL */
|
||||
}
|
||||
}
|
||||
|
||||
if ($error != 1)
|
||||
{
|
||||
if ($CONF['database_type'] == "pgsql") db_query('COMMIT');
|
||||
header ("Location: list-virtual.php?domain=$fDomain");
|
||||
exit;
|
||||
} else {
|
||||
$tMessage .= $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (physical mail)!</span>";
|
||||
if ($CONF['database_type'] == "pgsql") db_query('ROLLBACK');
|
||||
}
|
||||
if ($error != 1)
|
||||
{
|
||||
if ($CONF['database_type'] == "pgsql") db_query('COMMIT');
|
||||
header ("Location: list-virtual.php?domain=$fDomain");
|
||||
exit;
|
||||
} else {
|
||||
$tMessage .= $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (physical mail)!</span>";
|
||||
if ($CONF['database_type'] == "pgsql") db_query('ROLLBACK');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
flash_error($PALANG['invalid_parameter']);
|
||||
}
|
||||
|
||||
$smarty->assign ('smarty_template', 'message');
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/message.php");
|
||||
include ("templates/footer.php");
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
|
@@ -50,11 +50,10 @@ if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
exit;
|
||||
}
|
||||
}
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'message');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/message.php");
|
||||
include ("templates/footer.php");
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
|
||||
|
@@ -50,10 +50,10 @@ if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/message.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'message');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
@@ -112,9 +112,9 @@ if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/message.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'message');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
@@ -21,8 +21,8 @@
|
||||
*
|
||||
* tAllDomains
|
||||
* tDomains
|
||||
* tActive
|
||||
* tSadmin
|
||||
* tActive_checked
|
||||
* tSadmin_checked
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
@@ -131,29 +131,33 @@ if (isset($_GET['username'])) $username = escape_string ($_GET['username']);
|
||||
|
||||
$tAllDomains = list_domains();
|
||||
$tDomains = list_domains_for_admin ($username);
|
||||
$tActive = '';
|
||||
$tActive_checked = '';
|
||||
$tPassword = $admin_details['password'];
|
||||
|
||||
if($admin_details['active'] == 't' || $admin_details['active'] == 1) {
|
||||
$tActive = $admin_details['active'];
|
||||
$tActive_checked = ' checked="checked"';
|
||||
}
|
||||
$tSadmin = '0';
|
||||
$tSadmin_checked = '';
|
||||
$result = db_query ("SELECT * FROM $table_domain_admins WHERE username='$username'");
|
||||
// could/should be multiple matches to query;
|
||||
if ($result['rows'] >= 1) {
|
||||
$result = $result['result'];
|
||||
while($row = db_array($result)) {
|
||||
if ($row['domain'] == 'ALL') {
|
||||
$tSadmin = '1';
|
||||
$tSadmin_checked = ' checked="checked"';
|
||||
$tDomains = array(); /* empty the list, they're an admin */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/admin_edit-admin.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('username', $username);
|
||||
$smarty->assign ('pAdminEdit_admin_password_text', $pAdminEdit_admin_password_text);
|
||||
$smarty->assign ('tActive_checked', $tActive_checked);
|
||||
$smarty->assign ('tSadmin_checked', $tSadmin_checked);
|
||||
$smarty->assign ('select_options', select_options ($tAllDomains, $tDomains));
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'admin_edit-admin');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
|
214
edit-alias.php
214
edit-alias.php
@@ -35,139 +35,149 @@ authentication_require_role('admin');
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
|
||||
if($CONF['alias_control_admin'] == 'NO' && !authentication_has_role('global-admin')) {
|
||||
die("Check config.inc.php - domain administrators do not have the ability to edit user's aliases (alias_control_admin)");
|
||||
die("Check config.inc.php - domain administrators do not have the ability to edit user's aliases (alias_control_admin)");
|
||||
}
|
||||
|
||||
/* retrieve existing alias record for the user first... may be via GET or POST */
|
||||
|
||||
$fAddress = safepost('address', safeget('address')); # escaped below
|
||||
$fDomain = escape_string(preg_replace("/.*@/", "", $fAddress));
|
||||
$fAddress = escape_string($fAddress); # escaped now
|
||||
if ($fAddress == "") {
|
||||
die("Required parameters not present");
|
||||
die("Required parameters not present");
|
||||
}
|
||||
|
||||
/* Check the user is able to edit the domain's aliases */
|
||||
if(!check_owner($SESSID_USERNAME, $fDomain) && !authentication_has_role('global-admin'))
|
||||
{
|
||||
die("You lack permission to do this. yes.");
|
||||
}
|
||||
|
||||
$table_alias = table_by_key('alias');
|
||||
$alias_list = array();
|
||||
$orig_alias_list = array();
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fAddress' AND domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$tGoto = $row['goto'];
|
||||
if(!check_owner($SESSID_USERNAME, $fDomain) && !authentication_has_role('global-admin'))
|
||||
{
|
||||
die("You lack permission to do this. yes.");
|
||||
}
|
||||
|
||||
$orig_alias_list = explode(',', $tGoto);
|
||||
$alias_list = $orig_alias_list;
|
||||
//. if we are not a global admin, and special_alias_control is NO, hide the alias that's the mailbox name.
|
||||
if($CONF['special_alias_control'] == 'NO' && !authentication_has_role('global-admin')) {
|
||||
/* Has a mailbox as well? Remove the address from $tGoto in order to edit just the real aliases */
|
||||
$result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fAddress' AND domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$alias_list = array(); // empty it, repopulated again below
|
||||
foreach($orig_alias_list as $alias) {
|
||||
if(strtolower($alias) == strtolower($fAddress)) {
|
||||
// mailbox address is dropped if they don't have special_alias_control enabled, and/or not a global-admin
|
||||
}
|
||||
else {
|
||||
$alias_list[] = $alias;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$table_alias = table_by_key('alias');
|
||||
$alias_list = array();
|
||||
$orig_alias_list = array();
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fAddress' AND domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$tGoto = $row['goto'];
|
||||
$orig_alias_list = explode(',', $tGoto);
|
||||
$alias_list = $orig_alias_list;
|
||||
//. if we are not a global admin, and special_alias_control is NO, hide the alias that's the mailbox name.
|
||||
if($CONF['special_alias_control'] == 'NO' && !authentication_has_role('global-admin')) {
|
||||
|
||||
/* Has a mailbox as well? Remove the address from $tGoto in order to edit just the real aliases */
|
||||
$result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fAddress' AND domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$alias_list = array(); // empty it, repopulated again below
|
||||
foreach($orig_alias_list as $alias) {
|
||||
if(strtolower($alias) == strtolower($fAddress)) {
|
||||
// mailbox address is dropped if they don't have special_alias_control enabled, and/or not a global-admin
|
||||
}
|
||||
else {
|
||||
$alias_list[] = $alias;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
die("Invalid alias");
|
||||
die("Invalid alias");
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
$pEdit_alias_goto = $PALANG['pEdit_alias_goto'];
|
||||
$pEdit_alias_goto = $PALANG['pEdit_alias_goto'];
|
||||
|
||||
if (isset ($_POST['fGoto'])) $fGoto = escape_string ($_POST['fGoto']);
|
||||
$fGoto = strtolower ($fGoto);
|
||||
|
||||
if (isset ($_POST['fGoto'])) $fGoto = escape_string ($_POST['fGoto']);
|
||||
$fGoto = strtolower ($fGoto);
|
||||
if (!check_alias_owner ($SESSID_USERNAME, $fAddress))
|
||||
{
|
||||
$error = 1;
|
||||
$tGoto = $fGoto;
|
||||
$tMessage = $PALANG['pEdit_alias_result_error'];
|
||||
}
|
||||
|
||||
if (!check_alias_owner ($SESSID_USERNAME, $fAddress))
|
||||
{
|
||||
$error = 1;
|
||||
$tGoto = $fGoto;
|
||||
$tMessage = $PALANG['pEdit_alias_result_error'];
|
||||
}
|
||||
$goto = preg_replace ('/\\\r\\\n/', ',', $fGoto);
|
||||
$goto = preg_replace ('/\r\n/', ',', $goto);
|
||||
$goto = preg_replace ('/[\s]+/i', '', $goto);
|
||||
$goto = preg_replace ('/,*$|^,*/', '', $goto);
|
||||
$goto = preg_replace ('/,,*/', ',', $goto);
|
||||
|
||||
$goto = preg_replace ('/\\\r\\\n/', ',', $fGoto);
|
||||
$goto = preg_replace ('/\r\n/', ',', $goto);
|
||||
$goto = preg_replace ('/[\s]+/i', '', $goto);
|
||||
$goto = preg_replace ('/,*$|^,*/', '', $goto);
|
||||
$goto = preg_replace ('/,,*/', ',', $goto);
|
||||
if (empty ($goto) && !authentication_has_role('global-admin'))
|
||||
{
|
||||
$error = 1;
|
||||
$tGoto = $_POST['fGoto'];
|
||||
$tMessage = $PALANG['pEdit_alias_goto_text_error1'];
|
||||
}
|
||||
|
||||
if (empty ($goto) && !authentication_has_role('global-admin'))
|
||||
{
|
||||
$error = 1;
|
||||
$tGoto = $_POST['fGoto'];
|
||||
$tMessage = $PALANG['pEdit_alias_goto_text_error1'];
|
||||
}
|
||||
$new_aliases = array();
|
||||
if ($error != 1)
|
||||
{
|
||||
$new_aliases = explode(',', $goto);
|
||||
}
|
||||
$new_aliases = array_unique($new_aliases);
|
||||
|
||||
$new_aliases = array();
|
||||
if ($error != 1)
|
||||
{
|
||||
$new_aliases = explode(',', $goto);
|
||||
}
|
||||
$new_aliases = array_unique($new_aliases);
|
||||
foreach($new_aliases as $address) {
|
||||
if (in_array($address, $CONF['default_aliases'])) continue;
|
||||
if (empty($address)) continue; # TODO: should never happen - remove after 2.2 release
|
||||
if (!check_email($address))
|
||||
{
|
||||
$error = 1;
|
||||
$tGoto = $goto;
|
||||
$tMessage = $PALANG['pEdit_alias_goto_text_error2'] . "$address</span>";
|
||||
}
|
||||
}
|
||||
|
||||
$result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fAddress' AND domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
if($CONF['alias_control_admin'] == 'NO' && !authentication_has_role('global-admin')) {
|
||||
// if original record had a mailbox alias, so ensure the updated one does too.
|
||||
if(in_array($orig_alias_list, $fAddress)) {
|
||||
$new_aliases[] = $fAddress;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($new_aliases as $address) {
|
||||
if (in_array($address, $CONF['default_aliases'])) continue;
|
||||
if (empty($address)) continue; # TODO: should never happen - remove after 2.2 release
|
||||
if (!check_email($address))
|
||||
{
|
||||
$error = 1;
|
||||
$tGoto = $goto;
|
||||
$tMessage = $PALANG['pEdit_alias_goto_text_error2'] . "$address</span>";
|
||||
}
|
||||
}
|
||||
}
|
||||
// duplicates suck, mmkay..
|
||||
$new_aliases = array_unique($new_aliases);
|
||||
|
||||
$result = db_query ("SELECT * FROM $table_mailbox WHERE username='$fAddress' AND domain='$fDomain'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
if($CONF['alias_control_admin'] == 'NO' && !authentication_has_role('global-admin')) {
|
||||
// if original record had a mailbox alias, so ensure the updated one does too.
|
||||
if(in_array($orig_alias_list, $fAddress)) {
|
||||
$new_aliases[] = $fAddress;
|
||||
}
|
||||
}
|
||||
}
|
||||
// duplicates suck, mmkay..
|
||||
$new_aliases = array_unique($new_aliases);
|
||||
$goto = implode(',', $new_aliases);
|
||||
|
||||
$goto = implode(',', $new_aliases);
|
||||
if ($error != 1)
|
||||
{
|
||||
$goto = escape_string($goto);
|
||||
$result = db_query ("UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fAddress' AND domain='$fDomain'");
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$tMessage = $PALANG['pEdit_alias_result_error'];
|
||||
}
|
||||
else
|
||||
{
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'edit_alias', "$fAddress -> $goto");
|
||||
|
||||
if ($error != 1)
|
||||
{
|
||||
$goto = escape_string($goto);
|
||||
$result = db_query ("UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fAddress' AND domain='$fDomain'");
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$tMessage = $PALANG['pEdit_alias_result_error'];
|
||||
}
|
||||
else
|
||||
{
|
||||
db_log ($SESSID_USERNAME, $fDomain, 'edit_alias', "$fAddress -> $goto");
|
||||
header ("Location: list-virtual.php?domain=$fDomain");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
header ("Location: list-virtual.php?domain=$fDomain");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$fAddress = htmlentities($fAddress, ENT_QUOTES);
|
||||
$fDomain = htmlentities($fDomain, ENT_QUOTES);
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/edit-alias.php");
|
||||
include ("templates/footer.php");
|
||||
|
||||
$array = preg_split ('/,/', $tGoto);
|
||||
// TOCHECK
|
||||
$array = $alias_list;
|
||||
|
||||
$smarty->assign ('fAddress', $fAddress);
|
||||
$smarty->assign ('array', $array);
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'edit-alias');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
@@ -113,10 +113,18 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/admin_edit-domain.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('domain', $domain);
|
||||
$smarty->assign ('tDescription', htmlspecialchars($tDescription, ENT_QUOTES));
|
||||
$smarty->assign ('tAliases', $tAliases);
|
||||
$smarty->assign ('tMailboxes', $tMailboxes);
|
||||
$smarty->assign ('tMaxquota', $tMaxquota);
|
||||
$smarty->assign ('select_options', select_options ($CONF ['transport_options'], array ($tTransport)));
|
||||
if ($tBackupmx) $smarty->assign ('tBackupmx', ' checked="checked"');
|
||||
if ($tActive) $smarty->assign ('tActive', ' checked="checked"');
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'admin_edit-domain');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
|
@@ -175,9 +175,18 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/edit-mailbox.php");
|
||||
include ("templates/footer.php");
|
||||
$smarty->assign ('fUsername', $fUsername);
|
||||
$smarty->assign ('fPassword', $user_details ['password']);
|
||||
//$smarty->assign ('pEdit_mailbox_username_text', $pEdit_mailbox_username_text);
|
||||
$smarty->assign ('pEdit_mailbox_password_text', $pEdit_mailbox_password_text);
|
||||
$smarty->assign ('tName', htmlspecialchars ($tName,ENT_QUOTES));
|
||||
$smarty->assign ('pEdit_mailbox_name_text', $pEdit_mailbox_name_text);
|
||||
$smarty->assign ('tMaxquota', $tMaxquota);
|
||||
$smarty->assign ('tQuota', $tQuota);
|
||||
$smarty->assign ('pEdit_mailbox_quota_text', $pEdit_mailbox_quota_text);
|
||||
if ($tActive) $smarty->assign ('tActive', ' checked="checked"');
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'edit-mailbox');
|
||||
$smarty->display ('index.tpl');
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
@@ -1,207 +1,222 @@
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* File: edit-vacation.php
|
||||
* Responsible for allowing users to update their vacation status.
|
||||
*
|
||||
* Template File: edit-vacation.php
|
||||
*
|
||||
* Template Variables:
|
||||
*
|
||||
* tUseremail
|
||||
* tMessage
|
||||
* tSubject
|
||||
* tBody
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
* fUsername
|
||||
* fDomain
|
||||
* fCanceltarget
|
||||
* fChange
|
||||
* fBack
|
||||
* fQuota
|
||||
* fActive
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
if($CONF['vacation'] == 'NO') {
|
||||
header("Location: " . $CONF['postfix_admin_url'] . "/list-virtual.php");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
$tmp = preg_split ('/@/', $SESSID_USERNAME);
|
||||
$USERID_DOMAIN = $tmp[1];
|
||||
|
||||
// only allow admins to change someone else's 'stuff'
|
||||
if(authentication_has_role('admin')) {
|
||||
if (isset($_GET['username'])) $fUsername = escape_string ($_GET['username']);
|
||||
if (isset($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
|
||||
}
|
||||
else {
|
||||
$fUsername = $SESSID_USERNAME;
|
||||
$fDomain = $USERID_DOMAIN;
|
||||
}
|
||||
|
||||
$vacation_domain = $CONF['vacation_domain'];
|
||||
$vacation_goto = preg_replace('/@/', '#', $fUsername);
|
||||
$vacation_goto = $vacation_goto . '@' . $vacation_domain;
|
||||
|
||||
$fCanceltarget = $CONF['postfix_admin_url'] . "/list-virtual.php?domain=$fDomain";
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
|
||||
$result = db_query("SELECT * FROM $table_vacation WHERE email='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array($result['result']);
|
||||
$tMessage = '';
|
||||
$tSubject = $row['subject'];
|
||||
$tBody = $row['body'];
|
||||
}
|
||||
|
||||
$tUseremail = $fUsername;
|
||||
$tDomain = $fDomain;
|
||||
if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); }
|
||||
if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); }
|
||||
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
|
||||
$tSubject = safepost('fSubject');
|
||||
$fSubject = escape_string ($tSubject);
|
||||
$tBody = safepost('fBody');
|
||||
$fBody = escape_string ($tBody);
|
||||
$fChange = escape_string (safepost('fChange'));
|
||||
$fBack = escape_string (safepost('fBack'));
|
||||
|
||||
if(authentication_has_role('admin') && isset($_GET['domain'])) {
|
||||
$fDomain = escape_string ($_GET['domain']);
|
||||
}
|
||||
else {
|
||||
$fDomain = $USERID_DOMAIN;
|
||||
}
|
||||
if(authentication_has_role('admin') && isset ($_GET['username'])) {
|
||||
$fUsername = escape_string($_GET['username']);
|
||||
}
|
||||
else {
|
||||
$fUsername = authentication_get_username();
|
||||
}
|
||||
|
||||
$tUseremail = $fUsername;
|
||||
if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); }
|
||||
if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); }
|
||||
|
||||
//if change, remove old one, then perhaps set new one
|
||||
if (!empty ($fBack) || !empty ($fChange))
|
||||
{
|
||||
//if we find an existing vacation entry, disable it
|
||||
$result = db_query("SELECT * FROM $table_vacation WHERE email='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$db_false = db_get_boolean(false);
|
||||
// retain vacation message if possible - i.e disable vacation away-ness.
|
||||
$result = db_query ("UPDATE $table_vacation SET active = '$db_false' WHERE email='$fUsername'");
|
||||
$result = db_query("DELETE FROM $table_vacation_notification WHERE on_vacation='$fUsername'");
|
||||
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$goto = $row['goto'];
|
||||
//only one of these will do something, first handles address at beginning and middle, second at end
|
||||
$goto= preg_replace ( "/$vacation_goto,/", '', $goto);
|
||||
$goto= preg_replace ( "/,$vacation_goto/", '', $goto);
|
||||
$goto= preg_replace ( "/$vacation_goto/", '', $goto);
|
||||
if($goto == '') {
|
||||
$sql = "DELETE FROM $table_alias WHERE address = '$fUsername'";
|
||||
}
|
||||
else {
|
||||
$sql = "UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fUsername'";
|
||||
}
|
||||
$result = db_query($sql);
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Set the vacation data for $fUsername
|
||||
if (!empty ($fChange))
|
||||
{
|
||||
$goto = '';
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$goto = $row['goto'];
|
||||
}
|
||||
$Active = db_get_boolean(True);
|
||||
$notActive = db_get_boolean(False);
|
||||
// I don't think we need to care if the vacation entry is inactive or active.. as long as we don't try and
|
||||
// insert a duplicate
|
||||
$result = db_query("SELECT * FROM $table_vacation WHERE email = '$fUsername'");
|
||||
if($result['rows'] == 1) {
|
||||
$result = db_query("UPDATE $table_vacation SET active = '$Active', subject = '$fSubject', body = '$fBody', created = NOW() WHERE email = '$fUsername'");
|
||||
}
|
||||
else {
|
||||
$result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active) VALUES ('$fUsername','$fSubject','$fBody','$fDomain',NOW(),'$Active')");
|
||||
}
|
||||
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
if($goto == '') {
|
||||
$goto = $vacation_goto;
|
||||
$sql = "INSERT INTO $table_alias (goto, address, domain, modified) VALUES ('$goto', '$fUsername', '$fDomain', NOW())";
|
||||
}
|
||||
else {
|
||||
$goto = $goto . "," . $vacation_goto;
|
||||
$sql = "UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fUsername'";
|
||||
}
|
||||
$result = db_query ($sql);
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($error == 0) {
|
||||
if(!empty ($fBack)) {
|
||||
$tMessage = $PALANG['pVacation_result_removed'];
|
||||
}
|
||||
if(!empty($fChange)) {
|
||||
$tMessage= $PALANG['pVacation_result_added'];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$tMessage = $PALANG['pVacation_result_error'];
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/edit-vacation.php");
|
||||
include ("templates/footer.php");
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
<?php
|
||||
/**
|
||||
* Postfix Admin
|
||||
*
|
||||
* LICENSE
|
||||
* This source file is subject to the GPL license that is bundled with
|
||||
* this package in the file LICENSE.TXT.
|
||||
*
|
||||
* Further details on the project are available at :
|
||||
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||
*
|
||||
* @version $Id$
|
||||
* @license GNU GPL v2 or later.
|
||||
*
|
||||
* File: edit-vacation.php
|
||||
* Responsible for allowing users to update their vacation status.
|
||||
*
|
||||
* Template File: edit-vacation.php
|
||||
*
|
||||
* Template Variables:
|
||||
*
|
||||
* tUseremail
|
||||
* tMessage
|
||||
* tSubject
|
||||
* tBody
|
||||
*
|
||||
* Form POST \ GET Variables:
|
||||
*
|
||||
* fUsername
|
||||
* fDomain
|
||||
* fCanceltarget
|
||||
* fChange
|
||||
* fBack
|
||||
* fQuota
|
||||
* fActive
|
||||
*/
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
if($CONF['vacation'] == 'NO') {
|
||||
header("Location: " . $CONF['postfix_admin_url'] . "/list-virtual.php");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
$tmp = preg_split ('/@/', $SESSID_USERNAME);
|
||||
$USERID_DOMAIN = $tmp[1];
|
||||
|
||||
// only allow admins to change someone else's 'stuff'
|
||||
if(authentication_has_role('admin')) {
|
||||
if (isset($_GET['username'])) $fUsername = escape_string ($_GET['username']);
|
||||
if (isset($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
|
||||
}
|
||||
else {
|
||||
$fUsername = $SESSID_USERNAME;
|
||||
$fDomain = $USERID_DOMAIN;
|
||||
}
|
||||
|
||||
$vacation_domain = $CONF['vacation_domain'];
|
||||
$vacation_goto = preg_replace('/@/', '#', $fUsername);
|
||||
$vacation_goto = $vacation_goto . '@' . $vacation_domain;
|
||||
|
||||
$fCanceltarget = $CONF['postfix_admin_url'] . "/list-virtual.php?domain=$fDomain";
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
|
||||
$result = db_query("SELECT * FROM $table_vacation WHERE email='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array($result['result']);
|
||||
$tMessage = '';
|
||||
$tSubject = $row['subject'];
|
||||
$tBody = $row['body'];
|
||||
$tActiveFrom = $row['activefrom'];
|
||||
$tActiveUntil = $row['activeuntil'];
|
||||
}
|
||||
|
||||
$tUseremail = $fUsername;
|
||||
$tDomain = $fDomain;
|
||||
if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); }
|
||||
if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); }
|
||||
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
{
|
||||
|
||||
$tSubject = safepost('fSubject');
|
||||
$fSubject = escape_string ($tSubject);
|
||||
$tBody = safepost('fBody');
|
||||
// $tActiveFrom = safepost('activefrom').' 00:00:01';
|
||||
// $tActiveUntil = safepost('activeuntil').' 23:59:59';
|
||||
$tActiveFrom = date ("Y-m-d 00:00:00", strtotime (safepost('activefrom')));
|
||||
$tActiveUntil = date ("Y-m-d 23:59:59", strtotime (safepost('activeuntil')));
|
||||
$fBody = escape_string ($tBody);
|
||||
$fChange = escape_string (safepost('fChange'));
|
||||
$fBack = escape_string (safepost('fBack'));
|
||||
if(authentication_has_role('admin') && isset($_GET['domain'])) {
|
||||
$fDomain = escape_string ($_GET['domain']);
|
||||
}
|
||||
else {
|
||||
$fDomain = $USERID_DOMAIN;
|
||||
}
|
||||
if(authentication_has_role('admin') && isset ($_GET['username'])) {
|
||||
$fUsername = escape_string($_GET['username']);
|
||||
}
|
||||
else {
|
||||
$fUsername = authentication_get_username();
|
||||
}
|
||||
|
||||
$tUseremail = $fUsername;
|
||||
if ($tSubject == '') { $tSubject = html_entity_decode($PALANG['pUsersVacation_subject_text'], ENT_QUOTES, 'UTF-8'); }
|
||||
if ($tBody == '') { $tBody = html_entity_decode($PALANG['pUsersVacation_body_text'], ENT_QUOTES, 'UTF-8'); }
|
||||
|
||||
//if change, remove old one, then perhaps set new one
|
||||
if (!empty ($fBack) || !empty ($fChange))
|
||||
{
|
||||
//if we find an existing vacation entry, disable it
|
||||
$result = db_query("SELECT * FROM $table_vacation WHERE email='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$db_false = db_get_boolean(false);
|
||||
// retain vacation message if possible - i.e disable vacation away-ness.
|
||||
$result = db_query ("UPDATE $table_vacation SET active = '$db_false' WHERE email='$fUsername'");
|
||||
$result = db_query("DELETE FROM $table_vacation_notification WHERE on_vacation='$fUsername'");
|
||||
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$goto = $row['goto'];
|
||||
//only one of these will do something, first handles address at beginning and middle, second at end
|
||||
$goto= preg_replace ( "/$vacation_goto,/", '', $goto);
|
||||
$goto= preg_replace ( "/,$vacation_goto/", '', $goto);
|
||||
$goto= preg_replace ( "/$vacation_goto/", '', $goto);
|
||||
if($goto == '') {
|
||||
$sql = "DELETE FROM $table_alias WHERE address = '$fUsername'";
|
||||
}
|
||||
else {
|
||||
$sql = "UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fUsername'";
|
||||
}
|
||||
$result = db_query($sql);
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Set the vacation data for $fUsername
|
||||
if (!empty ($fChange))
|
||||
{
|
||||
$goto = '';
|
||||
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
|
||||
if ($result['rows'] == 1)
|
||||
{
|
||||
$row = db_array ($result['result']);
|
||||
$goto = $row['goto'];
|
||||
}
|
||||
$Active = db_get_boolean(True);
|
||||
$notActive = db_get_boolean(False);
|
||||
// I don't think we need to care if the vacation entry is inactive or active.. as long as we don't try and
|
||||
// insert a duplicate
|
||||
$result = db_query("SELECT * FROM $table_vacation WHERE email = '$fUsername'");
|
||||
if($result['rows'] == 1) {
|
||||
$result = db_query("UPDATE $table_vacation SET active = '$Active', subject = '$fSubject', body = '$fBody', created = NOW(), activefrom = '$tActiveFrom', activeuntil = '$tActiveUntil' WHERE email = '$fUsername'");
|
||||
}
|
||||
else {
|
||||
$result = db_query ("INSERT INTO $table_vacation (email,subject,body,domain,created,active, activefrom, activeuntil) VALUES ('$fUsername','$fSubject','$fBody','$fDomain',NOW(),$Active, '$tActiveFrom', '$tActiveUntil')");
|
||||
}
|
||||
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
if($goto == '') {
|
||||
$goto = $vacation_goto;
|
||||
$sql = "INSERT INTO $table_alias (goto, address, domain, modified, activefrom, activeuntil) VALUES ('$goto', '$fUsername', '$fDomain', NOW(), '$tActiveFrom', '$tActiveUntil')";
|
||||
}
|
||||
else {
|
||||
$goto = $goto . "," . $vacation_goto;
|
||||
$sql = "UPDATE $table_alias SET goto='$goto',modified=NOW() WHERE address='$fUsername'";
|
||||
}
|
||||
$result = db_query ($sql);
|
||||
if ($result['rows'] != 1)
|
||||
{
|
||||
$error = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($error == 0) {
|
||||
if(!empty ($fBack)) {
|
||||
$tMessage = $PALANG['pVacation_result_removed'];
|
||||
}
|
||||
if(!empty($fChange)) {
|
||||
$tMessage= $PALANG['pVacation_result_added'];
|
||||
}
|
||||
}
|
||||
else {
|
||||
$tMessage = $PALANG['pVacation_result_error'];
|
||||
}
|
||||
if (empty ($tActiveFrom))
|
||||
$tActiveFrom = date ("Y-m-d");
|
||||
if (empty ($tActiveUntil))
|
||||
$tActiveUntil = date ("Y-m-d");
|
||||
|
||||
$smarty->assign ('tUseremail', $tUseremail);
|
||||
$smarty->assign ('tSubject', htmlentities(stripslashes($tSubject), ENT_QUOTES, 'UTF-8'));
|
||||
$smarty->assign ('tBody', htmlentities(stripslashes($tBody), ENT_QUOTES , 'UTF-8'));
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('tActiveFrom', date ("d.m.Y", strtotime ($tActiveFrom)));
|
||||
$smarty->assign ('tActiveUntil', date ("d.m.Y", strtotime ($tActiveUntil)));
|
||||
$smarty->assign ('fCanceltarget', $fCanceltarget);
|
||||
$smarty->assign ('smarty_template', 'edit-vacation');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
140
fetchmail.php
140
fetchmail.php
@@ -242,11 +242,143 @@ function _inp_bool($val){
|
||||
function _inp_password($val){
|
||||
return base64_encode($val);
|
||||
}
|
||||
//*****
|
||||
$headers=array();
|
||||
foreach(array_keys($fm_struct) as $row){
|
||||
list($editible,$view,$type)=$fm_struct[$row];
|
||||
$title = $PALANG['pFetchmail_field_' . $row];
|
||||
$comment = $PALANG['pFetchmail_desc_' . $row];
|
||||
if ($view){
|
||||
$headers[]=$title;
|
||||
// $headers[]=array($editible, $view, $type, $title, $comment);
|
||||
}
|
||||
}
|
||||
function fetchmail_edit_row($data=array())
|
||||
{
|
||||
global $fm_struct,$fm_defaults,$PALANG;
|
||||
$id = $data["id"];
|
||||
$_id = $data["id"] * 100 + 1;
|
||||
$ret = "<table>";
|
||||
$ret .= '<tr><td colspan="3"><h3>'.$PALANG['pMenu_fetchmail'] . '</h3></td></tr>';
|
||||
# TODO: $formvars possibly contains db-specific boolean values
|
||||
# TODO: no problems with MySQL, to be tested with PgSQL
|
||||
# TODO: undefined values may also occour
|
||||
foreach($fm_struct as $key=>$struct){
|
||||
list($editible,$view,$type)=$struct;
|
||||
$title = $PALANG['pFetchmail_field_' . $key];
|
||||
$comment = $PALANG['pFetchmail_desc_' . $key];
|
||||
if ($editible){
|
||||
$ret.="<tr><td align='left' valign='top'><label for='${_id}' style='width:20em;'>${title}: </label></td>";
|
||||
$ret.="<td align=left style='padding-left:.25em;padding-right:.25em;background-color:white;'>";
|
||||
$func="_edit_".$type;
|
||||
if (! function_exists($func))
|
||||
$func="_edit_text";
|
||||
$val=isset($data[$key])
|
||||
?$data[$key]
|
||||
:(! is_array($fm_defaults[$key])
|
||||
?$fm_defaults[$key]
|
||||
:''
|
||||
);
|
||||
$fm_defaults_key = ""; if (isset($fm_defaults[$key])) $fm_defaults_key = $fm_defaults[$key];
|
||||
$ret.=$func($_id++,$key,$fm_defaults_key,$val);
|
||||
$ret.="</td><td align=left valign=top><i> ${comment}</i></td></tr>\n";
|
||||
}
|
||||
elseif($view){
|
||||
$func="_view_".$type;
|
||||
$val=isset($data[$key])
|
||||
?(function_exists($func)
|
||||
?$func($data[$key])
|
||||
:nl2br($data[$key])
|
||||
)
|
||||
:"--x--";
|
||||
$ret.="<tr><td align=left valign=top>${title}: </label></td>";
|
||||
$ret.="<td align=left valign=top style='padding-left:.25em;padding-right:.25em;background-color:white;'>".$val;
|
||||
$ret.="</td><td align=left valign=top><i> ${comment}</i></td></tr>\n";
|
||||
}
|
||||
}
|
||||
$ret.="<tr><td align=center colspan=3>
|
||||
<input type=submit name=save value='" . $PALANG['save'] . "'>
|
||||
<input type=submit name=cancel value='" . $PALANG['cancel'] . "'>
|
||||
";
|
||||
if ($id){
|
||||
$ret.="<input type=hidden name=edit value='${id}'>";
|
||||
}
|
||||
$ret.="</td></tr>\n";
|
||||
$ret.="</table>\n";
|
||||
$ret.="<p />\n";
|
||||
$ret.="</form>\n";
|
||||
$ret.="</div>\n";
|
||||
return $ret;
|
||||
}
|
||||
function _edit_text($id,$key,$def_vals,$val=""){
|
||||
$val=htmlspecialchars($val);
|
||||
return "<input type=text name=${key} id=${id} value='${val}'>";
|
||||
}
|
||||
|
||||
include ("./templates/header.php");
|
||||
include ("./templates/menu.php");
|
||||
include ("./templates/fetchmail.php");
|
||||
include ("./templates/footer.php");
|
||||
function _edit_password($id,$key,$def_vals,$val=""){
|
||||
$val=preg_replace("{.}","*",$val);
|
||||
return "<input type=password name=${key} id=${id} value='${val}'>";
|
||||
}
|
||||
|
||||
function _edit_num($id,$key,$def_vals,$val=""){
|
||||
$val=(int)($val);
|
||||
return "<input type=text name=${key} id=${id} value='${val}'>";
|
||||
}
|
||||
|
||||
function _edit_bool($id,$key,$def_vals,$val=""){
|
||||
$ret="<input type=checkbox name=${key} id=${id}";
|
||||
if ($val)
|
||||
$ret.=" checked";
|
||||
$ret.=">";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function _edit_longtext($id,$key,$def_vals,$val=""){
|
||||
$val=htmlspecialchars($val);
|
||||
return "<textarea name=${key} id=${id} rows=2 style='width:20em;'>${val}</textarea>";
|
||||
}
|
||||
|
||||
function _edit_enum($id,$key,$def_vals,$val=""){
|
||||
$ret="<select name=${key} id=${id}>";
|
||||
foreach($def_vals as $opt_val){
|
||||
$ret.="<option";
|
||||
if ($opt_val==$val)
|
||||
$ret.=" selected";
|
||||
$ret.=">${opt_val}</option>\n";
|
||||
}
|
||||
$ret.="</select>\n";
|
||||
return $ret;
|
||||
}
|
||||
|
||||
function _listview_id($val){
|
||||
return "<a href='?edit=${val}'> ${val} </a>";
|
||||
}
|
||||
|
||||
function _listview_bool($val){
|
||||
return $val?"+":"";
|
||||
}
|
||||
|
||||
function _listview_longtext($val){
|
||||
return strlen($val)?"Text - ".strlen($val)." chars":"--x--";
|
||||
}
|
||||
|
||||
function _listview_text($val){
|
||||
return sizeof($val)?$val:"--x--";
|
||||
}
|
||||
|
||||
function _listview_password($val){
|
||||
return preg_replace("{.}","*",$val);
|
||||
}
|
||||
|
||||
$smarty->assign ('edit', $edit);
|
||||
$smarty->assign ('new', $new);
|
||||
$smarty->assign ('fetchmail_edit_row', fetchmail_edit_row($formvars));
|
||||
$smarty->assign ('headers', $headers);
|
||||
$smarty->assign ('user_domains', $user_domains);
|
||||
$smarty->assign ('tFmail', $tFmail);
|
||||
|
||||
$smarty->assign ('smarty_template', 'fetchmail');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
@@ -16,7 +16,7 @@
|
||||
* Contains re-usable code.
|
||||
*/
|
||||
|
||||
$version = '2.3';
|
||||
$version = '2.4 develop';
|
||||
|
||||
/**
|
||||
* check_session
|
||||
@@ -250,7 +250,7 @@ function check_domain ($domain)
|
||||
flash_error("emailcheck_resolve_domain is enabled, but function (checkdnsrr) missing!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -425,18 +425,19 @@ function get_domain_properties ($domain)
|
||||
global $table_alias, $table_mailbox, $table_domain;
|
||||
$list = array ();
|
||||
|
||||
$result = db_query ("SELECT COUNT(*) FROM $table_alias WHERE domain='$domain'");
|
||||
$row = db_row ($result['result']);
|
||||
$list['alias_count'] = $row[0];
|
||||
$result = db_query ("SELECT COUNT(*) FROM $table_alias WHERE domain='$domain'");
|
||||
|
||||
$row = db_row ($result['result']);
|
||||
$list['alias_count'] = $row[0];
|
||||
|
||||
$result = db_query ("SELECT COUNT(*) FROM $table_mailbox WHERE domain='$domain'");
|
||||
$row = db_row ($result['result']);
|
||||
$list['mailbox_count'] = $row[0];
|
||||
|
||||
$result = db_query ("SELECT SUM(quota) FROM $table_mailbox WHERE domain='$domain'");
|
||||
$row = db_row ($result['result']);
|
||||
$list['quota_sum'] = $row[0];
|
||||
$list['alias_count'] = $list['alias_count'] - $list['mailbox_count'];
|
||||
$result = db_query ("SELECT SUM(quota) FROM $table_mailbox WHERE domain='$domain'");
|
||||
$row = db_row ($result['result']);
|
||||
$list['quota_sum'] = $row[0];
|
||||
$list['alias_count'] = $list['alias_count'] - $list['mailbox_count'];
|
||||
|
||||
$list['alias_pgindex']=array ();
|
||||
$list['mbox_pgindex']=array ();
|
||||
@@ -449,32 +450,32 @@ function get_domain_properties ($domain)
|
||||
$idxlabel="";
|
||||
$list['alias_pgindex_count'] = 0;
|
||||
|
||||
if ( $list['alias_count'] > $page_size )
|
||||
{
|
||||
while ( $current < $list['alias_count'] )
|
||||
{
|
||||
$limitSql=('pgsql'==$CONF['database_type']) ? "1 OFFSET $current" : "$current, 1";
|
||||
$query = "SELECT $table_alias.address
|
||||
FROM $table_alias
|
||||
LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username
|
||||
WHERE ($table_alias.domain='$domain' AND $table_mailbox.maildir IS NULL)
|
||||
ORDER BY $table_alias.address LIMIT $limitSql";
|
||||
$result = db_query ("$query");
|
||||
$row = db_array ($result['result']);
|
||||
$tmpstr = $row['address'];
|
||||
//get first 2 chars
|
||||
$idxlabel = $tmpstr[0] . $tmpstr[1] . "-";
|
||||
($current + $page_size - 1 <= $list['alias_count']) ? $current = $current + $page_size - 1 : $current = $list['alias_count'] - 1;
|
||||
$limitSql=('pgsql'==$CONF['database_type']) ? "1 OFFSET $current" : "$current, 1";
|
||||
$query = "SELECT $table_alias.address
|
||||
FROM $table_alias
|
||||
LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username
|
||||
WHERE ($table_alias.domain='$domain' AND $table_mailbox.maildir IS NULL)
|
||||
ORDER BY $table_alias.address LIMIT $limitSql";
|
||||
$result = db_query ("$query");
|
||||
$row = db_array ($result['result']);
|
||||
$tmpstr = $row['address'];
|
||||
$idxlabel = $idxlabel . $tmpstr[0] . $tmpstr[1];
|
||||
if ( $list['alias_count'] > $page_size )
|
||||
{
|
||||
while ( $current < $list['alias_count'] )
|
||||
{
|
||||
$limitSql=('pgsql'==$CONF['database_type']) ? "1 OFFSET $current" : "$current, 1";
|
||||
$query = "SELECT $table_alias.address
|
||||
FROM $table_alias
|
||||
LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username
|
||||
WHERE ($table_alias.domain='$domain' AND $table_mailbox.maildir IS NULL)
|
||||
ORDER BY $table_alias.address LIMIT $limitSql";
|
||||
$result = db_query ("$query");
|
||||
$row = db_array ($result['result']);
|
||||
$tmpstr = $row['address'];
|
||||
//get first 2 chars
|
||||
$idxlabel = $tmpstr[0] . $tmpstr[1] . "-";
|
||||
($current + $page_size - 1 <= $list['alias_count']) ? $current = $current + $page_size - 1 : $current = $list['alias_count'] - 1;
|
||||
$limitSql=('pgsql'==$CONF['database_type']) ? "1 OFFSET $current" : "$current, 1";
|
||||
$query = "SELECT $table_alias.address
|
||||
FROM $table_alias
|
||||
LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username
|
||||
WHERE ($table_alias.domain='$domain' AND $table_mailbox.maildir IS NULL)
|
||||
ORDER BY $table_alias.address LIMIT $limitSql";
|
||||
$result = db_query ("$query");
|
||||
$row = db_array ($result['result']);
|
||||
$tmpstr = $row['address'];
|
||||
$idxlabel = $idxlabel . $tmpstr[0] . $tmpstr[1];
|
||||
|
||||
$current = $current + 1;
|
||||
|
||||
@@ -1167,7 +1168,7 @@ function pacrypt ($pw, $pw_db="")
|
||||
$l = db_row($res["result"]);
|
||||
$password = $l[0];
|
||||
}
|
||||
|
||||
|
||||
elseif ($CONF['encrypt'] == 'authlib') {
|
||||
$flavor = $CONF['authlib_default_flavor'];
|
||||
$salt = substr(create_salt(), 0, 2); # courier-authlib supports only two-character salts
|
||||
@@ -1177,20 +1178,20 @@ function pacrypt ($pw, $pw_db="")
|
||||
$flavor = $result[1];
|
||||
$salt = substr($result[2], 0, 2);
|
||||
}
|
||||
|
||||
|
||||
if(stripos($flavor, 'md5raw') === 0) {
|
||||
$password = '{' . $flavor . '}' . md5($pw);
|
||||
} elseif(stripos($flavor, 'md5') === 0) {
|
||||
$password = '{' . $flavor . '}' . base64_encode(md5($pw, TRUE));
|
||||
} elseif(stripos($flavor, 'crypt') === 0) {
|
||||
$password = '{' . $flavor . '}' . crypt($pw, $salt);
|
||||
} elseif(stripos($flavor, 'SHA') === 0) {
|
||||
$password = '{' . $flavor . '}' . base64_encode(sha1($pw, TRUE));
|
||||
} elseif(stripos($flavor, 'SHA') === 0) {
|
||||
$password = '{' . $flavor . '}' . base64_encode(sha1($pw, TRUE));
|
||||
} else {
|
||||
die("authlib_default_flavor '" . $flavor . "' unknown. Valid flavors are 'md5raw', 'md5', 'SHA' and 'crypt'");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
elseif (preg_match("/^dovecot:/", $CONF['encrypt'])) {
|
||||
$split_method = preg_split ('/:/', $CONF['encrypt']);
|
||||
$method = strtoupper($split_method[1]);
|
||||
@@ -1201,28 +1202,29 @@ function pacrypt ($pw, $pw_db="")
|
||||
|
||||
# Use proc_open call to avoid safe_mode problems and to prevent showing plain password in process table
|
||||
$spec = array(
|
||||
0 => array("pipe", "r"), // stdin
|
||||
1 => array("pipe", "w") // stdout
|
||||
);
|
||||
0 => array("pipe", "r"), // stdin
|
||||
1 => array("pipe", "w") // stdout
|
||||
);
|
||||
|
||||
$pipe = proc_open("$dovecotpw '-s' $method", $spec, $pipes);
|
||||
$pipe = proc_open("$dovecotpw '-s' $method", $spec, $pipes);
|
||||
|
||||
if (!$pipe) {
|
||||
die("can't proc_open $dovecotpw");
|
||||
} else {
|
||||
// use dovecot's stdin, it uses getpass() twice
|
||||
// Write pass in pipe stdin
|
||||
fwrite($pipes[0], $pw . "\n", 1+strlen($pw)); usleep(1000);
|
||||
fwrite($pipes[0], $pw . "\n", 1+strlen($pw));
|
||||
fclose($pipes[0]);
|
||||
// Write pass in pipe stdin
|
||||
fwrite($pipes[0], $pw . "\n", 1+strlen($pw)); usleep(1000);
|
||||
fwrite($pipes[0], $pw . "\n", 1+strlen($pw));
|
||||
fclose($pipes[0]);
|
||||
|
||||
// Read hash from pipe stdout
|
||||
$password = fread($pipes[1], "200");
|
||||
fclose($pipes[1]);
|
||||
proc_close($pipe);
|
||||
// Read hash from pipe stdout
|
||||
$password = fread($pipes[1], "200");
|
||||
fclose($pipes[1]);
|
||||
proc_close($pipe);
|
||||
|
||||
if ( !preg_match('/^\{' . $method . '\}/', $password)) { die("can't encrypt password with dovecotpw"); }
|
||||
$password = trim(str_replace('{' . $method . '}', '', $password));
|
||||
unlink($tmpfile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1469,9 +1471,9 @@ function db_connect ($ignore_errors = 0)
|
||||
{
|
||||
if (function_exists ("pg_pconnect"))
|
||||
{
|
||||
if(!isset($CONF['database_port'])) {
|
||||
$CONF['database_port'] = '5432';
|
||||
}
|
||||
if(!isset($CONF['database_port'])) {
|
||||
$CONF['database_port'] = '5432';
|
||||
}
|
||||
$connect_string = "host=" . $CONF['database_host'] . " port=" . $CONF['database_port'] . " dbname=" . $CONF['database_name'] . " user=" . $CONF['database_user'] . " password=" . $CONF['database_password'];
|
||||
$link = @pg_pconnect ($connect_string) or $error_text .= ("<p />DEBUG INFORMATION:<br />Connect: failed to connect to database. $DEBUG_TEXT");
|
||||
if ($link) pg_set_client_encoding($link, 'UNICODE');
|
||||
@@ -1770,9 +1772,9 @@ function db_log ($username,$domain,$action,$data)
|
||||
* Call: db_in_clause (string field, array values)
|
||||
*/
|
||||
function db_in_clause($field, $values) {
|
||||
return " $field IN ('"
|
||||
. implode("','",escape_string(array_values($values)))
|
||||
. "') ";
|
||||
return " $field IN ('"
|
||||
. implode("','",escape_string(array_values($values)))
|
||||
. "') ";
|
||||
}
|
||||
|
||||
//
|
||||
@@ -2142,12 +2144,12 @@ function gen_show_status ($show_alias)
|
||||
{
|
||||
$stat_catchall = substr($g,strpos($g,"@"));
|
||||
$stat_delimiter = "";
|
||||
if (!empty($CONF['recipient_delimiter'])) {
|
||||
$delimiter = preg_quote($CONF['recipient_delimiter'], "/");
|
||||
$stat_delimiter = preg_replace('/' .$delimiter. '[^' .$delimiter. ']*@/', "@", $g);
|
||||
$stat_delimiter = "OR address = '$stat_delimiter'";
|
||||
}
|
||||
$stat_result = db_query ("SELECT address FROM $table_alias WHERE address = '$g' OR address = '$stat_catchall' $stat_delimiter");
|
||||
if (!empty($CONF['recipient_delimiter'])) {
|
||||
$delimiter = preg_quote($CONF['recipient_delimiter'], "/");
|
||||
$stat_delimiter = preg_replace('/' .$delimiter. '[^' .$delimiter. ']*@/', "@", $g);
|
||||
$stat_delimiter = "OR address = '$stat_delimiter'";
|
||||
}
|
||||
$stat_result = db_query ("SELECT address FROM $table_alias WHERE address = '$g' OR address = '$stat_catchall' $stat_delimiter");
|
||||
if ($stat_result['rows'] == 0)
|
||||
{
|
||||
$stat_ok = 0;
|
||||
@@ -2190,15 +2192,15 @@ function gen_show_status ($show_alias)
|
||||
// POP/IMAP CHECK
|
||||
if ( $CONF['show_popimap'] == 'YES' )
|
||||
{
|
||||
$stat_delimiter = "";
|
||||
if (!empty($CONF['recipient_delimiter'])) {
|
||||
$delimiter = preg_quote($CONF['recipient_delimiter'], "/");
|
||||
$stat_delimiter = preg_replace('/' .$delimiter. '[^' .$delimiter. '@]*@/', "@", $stat_goto);
|
||||
$stat_delimiter = ',' . $stat_delimiter;
|
||||
}
|
||||
$stat_delimiter = "";
|
||||
if (!empty($CONF['recipient_delimiter'])) {
|
||||
$delimiter = preg_quote($CONF['recipient_delimiter'], "/");
|
||||
$stat_delimiter = preg_replace('/' .$delimiter. '[^' .$delimiter. '@]*@/', "@", $stat_goto);
|
||||
$stat_delimiter = ',' . $stat_delimiter;
|
||||
}
|
||||
|
||||
//if the address passed in appears in its own goto field, its POP/IMAP
|
||||
if ( preg_match ('/,' . $show_alias . ',/', ',' . $stat_goto . $stat_delimiter . ',') )
|
||||
if ( preg_match ('/,' . $show_alias . ',/', ',' . $stat_goto . $stat_delimiter . ',') )
|
||||
{
|
||||
$stat_string .= "<span style='background-color:" . $CONF['show_popimap_color'] .
|
||||
"'>" . $CONF['show_status_text'] . "</span> ";
|
||||
|
@@ -186,6 +186,8 @@ $PALANG['pEdit_vacation_remove'] = 'Automatische Antwort abschalten';
|
||||
$PALANG['pVacation_result_error'] = '<span class="error_msg">Änderungen der automatischen Antwort konnten nicht gespeichert werden!</span>';
|
||||
$PALANG['pVacation_result_removed'] = 'Automatische Antwort wurde abgeschaltet!';
|
||||
$PALANG['pVacation_result_added'] = 'Automatische Antwort wurde aktiviert!';
|
||||
$PALANG['pUsersVacation_activefrom'] = 'Aktiv ab dem';
|
||||
$PALANG['pUsersVacation_activeuntil'] = 'Aktiv bis zum';
|
||||
|
||||
$PALANG['pViewlog_welcome'] = 'Zeigt die letzten 10 Aktionen für ';
|
||||
$PALANG['pViewlog_timestamp'] = 'Zeitpunkt';
|
||||
|
@@ -355,6 +355,8 @@ $PALANG['pUsersVacation_button_away'] = 'Going Away';
|
||||
$PALANG['pUsersVacation_button_back'] = 'Coming Back';
|
||||
$PALANG['pUsersVacation_result_error'] = '<span class="error_msg">Unable to update your auto response settings!</span>';
|
||||
$PALANG['pUsersVacation_result_success'] = 'Your auto response has been removed!';
|
||||
$PALANG['pUsersVacation_activefrom'] = 'Active from';
|
||||
$PALANG['pUsersVacation_activeuntil'] = 'Active until';
|
||||
|
||||
$PALANG['pCreate_dbLog_createmailbox'] = 'create mailbox';
|
||||
$PALANG['pCreate_dbLog_createalias'] = 'create alias';
|
||||
|
@@ -25,17 +25,24 @@ require_once("common.php");
|
||||
|
||||
authentication_require_role('global-admin');
|
||||
|
||||
$list_admins = list_admins();
|
||||
if ((is_array ($list_admins) and sizeof ($list_admins) > 0)) {
|
||||
for ($i = 0; $i < sizeof ($list_admins); $i++) {
|
||||
$admin_properties[$i] = get_admin_properties ($list_admins[$i]);
|
||||
}
|
||||
}
|
||||
$_active = array ($PALANG ['NO'], $PALANG ['YES']);
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/admin_list-admin.php");
|
||||
include ("templates/footer.php");
|
||||
$list_admins = list_admins();
|
||||
if ((is_array ($list_admins) and sizeof ($list_admins) > 0))
|
||||
{
|
||||
for ($i = 0; $i < sizeof ($list_admins); $i++)
|
||||
{
|
||||
$admin_properties[$i] = get_admin_properties ($list_admins[$i]);
|
||||
$admin_properties[$i] ['name'] = $list_admins[$i];
|
||||
if ($admin_properties [$i] ['domain_count'] == 'ALL')
|
||||
$admin_properties [$i] ['domain_count'] = $PALANG ['pAdminEdit_admin_super_admin'];
|
||||
$admin_properties [$i] ['active'] = $_active [$admin_properties [$i] ['active']];
|
||||
}
|
||||
}
|
||||
$smarty->assign ('admin_properties', $admin_properties);
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->assign ('smarty_template', 'admin_list-admin');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
|
@@ -30,6 +30,7 @@ require_once('common.php');
|
||||
authentication_require_role('admin');
|
||||
|
||||
if (authentication_has_role('global-admin')) {
|
||||
//if (authentication_has_role('admin')) {
|
||||
$list_admins = list_admins ();
|
||||
$is_superadmin = 1;
|
||||
$fUsername = safepost('fUsername', safeget('username')); # prefer POST over GET variable
|
||||
@@ -52,10 +53,10 @@ if (isset($admin_properties) && $admin_properties['domain_count'] == 'ALL') { #
|
||||
}
|
||||
|
||||
if ($list_all_domains == 1) {
|
||||
$where = " WHERE domain.domain != 'ALL' "; # TODO: the ALL dummy domain is annoying...
|
||||
$where = " WHERE domain.domain != 'ALL' "; # TODO: the ALL dummy domain is annoying...
|
||||
} else {
|
||||
$list_domains = escape_string($list_domains);
|
||||
$where = " WHERE domain.domain IN ('" . join("','", $list_domains) . "') ";
|
||||
$list_domains = escape_string($list_domains);
|
||||
$where = " WHERE domain.domain IN ('" . join("','", $list_domains) . "') ";
|
||||
}
|
||||
|
||||
# fetch domain data and number of mailboxes
|
||||
@@ -72,7 +73,6 @@ $query = "
|
||||
";
|
||||
$result = db_query($query);
|
||||
|
||||
$domain_properties = array();
|
||||
while ($row = db_array ($result['result'])) {
|
||||
$domain_properties[$row['domain']] = $row;
|
||||
}
|
||||
@@ -95,15 +95,19 @@ while ($row = db_array ($result['result'])) {
|
||||
$domain_properties [$row['domain']] ['alias_count'] = $row['alias_count'] - $domain_properties [$row['domain']] ['mailbox_count'];
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
|
||||
if ($is_superadmin) {
|
||||
include ("templates/admin_list-domain.php");
|
||||
} else {
|
||||
include ("templates/overview-get.php");
|
||||
$smarty->assign ('domain_properties', $domain_properties);
|
||||
if ($is_superadmin)
|
||||
{
|
||||
$smarty->assign ('select_options', select_options ($list_admins, array ($fUsername)));
|
||||
$smarty->assign ('smarty_template', 'admin_list-domain');
|
||||
}
|
||||
include ("templates/footer.php");
|
||||
else
|
||||
{
|
||||
$smarty->assign ('select_options', select_options ($list_domains, array ($_GET['domain'])));
|
||||
$smarty->assign ('smarty_template', 'overview-get');
|
||||
}
|
||||
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
430
list-virtual.php
430
list-virtual.php
@@ -37,11 +37,11 @@ $fDomain = false;
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
|
||||
if (authentication_has_role('global-admin')) {
|
||||
$list_domains = list_domains ();
|
||||
$is_superadmin = 1;
|
||||
$list_domains = list_domains ();
|
||||
$is_superadmin = 1;
|
||||
} else {
|
||||
$list_domains = list_domains_for_admin(authentication_get_username());
|
||||
$is_superadmin = 0;
|
||||
$list_domains = list_domains_for_admin(authentication_get_username());
|
||||
$is_superadmin = 0;
|
||||
}
|
||||
|
||||
$tAlias = array();
|
||||
@@ -51,35 +51,35 @@ $page_size = $CONF['page_size'];
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
|
||||
if (isset ($_GET['limit'])) $fDisplay = intval ($_GET['limit']);
|
||||
$search = escape_string(safeget('search'));
|
||||
if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
|
||||
if (isset ($_GET['limit'])) $fDisplay = intval ($_GET['limit']);
|
||||
$search = escape_string(safeget('search'));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']);
|
||||
if (isset ($_POST['limit'])) $fDisplay = intval ($_POST['limit']);
|
||||
$search = escape_string(safepost('search'));
|
||||
if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']);
|
||||
if (isset ($_POST['limit'])) $fDisplay = intval ($_POST['limit']);
|
||||
$search = escape_string(safepost('search'));
|
||||
}
|
||||
|
||||
// store fDomain in $_SESSION so after adding/editing aliases/mailboxes we can
|
||||
// store fDomain in $_SESSION so after adding/editing aliases/mailboxes we can
|
||||
// take the user back to the appropriate domain listing. (see templates/menu.php)
|
||||
if($fDomain) {
|
||||
$_SESSION['list_virtual_sticky_domain'] = $fDomain;
|
||||
}
|
||||
|
||||
if (count($list_domains) == 0) {
|
||||
# die("no domains");
|
||||
header("Location: list-domain.php"); # no domains (for this admin at least) - redirect to domain list
|
||||
exit;
|
||||
# die("no domains");
|
||||
header("Location: list-domain.php"); # no domains (for this admin at least) - redirect to domain list
|
||||
exit;
|
||||
}
|
||||
|
||||
if ((is_array ($list_domains) and sizeof ($list_domains) > 0)) if (empty ($fDomain)) $fDomain = $list_domains[0];
|
||||
|
||||
if (!check_owner(authentication_get_username(), $fDomain)) {
|
||||
# die($PALANG['invalid_parameter']);
|
||||
header("Location: list-domain.php"); # domain not owned by this admin
|
||||
exit(0);
|
||||
# die($PALANG['invalid_parameter']);
|
||||
header("Location: list-domain.php"); # domain not owned by this admin
|
||||
exit(0);
|
||||
}
|
||||
|
||||
#
|
||||
@@ -87,49 +87,50 @@ if (!check_owner(authentication_get_username(), $fDomain)) {
|
||||
#
|
||||
|
||||
# TODO: add search support for alias domains
|
||||
|
||||
if (boolconf('alias_domain')) {
|
||||
# Alias-Domains
|
||||
# first try to get a list of other domains pointing
|
||||
# to this currently chosen one (aka. alias domains)
|
||||
$query = "SELECT $table_alias_domain.alias_domain,$table_alias_domain.target_domain,$table_alias_domain.modified,$table_alias_domain.active FROM $table_alias_domain WHERE target_domain='$fDomain' ORDER BY $table_alias_domain.alias_domain LIMIT $fDisplay, $page_size";
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$query = "SELECT alias_domain,target_domain,extract(epoch from modified) as modified,active FROM $table_alias_domain WHERE target_domain='$fDomain' ORDER BY alias_domain LIMIT $page_size OFFSET $fDisplay";
|
||||
}
|
||||
$result = db_query ($query);
|
||||
$tAliasDomains = array();
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
while ($row = db_array ($result['result']))
|
||||
{
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$row['modified']=gmstrftime('%c %Z',$row['modified']);
|
||||
$row['active']=('t'==$row['active']) ? 1 : 0;
|
||||
}
|
||||
$tAliasDomains[] = $row;
|
||||
}
|
||||
}
|
||||
# now let's see if the current domain itself is an alias for another domain
|
||||
$query = "SELECT $table_alias_domain.alias_domain,$table_alias_domain.target_domain,$table_alias_domain.modified,$table_alias_domain.active FROM $table_alias_domain WHERE alias_domain='$fDomain'";
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$query = "SELECT alias_domain,target_domain,extract(epoch from modified) as modified,active FROM $table_alias_domain WHERE alias_domain='$fDomain'";
|
||||
}
|
||||
$result = db_query ($query);
|
||||
$tTargetDomain = "";
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
if($row = db_array ($result['result']))
|
||||
{
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$row['modified']=gmstrftime('%c %Z',$row['modified']);
|
||||
$row['active']=('t'==$row['active']) ? 1 : 0;
|
||||
}
|
||||
$tTargetDomain = $row;
|
||||
}
|
||||
}
|
||||
# Alias-Domains
|
||||
# first try to get a list of other domains pointing
|
||||
# to this currently chosen one (aka. alias domains)
|
||||
$query = "SELECT $table_alias_domain.alias_domain,$table_alias_domain.target_domain,$table_alias_domain.modified,$table_alias_domain.active FROM $table_alias_domain WHERE target_domain='$fDomain' ORDER BY $table_alias_domain.alias_domain LIMIT $fDisplay, $page_size";
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$query = "SELECT alias_domain,target_domain,extract(epoch from modified) as modified,active FROM $table_alias_domain WHERE target_domain='$fDomain' ORDER BY alias_domain LIMIT $page_size OFFSET $fDisplay";
|
||||
}
|
||||
$result = db_query ($query);
|
||||
$tAliasDomains = array();
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
while ($row = db_array ($result['result']))
|
||||
{
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$row['modified']=gmstrftime('%c %Z',$row['modified']);
|
||||
$row['active']=('t'==$row['active']) ? 1 : 0;
|
||||
}
|
||||
$tAliasDomains[] = $row;
|
||||
}
|
||||
}
|
||||
# now let's see if the current domain itself is an alias for another domain
|
||||
$query = "SELECT $table_alias_domain.alias_domain,$table_alias_domain.target_domain,$table_alias_domain.modified,$table_alias_domain.active FROM $table_alias_domain WHERE alias_domain='$fDomain'";
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$query = "SELECT alias_domain,target_domain,extract(epoch from modified) as modified,active FROM $table_alias_domain WHERE alias_domain='$fDomain'";
|
||||
}
|
||||
$result = db_query ($query);
|
||||
$tTargetDomain = "";
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
if($row = db_array ($result['result']))
|
||||
{
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
$row['modified']=gmstrftime('%c %Z',$row['modified']);
|
||||
$row['active']=('t'==$row['active']) ? 1 : 0;
|
||||
}
|
||||
$tTargetDomain = $row;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#
|
||||
@@ -137,46 +138,47 @@ if (boolconf('alias_domain')) {
|
||||
#
|
||||
|
||||
if ($search == "") {
|
||||
$sql_domain = " $table_alias.domain='$fDomain' ";
|
||||
$sql_where = "";
|
||||
$sql_domain = " $table_alias.domain='$fDomain' ";
|
||||
$sql_where = "";
|
||||
} else {
|
||||
$sql_domain = db_in_clause("$table_alias.domain", $list_domains);
|
||||
$sql_where = " AND ( address LIKE '%$search%' OR goto LIKE '%$search%' ) ";
|
||||
$sql_domain = db_in_clause("$table_alias.domain", $list_domains);
|
||||
$sql_where = " AND ( address LIKE '%$search%' OR goto LIKE '%$search%' ) ";
|
||||
}
|
||||
|
||||
$query = "SELECT $table_alias.address,
|
||||
$table_alias.goto,
|
||||
$table_alias.modified,
|
||||
$table_alias.active
|
||||
FROM $table_alias LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username
|
||||
WHERE ($sql_domain AND $table_mailbox.maildir IS NULL $sql_where)
|
||||
ORDER BY $table_alias.address LIMIT $fDisplay, $page_size";
|
||||
$table_alias.goto,
|
||||
$table_alias.modified,
|
||||
$table_alias.active
|
||||
FROM $table_alias LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username
|
||||
WHERE ($sql_domain AND $table_mailbox.maildir IS NULL $sql_where)
|
||||
ORDER BY $table_alias.address LIMIT $fDisplay, $page_size";
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
# TODO: is the different query for pgsql really needed? The mailbox query below also works with both...
|
||||
$query = "SELECT address,
|
||||
goto,
|
||||
extract(epoch from modified) as modified,
|
||||
active
|
||||
FROM $table_alias
|
||||
WHERE $sql_domain AND NOT EXISTS(SELECT 1 FROM $table_mailbox WHERE username=$table_alias.address $sql_where)
|
||||
ORDER BY address LIMIT $page_size OFFSET $fDisplay";
|
||||
# TODO: is the different query for pgsql really needed? The mailbox query below also works with both...
|
||||
$query = "SELECT address,
|
||||
goto,
|
||||
extract(epoch from modified) as modified,
|
||||
active
|
||||
FROM $table_alias
|
||||
WHERE $sql_domain AND NOT EXISTS(SELECT 1 FROM $table_mailbox WHERE username=$table_alias.address $sql_where)
|
||||
ORDER BY address LIMIT $page_size OFFSET $fDisplay";
|
||||
}
|
||||
|
||||
$result = db_query ($query);
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
while ($row = db_array ($result['result']))
|
||||
{
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
//. at least in my database, $row['modified'] already looks like : 2009-04-11 21:38:10.75586+01,
|
||||
// while gmstrftime expects an integer value. strtotime seems happy though.
|
||||
//$row['modified']=gmstrftime('%c %Z',$row['modified']);
|
||||
$row['modified'] = date('Y-m-d H:i', strtotime($row['modified']));
|
||||
$row['active']=('t'==$row['active']) ? 1 : 0;
|
||||
}
|
||||
$tAlias[] = $row;
|
||||
}
|
||||
while ($row = db_array ($result['result']))
|
||||
{
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
//. at least in my database, $row['modified'] already looks like : 2009-04-11 21:38:10.75586+01,
|
||||
// while gmstrftime expects an integer value. strtotime seems happy though.
|
||||
//$row['modified']=gmstrftime('%c %Z',$row['modified']);
|
||||
$row['modified'] = date('Y-m-d H:i', strtotime($row['modified']));
|
||||
$row['active']=('t'==$row['active']) ? 1 : 0;
|
||||
}
|
||||
$tAlias[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -204,7 +206,6 @@ if ($search == "") {
|
||||
}
|
||||
$sql_where .= " ) "; # $search is already escaped
|
||||
}
|
||||
|
||||
if ($display_mailbox_aliases) {
|
||||
$sql_select .= ", $table_alias.goto ";
|
||||
$sql_join .= " LEFT JOIN $table_alias ON $table_mailbox.username=$table_alias.address ";
|
||||
@@ -231,9 +232,9 @@ $query = "$sql_select\n$sql_from\n$sql_join\n$sql_where\n$sql_order\n$sql_limit"
|
||||
$result = db_query ($query);
|
||||
if ($result['rows'] > 0)
|
||||
{
|
||||
while ($row = db_array ($result['result']))
|
||||
{
|
||||
if ($display_mailbox_aliases) {
|
||||
while ($row = db_array ($result['result']))
|
||||
{
|
||||
if ($display_mailbox_aliases) {
|
||||
$goto_split = split(",", $row['goto']);
|
||||
$row['goto_mailbox'] = 0;
|
||||
$row['goto_other'] = array();
|
||||
@@ -247,20 +248,20 @@ if ($result['rows'] > 0)
|
||||
$row['goto_other'][] = $goto_single;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
// XXX
|
||||
$row['modified'] = date('Y-m-d H:i', strtotime($row['modified']));
|
||||
$row['created'] = date('Y-m-d H:i', strtotime($row['created']));
|
||||
$row['active']=('t'==$row['active']) ? 1 : 0;
|
||||
if($row['v_active'] == NULL) {
|
||||
$row['v_active'] = 'f';
|
||||
}
|
||||
$row['v_active']=('t'==$row['v_active']) ? 1 : 0;
|
||||
}
|
||||
$tMailbox[] = $row;
|
||||
}
|
||||
}
|
||||
if ('pgsql'==$CONF['database_type'])
|
||||
{
|
||||
// XXX
|
||||
$row['modified'] = date('Y-m-d H:i', strtotime($row['modified']));
|
||||
$row['created'] = date('Y-m-d H:i', strtotime($row['created']));
|
||||
$row['active']=('t'==$row['active']) ? 1 : 0;
|
||||
if($row['v_active'] == NULL) {
|
||||
$row['v_active'] = 'f';
|
||||
}
|
||||
$row['v_active']=('t'==$row['v_active']) ? 1 : 0;
|
||||
}
|
||||
$tMailbox[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
$tCanAddAlias = false;
|
||||
@@ -269,40 +270,197 @@ $tCanAddMailbox = false;
|
||||
# TODO: needs reworking for $search...
|
||||
$limit = get_domain_properties($fDomain);
|
||||
if (isset ($limit)) {
|
||||
if ($fDisplay >= $page_size) {
|
||||
$tDisplay_back_show = 1;
|
||||
$tDisplay_back = $fDisplay - $page_size;
|
||||
}
|
||||
if (($limit['alias_count'] > $page_size) or ($limit['mailbox_count'] > $page_size)) {
|
||||
$tDisplay_up_show = 1;
|
||||
}
|
||||
if ((($fDisplay + $page_size) < $limit['alias_count']) or
|
||||
(($fDisplay + $page_size) < $limit['mailbox_count']))
|
||||
{
|
||||
$tDisplay_next_show = 1;
|
||||
$tDisplay_next = $fDisplay + $page_size;
|
||||
}
|
||||
if ($fDisplay >= $page_size) {
|
||||
$tDisplay_back_show = 1;
|
||||
$tDisplay_back = $fDisplay - $page_size;
|
||||
}
|
||||
if (($limit['alias_count'] > $page_size) or ($limit['mailbox_count'] > $page_size)) {
|
||||
$tDisplay_up_show = 1;
|
||||
}
|
||||
if ((($fDisplay + $page_size) < $limit['alias_count']) or
|
||||
(($fDisplay + $page_size) < $limit['mailbox_count']))
|
||||
{
|
||||
$tDisplay_next_show = 1;
|
||||
$tDisplay_next = $fDisplay + $page_size;
|
||||
}
|
||||
|
||||
if($limit['aliases'] == 0) {
|
||||
$tCanAddAlias = true;
|
||||
}
|
||||
elseif($limit['alias_count'] < $limit['aliases']) {
|
||||
$tCanAddAlias = true;
|
||||
}
|
||||
if($limit['mailboxes'] == 0) {
|
||||
$tCanAddMailbox = true;
|
||||
}
|
||||
elseif($limit['mailbox_count'] < $limit['mailboxes']) {
|
||||
$tCanAddMailbox = true;
|
||||
}
|
||||
if($limit['aliases'] == 0) {
|
||||
$tCanAddAlias = true;
|
||||
}
|
||||
elseif($limit['alias_count'] < $limit['aliases']) {
|
||||
$tCanAddAlias = true;
|
||||
}
|
||||
if($limit['mailboxes'] == 0) {
|
||||
$tCanAddMailbox = true;
|
||||
}
|
||||
elseif($limit['mailbox_count'] < $limit['mailboxes']) {
|
||||
$tCanAddMailbox = true;
|
||||
}
|
||||
|
||||
$limit ['aliases'] = eval_size ($limit ['aliases']);
|
||||
$limit ['mailboxes'] = eval_size ($limit ['mailboxes']);
|
||||
$limit ['maxquota'] = eval_size ($limit ['maxquota']);
|
||||
}
|
||||
|
||||
$gen_show_status = array ();
|
||||
$check_alias_owner = array ();
|
||||
|
||||
if ((is_array ($tAlias) and sizeof ($tAlias) > 0))
|
||||
for ($i = 0; $i < sizeof ($tAlias); $i++)
|
||||
{
|
||||
$gen_show_status [$i] = gen_show_status($tAlias[$i]['address']);
|
||||
$check_alias_owner [$i] = check_alias_owner($SESSID_USERNAME, $tAlias[$i]['address']);
|
||||
}
|
||||
|
||||
$gen_show_status_mailbox = array ();
|
||||
$divide_quota = array ();
|
||||
if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0))
|
||||
for ($i = 0; $i < sizeof ($tMailbox); $i++)
|
||||
{
|
||||
$gen_show_status_mailbox [$i] = gen_show_status($tMailbox[$i]['username']);
|
||||
$divide_quota ['current'][$i] = divide_quota ($tMailbox[$i]['current']);
|
||||
$divide_quota ['quota'][$i] = divide_quota ($tMailbox[$i]['quota']);
|
||||
}
|
||||
|
||||
class cNav_bar
|
||||
{
|
||||
var $count, $title, $limit, $page_size, $pages; //* arguments
|
||||
var $url; //* manually
|
||||
var $fInit, $arr_prev, $arr_next, $arr_top; //* internal
|
||||
var $anchor;
|
||||
function cNav_bar ($aCount, $aTitle, $aLimit, $aPage_size, $aPages)
|
||||
{
|
||||
$this->count = $aCount;
|
||||
$this->title = $aTitle;
|
||||
$this->limit = $aLimit;
|
||||
$this->page_size = $aPage_size;
|
||||
$this->pages = $aPages;
|
||||
$this->url = '';
|
||||
$this->fInit = false;
|
||||
}
|
||||
function init ()
|
||||
{
|
||||
$this->anchor = 'a'.substr ($this->title, 3);
|
||||
$this->url .= '#'.$this->anchor;
|
||||
($this->limit >= $this->page_size) ? $this->arr_prev = ' <a href="?limit='.($this->limit - $this->page_size).$this->url.'"><img border="0" src="images/arrow-l.png" title="'.$GLOBALS ['PALANG']['pOverview_left_arrow'].'" alt="'.$GLOBALS ['PALANG']['pOverview_left_arrow'].'"/></a> ' : $this->arr_prev = '';
|
||||
($this->limit > 0) ? $this->arr_top = ' <a href="?limit=0'.$this->url.'"><img border="0" src="images/arrow-u.png" title="'.$GLOBALS ['PALANG']['pOverview_up_arrow'].'" alt="'.$GLOABLS ['PALANG']['pOverview_up_arrow'].'"/></a> ' : $this->arr_top = '';
|
||||
(($this->limit + $this->page_size) < ($this->count * $this->page_size)) ? $this->arr_next = ' <a href="?limit='.($this->limit + $this->page_size).$this->url.'"><img border="0" src="images/arrow-r.png" title="'.$GLOBALS ['PALANG']['pOverview_right_arrow'].'" alt="'.$GLOBALS ['PALANG']['pOverview_right_arrow'].'"/></a> ' : $this->arr_next = '';
|
||||
$this->fInit = true;
|
||||
}
|
||||
function display_pre ()
|
||||
{
|
||||
$ret_val = '<div class="nav_bar"';
|
||||
//$ret_val .= ' style="background-color:#ffa;"';
|
||||
$ret_val .= '>';
|
||||
$ret_val .= '<table width="730"><colgroup span="1"><col width="550"></col></colgroup> ';
|
||||
$ret_val .= '<tr><td align="left">';
|
||||
return $ret_val;
|
||||
}
|
||||
function display_post ()
|
||||
{
|
||||
$ret_val = '</td></tr></table></div>';
|
||||
return $ret_val;
|
||||
}
|
||||
function display_top ()
|
||||
{
|
||||
$ret_val = '';
|
||||
if ($this->count < 1)
|
||||
return $ret_val;
|
||||
if (!$this->fInit)
|
||||
$this->init ();
|
||||
|
||||
$ret_val .= '<a name="'.$this->anchor.'"></a>';
|
||||
$ret_val .= $this->display_pre ();
|
||||
$ret_val .= '<b>'.$this->title.'</b> ';
|
||||
($this->limit >= $this->page_size) ? $highlight_at = $this->limit / $this->page_size : $highlight_at = 0;
|
||||
|
||||
for ($i = 0; $i < count ($this->pages); $i++)
|
||||
{
|
||||
$lPage = $this->pages [$i];
|
||||
if ($i == $highlight_at)
|
||||
$lPage = '<b>'.$lPage.'</b>';
|
||||
$ret_val .= '<a href="?limit='.($i * $this->page_size).$this->url.'">'.$lPage.'</a>'."\n";
|
||||
}
|
||||
$ret_val .= '</td><td valign="middle" align="right">';
|
||||
|
||||
$ret_val .= $this->arr_prev;
|
||||
$ret_val .= $this->arr_top;
|
||||
$ret_val .= $this->arr_next;
|
||||
|
||||
$ret_val .= $this->display_post ();
|
||||
return $ret_val;
|
||||
}
|
||||
function display_bottom ()
|
||||
{
|
||||
$ret_val = '';
|
||||
if ($this->count < 1)
|
||||
return $ret_val;
|
||||
if (!$this->fInit)
|
||||
$this->init ();
|
||||
$ret_val .= $this->display_pre ();
|
||||
$ret_val .= '</td><td valign="middle" align="right">';
|
||||
|
||||
$ret_val .= $this->arr_prev;
|
||||
$ret_val .= $this->arr_top;
|
||||
$ret_val .= $this->arr_next;
|
||||
|
||||
$ret_val .= $this->display_post ();
|
||||
return $ret_val;
|
||||
}
|
||||
}
|
||||
|
||||
$nav_bar_alias = new cNav_bar ($limit['alias_pgindex_count'], $PALANG['pOverview_alias_title'], $fDisplay, $CONF['page_size'], $limit['alias_pgindex']);
|
||||
$nav_bar_alias->url = '&domain='.$fDomain;
|
||||
|
||||
$nav_bar_mailbox = new cNav_bar ($limit['mbox_pgindex_count'], $PALANG['pOverview_mailbox_title'], $fDisplay, $CONF['page_size'], $limit['mbox_pgindex']);
|
||||
$nav_bar_mailbox->url = '&domain='.$fDomain;
|
||||
//print $nav_bar_alias->display_top ();
|
||||
|
||||
|
||||
// this is why we need a proper template layer.
|
||||
$fDomain = htmlentities($fDomain, ENT_QUOTES);
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/list-virtual.php");
|
||||
include ("templates/footer.php");
|
||||
|
||||
$smarty->assign ('select_options', select_options ($list_domains, array ($fDomain)));
|
||||
$smarty->assign ('nav_bar_alias', array ('top' => $nav_bar_alias->display_top (), 'bottom' => $nav_bar_alias->display_bottom ()));
|
||||
$smarty->assign ('nav_bar_mailbox', array ('top' => $nav_bar_mailbox->display_top (), 'bottom' => $nav_bar_mailbox->display_bottom ()));
|
||||
|
||||
$smarty->assign ('fDomain', $fDomain);
|
||||
|
||||
$smarty->assign ('list_domains', $list_domains);
|
||||
$smarty->assign ('limit', $limit);
|
||||
$smarty->assign ('tDisplay_back_show', $tDisplay_back_show);
|
||||
$smarty->assign ('tDisplay_back', $tDisplay_back);
|
||||
$smarty->assign ('tDisplay_up_show', $tDisplay_up_show);
|
||||
$smarty->assign ('tDisplay_next_show', $tDisplay_next_show);
|
||||
$smarty->assign ('tDisplay_next', $tDisplay_next);
|
||||
|
||||
if(sizeof ($tAliasDomains) > 0)
|
||||
$smarty->assign ('tAliasDomains', $tAliasDomains);
|
||||
|
||||
if(is_array($tTargetDomain))
|
||||
{
|
||||
$smarty->assign ('tTargetDomain', $tTargetDomain);
|
||||
$smarty->assign ('PALANG_pOverview_alias_domain_target', sprintf($PALANG['pOverview_alias_domain_target'], $fDomain));
|
||||
}
|
||||
$smarty->assign ('tAlias', $tAlias);
|
||||
$smarty->assign ('gen_show_status', $gen_show_status);
|
||||
$smarty->assign ('check_alias_owner', $check_alias_owner);
|
||||
$smarty->assign ('tCanAddAlias', $tCanAddAlias);
|
||||
$smarty->assign ('tMailbox', $tMailbox);
|
||||
$smarty->assign ('gen_show_status_mailbox', $gen_show_status_mailbox);
|
||||
$smarty->assign ('boolconf_used_quotas', boolconf('used_quotas'));
|
||||
$smarty->assign ('divide_quota', $divide_quota);
|
||||
$smarty->assign ('tCanAddMailbox', $tCanAddMailbox);
|
||||
$smarty->assign ('display_mailbox_aliases', $display_mailbox_aliases);
|
||||
if (isset ($_GET ['tab']))
|
||||
$_SESSION ['tab'] = $_GET ['tab'];
|
||||
//if (empty ($_GET ['tab']))
|
||||
// unset ($_SESSION ['tab']);
|
||||
if (!isset ($_SESSION ['tab']))
|
||||
$_SESSION ['tab'] = 'mailbox';
|
||||
$smarty->assign ('tab', $_SESSION ['tab']);
|
||||
$smarty->assign ('smarty_template', 'list-virtual');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
|
24
login.php
24
login.php
@@ -30,16 +30,18 @@
|
||||
|
||||
require_once('common.php');
|
||||
|
||||
if($CONF['configured'] !== true) {
|
||||
print "Installation not yet configured; please edit config.inc.php";
|
||||
exit;
|
||||
}
|
||||
# force user to delete setup.php (allows creation of superadmins!)
|
||||
if($CONF['configured'] !== true) {
|
||||
print "Installation not yet configured; please edit config.inc.php";
|
||||
exit;
|
||||
}
|
||||
|
||||
$smarty->assign ('language_selector', language_selector());
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
include ("./templates/header.php");
|
||||
include ("./templates/login.php");
|
||||
include ("./templates/footer.php");
|
||||
$smarty->assign ('smarty_template', 'login');
|
||||
$smarty->display ('index.tpl');
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
@@ -94,9 +96,11 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
exit(0);
|
||||
}
|
||||
|
||||
include ("./templates/header.php");
|
||||
include ("./templates/login.php");
|
||||
include ("./templates/footer.php");
|
||||
$smarty->assign ('tUsername', $tUsername);
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
|
||||
$smarty->assign ('smarty_template', 'login');
|
||||
$smarty->display ('index.tpl');
|
||||
}
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
|
10
main.php
10
main.php
@@ -26,11 +26,7 @@ require_once('common.php');
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
|
||||
authentication_require_role('admin');
|
||||
$smarty->assign ('smarty_template', 'main');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
include ("./templates/header.php");
|
||||
include ("./templates/menu.php");
|
||||
include ("./templates/main.php");
|
||||
include ("./templates/footer.php");
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ ?>
|
||||
|
@@ -97,8 +97,8 @@ class AliasHandler {
|
||||
$addresses = array_unique($addresses);
|
||||
|
||||
$original = $this->get(true);
|
||||
$tmp = preg_split('/@/', $this->username);
|
||||
$domain = $tmp[1];
|
||||
$tmp = preg_split('/@/', $this->username);
|
||||
$domain = $tmp[1];
|
||||
|
||||
foreach($original as $address) {
|
||||
if($vacation_persist) {
|
||||
@@ -145,7 +145,7 @@ class AliasHandler {
|
||||
}
|
||||
if($this->hasAliasRecord() == false) {
|
||||
$true = db_get_boolean(True);
|
||||
$sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), '$true')";
|
||||
$sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), '$true')";
|
||||
}
|
||||
else {
|
||||
$sql = "UPDATE $table_alias SET goto = '$goto', modified = NOW() WHERE address = '$username'";
|
||||
@@ -185,5 +185,3 @@ class AliasHandler {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
|
@@ -30,7 +30,7 @@ class UserHandler {
|
||||
$table_mailbox = table_by_key('mailbox');
|
||||
|
||||
$active = db_get_boolean(True);
|
||||
$result = db_query("SELECT * FROM $table_mailbox WHERE username='$username' AND active='$active'");
|
||||
$result = db_query("SELECT * FROM $table_mailbox WHERE username='$username' AND active='$active'");
|
||||
$new_db_password = escape_string(pacrypt($new_password));
|
||||
|
||||
$result = db_query ("UPDATE $table_mailbox SET password='$new_db_password',modified=NOW() WHERE username='$username'");
|
||||
@@ -66,5 +66,3 @@ class UserHandler {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
|
@@ -124,5 +124,3 @@ class VacationHandler {
|
||||
return $vacation_goto;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<div class="standout">
|
||||
=== Announcement ===<br />
|
||||
This is a new version of Postfix Admin.<br />
|
||||
If you have any questions please direct them to the <a href="mailto:<?php print $CONF['admin_email']; ?>">Site Admin</a><br />
|
||||
If you have any questions please direct them to the <a href="mailto:{$CONF.admin_email}">Site Admin</a><br />
|
||||
=== Announcement ===<br />
|
||||
</div>
|
||||
<br />
|
||||
|
2
motd.txt
2
motd.txt
@@ -1,7 +1,7 @@
|
||||
<div class="standout">
|
||||
=== Announcement ===<br />
|
||||
This is a new version of Postfix Admin.<br />
|
||||
If you have any questions please direct them to the <a href="mailto:<?php print $CONF['admin_email']; ?>">Site Admin</a><br />
|
||||
If you have any questions please direct them to the <a href="mailto:{$CONF.admin_email}">Site Admin</a><br />
|
||||
=== Announcement ===<br />
|
||||
</div>
|
||||
<br />
|
||||
|
16
password.php
16
password.php
@@ -33,12 +33,12 @@ authentication_require_role('admin');
|
||||
|
||||
$SESSID_USERNAME = authentication_get_username();
|
||||
|
||||
$smarty->assign ('SESSID_USERNAME', $SESSID_USERNAME);
|
||||
$smarty->assign ('smarty_template', 'password');
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||
{
|
||||
include ("./templates/header.php");
|
||||
include ("./templates/menu.php");
|
||||
include ("./templates/password.php");
|
||||
include ("./templates/footer.php");
|
||||
$smarty->display ('index.tpl');
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
@@ -88,10 +88,10 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
}
|
||||
}
|
||||
|
||||
include ("./templates/header.php");
|
||||
include ("./templates/menu.php");
|
||||
include ("./templates/password.php");
|
||||
include ("./templates/footer.php");
|
||||
$smarty->assign ('pPassword_password_current_text', $pPassword_password_current_text);
|
||||
$smarty->assign ('pPassword_password_text', $pPassword_password_text);
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
$smarty->display ('index.tpl');
|
||||
}
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
|
63
search.php
63
search.php
@@ -124,10 +124,65 @@ if ($result['rows'] > 0)
|
||||
}
|
||||
}
|
||||
|
||||
include ("templates/header.php");
|
||||
include ("templates/menu.php");
|
||||
include ("templates/search.php");
|
||||
include ("templates/footer.php");
|
||||
$check_alias_owner = array ();
|
||||
|
||||
if ((is_array ($tAlias) and sizeof ($tAlias) > 0))
|
||||
for ($i = 0; $i < sizeof ($tAlias); $i++)
|
||||
$check_alias_owner [$i] = check_alias_owner ($SESSID_USERNAME, $tAlias[$i]['address']);
|
||||
|
||||
$divide_quota = array ();
|
||||
if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0))
|
||||
for ($i = 0; $i < sizeof ($tMailbox); $i++)
|
||||
{
|
||||
$divide_quota ['quota'][$i] = divide_quota ($tMailbox[$i]['quota']);
|
||||
}
|
||||
|
||||
for ($i = 0; $i < sizeof ($tAlias); $i++)
|
||||
{
|
||||
if ((is_array ($tAlias) and sizeof ($tAlias) > 0))
|
||||
{
|
||||
$tAlias[$i]['display_address'] = $tAlias[$i]['address'];
|
||||
if (stristr($tAlias[$i]['display_address'],$fSearch))
|
||||
{
|
||||
$new_address = str_ireplace($fSearch, "<span style='background-color: lightgreen'>".$fSearch."</span>", $tAlias[$i]['display_address']);
|
||||
$tAlias[$i]['display_address'] = $new_address;
|
||||
}
|
||||
if (stristr($tAlias[$i]['goto'], $fSearch))
|
||||
{
|
||||
$tAlias[$i]['goto'] = str_ireplace($fSearch, "<span style='background-color: lightgreen'>".$fSearch."</span>", $tAlias[$i]['goto']);
|
||||
}
|
||||
($tAlias [$i]['active'] == 1) ? $tAlias [$i]['active'] = $PALANG ['YES'] : $tAlias [$i]['active'] = $PALANG ['NO'];
|
||||
}
|
||||
}
|
||||
for ($i = 0; $i < sizeof ($tMailbox); $i++)
|
||||
{
|
||||
if ((is_array ($tMailbox) and sizeof ($tMailbox) > 0))
|
||||
{
|
||||
$tMailbox[$i]['display_username'] = $tMailbox[$i]['username'];
|
||||
if (stristr($tMailbox[$i]['display_username'],$fSearch))
|
||||
{
|
||||
$new_name = str_ireplace ($fSearch, "<span style='background-color: lightgreen'>".$fSearch."</span>", $tMailbox[$i]['display_username']);
|
||||
$tMailbox [$i]['display_username'] = $new_name;
|
||||
}
|
||||
if (stristr($tMailbox[$i]['name'],$fSearch))
|
||||
{
|
||||
$tMailbox[$i]['name'] = str_ireplace($fSearch, "<span style='background-color: lightgreen'>".$fSearch."</span>", $tMailbox[$i]['name']);
|
||||
}
|
||||
($tMailbox [$i]['active'] == 1) ? $tMailbox [$i]['active'] = $PALANG ['YES'] : $tMailbox [$i]['active'] = $PALANG ['NO'];
|
||||
($tMailbox [$i]['v_active'] == 1) ? $tMailbox [$i]['v_active'] = $PALANG ['pOverview_vacation_edit'] : $tMailbox [$i]['v_active'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$smarty->assign ('fSearch', $fSearch);
|
||||
$smarty->assign ('select_options', select_options ($list_domains, array ($list_domains[0])));
|
||||
$smarty->assign ('tAlias', $tAlias);
|
||||
|
||||
$smarty->assign ('check_alias_owner', $check_alias_owner);
|
||||
$smarty->assign ('tMailbox', $tMailbox);
|
||||
$smarty->assign ('divide_quota', $divide_quota);
|
||||
|
||||
$smarty->assign ('smarty_template', 'search');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||
?>
|
||||
|
@@ -79,11 +79,12 @@ if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||
}
|
||||
}
|
||||
}
|
||||
$smarty->assign ('SESSID_USERNAME', $SESSID_USERNAME);
|
||||
$smarty->assign ('tMessage', $tMessage);
|
||||
|
||||
$smarty->assign ('smarty_template', 'sendmail');
|
||||
$smarty->display ('index.tpl');
|
||||
|
||||
include ("./templates/header.php");
|
||||
include ("./templates/menu.php");
|
||||
include ("./templates/sendmail.php");
|
||||
include ("./templates/footer.php");
|
||||
|
||||
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||
?>
|
||||
|
56
smarty.inc.php
Normal file
56
smarty.inc.php
Normal file
@@ -0,0 +1,56 @@
|
||||
<?
|
||||
require_once ("$incpath/smarty/libs/Smarty.class.php");
|
||||
|
||||
$smarty = new Smarty;
|
||||
|
||||
//$smarty->debugging = true;
|
||||
|
||||
$smarty->template_dir = $incpath.'/'.$smarty->template_dir;
|
||||
$smarty->compile_dir = $incpath.'/'.$smarty->compile_dir;
|
||||
$smarty->config_dir = $incpath.'/'.$smarty->config_dir;
|
||||
|
||||
$CONF['theme_css'] = $CONF['postfix_admin_url'].'/'.htmlentities($CONF['theme_css']);
|
||||
$CONF['theme_logo'] = $CONF['postfix_admin_url'].'/'.htmlentities($CONF['theme_logo']);
|
||||
|
||||
$smarty->assign ('CONF', $CONF);
|
||||
$smarty->assign ('PALANG', $PALANG);
|
||||
|
||||
//*** footer.tpl
|
||||
$smarty->assign ('version', $version);
|
||||
|
||||
//*** menu.tpl
|
||||
$smarty->assign ('boolconf_alias_domain', boolconf('alias_domain'));
|
||||
$smarty->assign ('authentication_has_role', array ('global_admin' => authentication_has_role ('global-admin'), 'admin' => authentication_has_role ('admin'), 'user' => authentication_has_role ('user')));
|
||||
|
||||
if (authentication_has_role('global-admin'))
|
||||
{
|
||||
$motd_file = "motd-admin.txt";
|
||||
}
|
||||
else
|
||||
{
|
||||
$motd_file = "motd.txt";
|
||||
}
|
||||
if (file_exists ($CONF ['postfix_admin_path'].'/templates/'.$motd_file))
|
||||
$smarty->assign ('motd_file', $motd_file);
|
||||
?>
|
||||
<?
|
||||
function select_options ($aValues, $aSelected)
|
||||
{
|
||||
$ret_val = '';
|
||||
foreach ($aValues as $val)
|
||||
{
|
||||
$ret_val .= '<option value="'.$val.'"';
|
||||
if (in_array ($val, $aSelected))
|
||||
$ret_val .= ' selected="selected"';
|
||||
$ret_val .= '>'.$val.'</option>';
|
||||
}
|
||||
return $ret_val;
|
||||
}
|
||||
function eval_size ($aSize)
|
||||
{
|
||||
if ($aSize == 0) {$ret_val = $GLOBALS ['PALANG']['pOverview_unlimited']; }
|
||||
elseif ($aSize < 0) {$ret_val = $GLOBALS ['PALANG']['pOverview_disabled']; }
|
||||
else {$ret_val = $aSize; }
|
||||
return $ret_val;
|
||||
}
|
||||
?>
|
393
smarty/libs/Config_File.class.php
Normal file
393
smarty/libs/Config_File.class.php
Normal file
@@ -0,0 +1,393 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Config_File class.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* For questions, help, comments, discussion, etc., please join the
|
||||
* Smarty mailing list. Send a blank e-mail to
|
||||
* smarty-discussion-subscribe@googlegroups.com
|
||||
*
|
||||
* @link http://www.smarty.net/
|
||||
* @version 2.6.25
|
||||
* @copyright Copyright: 2001-2005 New Digital Group, Inc.
|
||||
* @author Andrei Zmievski <andrei@php.net>
|
||||
* @access public
|
||||
* @package Smarty
|
||||
*/
|
||||
|
||||
/* $Id: Config_File.class.php 3149 2009-05-23 20:59:25Z monte.ohrt $ */
|
||||
|
||||
/**
|
||||
* Config file reading class
|
||||
* @package Smarty
|
||||
*/
|
||||
class Config_File {
|
||||
/**#@+
|
||||
* Options
|
||||
* @var boolean
|
||||
*/
|
||||
/**
|
||||
* Controls whether variables with the same name overwrite each other.
|
||||
*/
|
||||
var $overwrite = true;
|
||||
|
||||
/**
|
||||
* Controls whether config values of on/true/yes and off/false/no get
|
||||
* converted to boolean values automatically.
|
||||
*/
|
||||
var $booleanize = true;
|
||||
|
||||
/**
|
||||
* Controls whether hidden config sections/vars are read from the file.
|
||||
*/
|
||||
var $read_hidden = true;
|
||||
|
||||
/**
|
||||
* Controls whether or not to fix mac or dos formatted newlines.
|
||||
* If set to true, \r or \r\n will be changed to \n.
|
||||
*/
|
||||
var $fix_newlines = true;
|
||||
/**#@-*/
|
||||
|
||||
/** @access private */
|
||||
var $_config_path = "";
|
||||
var $_config_data = array();
|
||||
/**#@-*/
|
||||
|
||||
/**
|
||||
* Constructs a new config file class.
|
||||
*
|
||||
* @param string $config_path (optional) path to the config files
|
||||
*/
|
||||
function Config_File($config_path = NULL)
|
||||
{
|
||||
if (isset($config_path))
|
||||
$this->set_path($config_path);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Set the path where configuration files can be found.
|
||||
*
|
||||
* @param string $config_path path to the config files
|
||||
*/
|
||||
function set_path($config_path)
|
||||
{
|
||||
if (!empty($config_path)) {
|
||||
if (!is_string($config_path) || !file_exists($config_path) || !is_dir($config_path)) {
|
||||
$this->_trigger_error_msg("Bad config file path '$config_path'");
|
||||
return;
|
||||
}
|
||||
if(substr($config_path, -1) != DIRECTORY_SEPARATOR) {
|
||||
$config_path .= DIRECTORY_SEPARATOR;
|
||||
}
|
||||
|
||||
$this->_config_path = $config_path;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves config info based on the file, section, and variable name.
|
||||
*
|
||||
* @param string $file_name config file to get info for
|
||||
* @param string $section_name (optional) section to get info for
|
||||
* @param string $var_name (optional) variable to get info for
|
||||
* @return string|array a value or array of values
|
||||
*/
|
||||
function get($file_name, $section_name = NULL, $var_name = NULL)
|
||||
{
|
||||
if (empty($file_name)) {
|
||||
$this->_trigger_error_msg('Empty config file name');
|
||||
return;
|
||||
} else {
|
||||
$file_name = $this->_config_path . $file_name;
|
||||
if (!isset($this->_config_data[$file_name]))
|
||||
$this->load_file($file_name, false);
|
||||
}
|
||||
|
||||
if (!empty($var_name)) {
|
||||
if (empty($section_name)) {
|
||||
return $this->_config_data[$file_name]["vars"][$var_name];
|
||||
} else {
|
||||
if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name]))
|
||||
return $this->_config_data[$file_name]["sections"][$section_name]["vars"][$var_name];
|
||||
else
|
||||
return array();
|
||||
}
|
||||
} else {
|
||||
if (empty($section_name)) {
|
||||
return (array)$this->_config_data[$file_name]["vars"];
|
||||
} else {
|
||||
if(isset($this->_config_data[$file_name]["sections"][$section_name]["vars"]))
|
||||
return (array)$this->_config_data[$file_name]["sections"][$section_name]["vars"];
|
||||
else
|
||||
return array();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves config info based on the key.
|
||||
*
|
||||
* @param $file_name string config key (filename/section/var)
|
||||
* @return string|array same as get()
|
||||
* @uses get() retrieves information from config file and returns it
|
||||
*/
|
||||
function &get_key($config_key)
|
||||
{
|
||||
list($file_name, $section_name, $var_name) = explode('/', $config_key, 3);
|
||||
$result = &$this->get($file_name, $section_name, $var_name);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all loaded config file names.
|
||||
*
|
||||
* @return array an array of loaded config file names
|
||||
*/
|
||||
function get_file_names()
|
||||
{
|
||||
return array_keys($this->_config_data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all section names from a loaded file.
|
||||
*
|
||||
* @param string $file_name config file to get section names from
|
||||
* @return array an array of section names from the specified file
|
||||
*/
|
||||
function get_section_names($file_name)
|
||||
{
|
||||
$file_name = $this->_config_path . $file_name;
|
||||
if (!isset($this->_config_data[$file_name])) {
|
||||
$this->_trigger_error_msg("Unknown config file '$file_name'");
|
||||
return;
|
||||
}
|
||||
|
||||
return array_keys($this->_config_data[$file_name]["sections"]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all global or section variable names.
|
||||
*
|
||||
* @param string $file_name config file to get info for
|
||||
* @param string $section_name (optional) section to get info for
|
||||
* @return array an array of variables names from the specified file/section
|
||||
*/
|
||||
function get_var_names($file_name, $section = NULL)
|
||||
{
|
||||
if (empty($file_name)) {
|
||||
$this->_trigger_error_msg('Empty config file name');
|
||||
return;
|
||||
} else if (!isset($this->_config_data[$file_name])) {
|
||||
$this->_trigger_error_msg("Unknown config file '$file_name'");
|
||||
return;
|
||||
}
|
||||
|
||||
if (empty($section))
|
||||
return array_keys($this->_config_data[$file_name]["vars"]);
|
||||
else
|
||||
return array_keys($this->_config_data[$file_name]["sections"][$section]["vars"]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Clear loaded config data for a certain file or all files.
|
||||
*
|
||||
* @param string $file_name file to clear config data for
|
||||
*/
|
||||
function clear($file_name = NULL)
|
||||
{
|
||||
if ($file_name === NULL)
|
||||
$this->_config_data = array();
|
||||
else if (isset($this->_config_data[$file_name]))
|
||||
$this->_config_data[$file_name] = array();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load a configuration file manually.
|
||||
*
|
||||
* @param string $file_name file name to load
|
||||
* @param boolean $prepend_path whether current config path should be
|
||||
* prepended to the filename
|
||||
*/
|
||||
function load_file($file_name, $prepend_path = true)
|
||||
{
|
||||
if ($prepend_path && $this->_config_path != "")
|
||||
$config_file = $this->_config_path . $file_name;
|
||||
else
|
||||
$config_file = $file_name;
|
||||
|
||||
ini_set('track_errors', true);
|
||||
$fp = @fopen($config_file, "r");
|
||||
if (!is_resource($fp)) {
|
||||
$this->_trigger_error_msg("Could not open config file '$config_file'");
|
||||
return false;
|
||||
}
|
||||
|
||||
$contents = ($size = filesize($config_file)) ? fread($fp, $size) : '';
|
||||
fclose($fp);
|
||||
|
||||
$this->_config_data[$config_file] = $this->parse_contents($contents);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store the contents of a file manually.
|
||||
*
|
||||
* @param string $config_file file name of the related contents
|
||||
* @param string $contents the file-contents to parse
|
||||
*/
|
||||
function set_file_contents($config_file, $contents)
|
||||
{
|
||||
$this->_config_data[$config_file] = $this->parse_contents($contents);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* parse the source of a configuration file manually.
|
||||
*
|
||||
* @param string $contents the file-contents to parse
|
||||
*/
|
||||
function parse_contents($contents)
|
||||
{
|
||||
if($this->fix_newlines) {
|
||||
// fix mac/dos formatted newlines
|
||||
$contents = preg_replace('!\r\n?!', "\n", $contents);
|
||||
}
|
||||
|
||||
$config_data = array();
|
||||
$config_data['sections'] = array();
|
||||
$config_data['vars'] = array();
|
||||
|
||||
/* reference to fill with data */
|
||||
$vars =& $config_data['vars'];
|
||||
|
||||
/* parse file line by line */
|
||||
preg_match_all('!^.*\r?\n?!m', $contents, $match);
|
||||
$lines = $match[0];
|
||||
for ($i=0, $count=count($lines); $i<$count; $i++) {
|
||||
$line = $lines[$i];
|
||||
if (empty($line)) continue;
|
||||
|
||||
if ( substr($line, 0, 1) == '[' && preg_match('!^\[(.*?)\]!', $line, $match) ) {
|
||||
/* section found */
|
||||
if (substr($match[1], 0, 1) == '.') {
|
||||
/* hidden section */
|
||||
if ($this->read_hidden) {
|
||||
$section_name = substr($match[1], 1);
|
||||
} else {
|
||||
/* break reference to $vars to ignore hidden section */
|
||||
unset($vars);
|
||||
$vars = array();
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
$section_name = $match[1];
|
||||
}
|
||||
if (!isset($config_data['sections'][$section_name]))
|
||||
$config_data['sections'][$section_name] = array('vars' => array());
|
||||
$vars =& $config_data['sections'][$section_name]['vars'];
|
||||
continue;
|
||||
}
|
||||
|
||||
if (preg_match('/^\s*(\.?\w+)\s*=\s*(.*)/s', $line, $match)) {
|
||||
/* variable found */
|
||||
$var_name = rtrim($match[1]);
|
||||
if (strpos($match[2], '"""') === 0) {
|
||||
/* handle multiline-value */
|
||||
$lines[$i] = substr($match[2], 3);
|
||||
$var_value = '';
|
||||
while ($i<$count) {
|
||||
if (($pos = strpos($lines[$i], '"""')) === false) {
|
||||
$var_value .= $lines[$i++];
|
||||
} else {
|
||||
/* end of multiline-value */
|
||||
$var_value .= substr($lines[$i], 0, $pos);
|
||||
break;
|
||||
}
|
||||
}
|
||||
$booleanize = false;
|
||||
|
||||
} else {
|
||||
/* handle simple value */
|
||||
$var_value = preg_replace('/^([\'"])(.*)\1$/', '\2', rtrim($match[2]));
|
||||
$booleanize = $this->booleanize;
|
||||
|
||||
}
|
||||
$this->_set_config_var($vars, $var_name, $var_value, $booleanize);
|
||||
}
|
||||
/* else unparsable line / means it is a comment / means ignore it */
|
||||
}
|
||||
return $config_data;
|
||||
}
|
||||
|
||||
/**#@+ @access private */
|
||||
/**
|
||||
* @param array &$container
|
||||
* @param string $var_name
|
||||
* @param mixed $var_value
|
||||
* @param boolean $booleanize determines whether $var_value is converted to
|
||||
* to true/false
|
||||
*/
|
||||
function _set_config_var(&$container, $var_name, $var_value, $booleanize)
|
||||
{
|
||||
if (substr($var_name, 0, 1) == '.') {
|
||||
if (!$this->read_hidden)
|
||||
return;
|
||||
else
|
||||
$var_name = substr($var_name, 1);
|
||||
}
|
||||
|
||||
if (!preg_match("/^[a-zA-Z_]\w*$/", $var_name)) {
|
||||
$this->_trigger_error_msg("Bad variable name '$var_name'");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($booleanize) {
|
||||
if (preg_match("/^(on|true|yes)$/i", $var_value))
|
||||
$var_value = true;
|
||||
else if (preg_match("/^(off|false|no)$/i", $var_value))
|
||||
$var_value = false;
|
||||
}
|
||||
|
||||
if (!isset($container[$var_name]) || $this->overwrite)
|
||||
$container[$var_name] = $var_value;
|
||||
else {
|
||||
settype($container[$var_name], 'array');
|
||||
$container[$var_name][] = $var_value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @uses trigger_error() creates a PHP warning/error
|
||||
* @param string $error_msg
|
||||
* @param integer $error_type one of
|
||||
*/
|
||||
function _trigger_error_msg($error_msg, $error_type = E_USER_WARNING)
|
||||
{
|
||||
trigger_error("Config_File error: $error_msg", $error_type);
|
||||
}
|
||||
/**#@-*/
|
||||
}
|
||||
|
||||
?>
|
1981
smarty/libs/Smarty.class.php
Normal file
1981
smarty/libs/Smarty.class.php
Normal file
File diff suppressed because it is too large
Load Diff
2330
smarty/libs/Smarty_Compiler.class.php
Normal file
2330
smarty/libs/Smarty_Compiler.class.php
Normal file
File diff suppressed because it is too large
Load Diff
157
smarty/libs/debug.tpl
Normal file
157
smarty/libs/debug.tpl
Normal file
@@ -0,0 +1,157 @@
|
||||
{* Smarty *}
|
||||
{* debug.tpl, last updated version 2.1.0 *}
|
||||
{assign_debug_info}
|
||||
{capture assign=debug_output}
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<title>Smarty Debug Console</title>
|
||||
{literal}
|
||||
<style type="text/css">
|
||||
/* <![CDATA[ */
|
||||
body, h1, h2, td, th, p {
|
||||
font-family: sans-serif;
|
||||
font-weight: normal;
|
||||
font-size: 0.9em;
|
||||
margin: 1px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin: 0;
|
||||
text-align: left;
|
||||
padding: 2px;
|
||||
background-color: #f0c040;
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
background-color: #9B410E;
|
||||
color: white;
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
padding: 2px;
|
||||
border-top: 1px solid black;
|
||||
}
|
||||
|
||||
body {
|
||||
background: black;
|
||||
}
|
||||
|
||||
p, table, div {
|
||||
background: #f0ead8;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th, td {
|
||||
font-family: monospace;
|
||||
vertical-align: top;
|
||||
text-align: left;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
td {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.odd {
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
.even {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.exectime {
|
||||
font-size: 0.8em;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
#table_assigned_vars th {
|
||||
color: blue;
|
||||
}
|
||||
|
||||
#table_config_vars th {
|
||||
color: maroon;
|
||||
}
|
||||
/* ]]> */
|
||||
</style>
|
||||
{/literal}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>Smarty Debug Console</h1>
|
||||
|
||||
<h2>included templates & config files (load time in seconds)</h2>
|
||||
|
||||
<div>
|
||||
{section name=templates loop=$_debug_tpls}
|
||||
{section name=indent loop=$_debug_tpls[templates].depth} {/section}
|
||||
<font color={if $_debug_tpls[templates].type eq "template"}brown{elseif $_debug_tpls[templates].type eq "insert"}black{else}green{/if}>
|
||||
{$_debug_tpls[templates].filename|escape:html}</font>
|
||||
{if isset($_debug_tpls[templates].exec_time)}
|
||||
<span class="exectime">
|
||||
({$_debug_tpls[templates].exec_time|string_format:"%.5f"})
|
||||
{if %templates.index% eq 0}(total){/if}
|
||||
</span>
|
||||
{/if}
|
||||
<br />
|
||||
{sectionelse}
|
||||
<p>no templates included</p>
|
||||
{/section}
|
||||
</div>
|
||||
|
||||
<h2>assigned template variables</h2>
|
||||
|
||||
<table id="table_assigned_vars">
|
||||
{section name=vars loop=$_debug_keys}
|
||||
<tr class="{cycle values="odd,even"}">
|
||||
<th>{ldelim}${$_debug_keys[vars]|escape:'html'}{rdelim}</th>
|
||||
<td>{$_debug_vals[vars]|@debug_print_var}</td></tr>
|
||||
{sectionelse}
|
||||
<tr><td><p>no template variables assigned</p></td></tr>
|
||||
{/section}
|
||||
</table>
|
||||
|
||||
<h2>assigned config file variables (outer template scope)</h2>
|
||||
|
||||
<table id="table_config_vars">
|
||||
{section name=config_vars loop=$_debug_config_keys}
|
||||
<tr class="{cycle values="odd,even"}">
|
||||
<th>{ldelim}#{$_debug_config_keys[config_vars]|escape:'html'}#{rdelim}</th>
|
||||
<td>{$_debug_config_vals[config_vars]|@debug_print_var}</td></tr>
|
||||
{sectionelse}
|
||||
<tr><td><p>no config vars assigned</p></td></tr>
|
||||
{/section}
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
{/capture}
|
||||
{if isset($_smarty_debug_output) and $_smarty_debug_output eq "html"}
|
||||
{$debug_output}
|
||||
{else}
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
if ( self.name == '' ) {ldelim}
|
||||
var title = 'Console';
|
||||
{rdelim}
|
||||
else {ldelim}
|
||||
var title = 'Console_' + self.name;
|
||||
{rdelim}
|
||||
_smarty_console = window.open("",title.value,"width=680,height=600,resizable,scrollbars=yes");
|
||||
_smarty_console.document.write('{$debug_output|escape:'javascript'}');
|
||||
_smarty_console.document.close();
|
||||
// ]]>
|
||||
</script>
|
||||
{/if}
|
67
smarty/libs/internals/core.assemble_plugin_filepath.php
Normal file
67
smarty/libs/internals/core.assemble_plugin_filepath.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* assemble filepath of requested plugin
|
||||
*
|
||||
* @param string $type
|
||||
* @param string $name
|
||||
* @return string|false
|
||||
*/
|
||||
function smarty_core_assemble_plugin_filepath($params, &$smarty)
|
||||
{
|
||||
static $_filepaths_cache = array();
|
||||
|
||||
$_plugin_filename = $params['type'] . '.' . $params['name'] . '.php';
|
||||
if (isset($_filepaths_cache[$_plugin_filename])) {
|
||||
return $_filepaths_cache[$_plugin_filename];
|
||||
}
|
||||
$_return = false;
|
||||
|
||||
foreach ((array)$smarty->plugins_dir as $_plugin_dir) {
|
||||
|
||||
$_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename;
|
||||
|
||||
// see if path is relative
|
||||
if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)) {
|
||||
$_relative_paths[] = $_plugin_dir;
|
||||
// relative path, see if it is in the SMARTY_DIR
|
||||
if (@is_readable(SMARTY_DIR . $_plugin_filepath)) {
|
||||
$_return = SMARTY_DIR . $_plugin_filepath;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// try relative to cwd (or absolute)
|
||||
if (@is_readable($_plugin_filepath)) {
|
||||
$_return = $_plugin_filepath;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if($_return === false) {
|
||||
// still not found, try PHP include_path
|
||||
if(isset($_relative_paths)) {
|
||||
foreach ((array)$_relative_paths as $_plugin_dir) {
|
||||
|
||||
$_plugin_filepath = $_plugin_dir . DIRECTORY_SEPARATOR . $_plugin_filename;
|
||||
|
||||
$_params = array('file_path' => $_plugin_filepath);
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_include_path.php');
|
||||
if(smarty_core_get_include_path($_params, $smarty)) {
|
||||
$_return = $_params['new_file_path'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$_filepaths_cache[$_plugin_filename] = $_return;
|
||||
return $_return;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
43
smarty/libs/internals/core.assign_smarty_interface.php
Normal file
43
smarty/libs/internals/core.assign_smarty_interface.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty assign_smarty_interface core plugin
|
||||
*
|
||||
* Type: core<br>
|
||||
* Name: assign_smarty_interface<br>
|
||||
* Purpose: assign the $smarty interface variable
|
||||
* @param array Format: null
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_core_assign_smarty_interface($params, &$smarty)
|
||||
{
|
||||
if (isset($smarty->_smarty_vars) && isset($smarty->_smarty_vars['request'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
$_globals_map = array('g' => 'HTTP_GET_VARS',
|
||||
'p' => 'HTTP_POST_VARS',
|
||||
'c' => 'HTTP_COOKIE_VARS',
|
||||
's' => 'HTTP_SERVER_VARS',
|
||||
'e' => 'HTTP_ENV_VARS');
|
||||
|
||||
$_smarty_vars_request = array();
|
||||
|
||||
foreach (preg_split('!!', strtolower($smarty->request_vars_order)) as $_c) {
|
||||
if (isset($_globals_map[$_c])) {
|
||||
$_smarty_vars_request = array_merge($_smarty_vars_request, $GLOBALS[$_globals_map[$_c]]);
|
||||
}
|
||||
}
|
||||
$_smarty_vars_request = @array_merge($_smarty_vars_request, $GLOBALS['HTTP_SESSION_VARS']);
|
||||
|
||||
$smarty->_smarty_vars['request'] = $_smarty_vars_request;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
79
smarty/libs/internals/core.create_dir_structure.php
Normal file
79
smarty/libs/internals/core.create_dir_structure.php
Normal file
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* create full directory structure
|
||||
*
|
||||
* @param string $dir
|
||||
*/
|
||||
|
||||
// $dir
|
||||
|
||||
function smarty_core_create_dir_structure($params, &$smarty)
|
||||
{
|
||||
if (!file_exists($params['dir'])) {
|
||||
$_open_basedir_ini = ini_get('open_basedir');
|
||||
|
||||
if (DIRECTORY_SEPARATOR=='/') {
|
||||
/* unix-style paths */
|
||||
$_dir = $params['dir'];
|
||||
$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);
|
||||
$_new_dir = (substr($_dir, 0, 1)=='/') ? '/' : getcwd().'/';
|
||||
if($_use_open_basedir = !empty($_open_basedir_ini)) {
|
||||
$_open_basedirs = explode(':', $_open_basedir_ini);
|
||||
}
|
||||
|
||||
} else {
|
||||
/* other-style paths */
|
||||
$_dir = str_replace('\\','/', $params['dir']);
|
||||
$_dir_parts = preg_split('!/+!', $_dir, -1, PREG_SPLIT_NO_EMPTY);
|
||||
if (preg_match('!^((//)|([a-zA-Z]:/))!', $_dir, $_root_dir)) {
|
||||
/* leading "//" for network volume, or "[letter]:/" for full path */
|
||||
$_new_dir = $_root_dir[1];
|
||||
/* remove drive-letter from _dir_parts */
|
||||
if (isset($_root_dir[3])) array_shift($_dir_parts);
|
||||
|
||||
} else {
|
||||
$_new_dir = str_replace('\\', '/', getcwd()).'/';
|
||||
|
||||
}
|
||||
|
||||
if($_use_open_basedir = !empty($_open_basedir_ini)) {
|
||||
$_open_basedirs = explode(';', str_replace('\\', '/', $_open_basedir_ini));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* all paths use "/" only from here */
|
||||
foreach ($_dir_parts as $_dir_part) {
|
||||
$_new_dir .= $_dir_part;
|
||||
|
||||
if ($_use_open_basedir) {
|
||||
// do not attempt to test or make directories outside of open_basedir
|
||||
$_make_new_dir = false;
|
||||
foreach ($_open_basedirs as $_open_basedir) {
|
||||
if (substr($_new_dir, 0, strlen($_open_basedir)) == $_open_basedir) {
|
||||
$_make_new_dir = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$_make_new_dir = true;
|
||||
}
|
||||
|
||||
if ($_make_new_dir && !file_exists($_new_dir) && !@mkdir($_new_dir, $smarty->_dir_perms) && !is_dir($_new_dir)) {
|
||||
$smarty->trigger_error("problem creating directory '" . $_new_dir . "'");
|
||||
return false;
|
||||
}
|
||||
$_new_dir .= '/';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
61
smarty/libs/internals/core.display_debug_console.php
Normal file
61
smarty/libs/internals/core.display_debug_console.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty debug_console function plugin
|
||||
*
|
||||
* Type: core<br>
|
||||
* Name: display_debug_console<br>
|
||||
* Purpose: display the javascript debug console window
|
||||
* @param array Format: null
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_core_display_debug_console($params, &$smarty)
|
||||
{
|
||||
// we must force compile the debug template in case the environment
|
||||
// changed between separate applications.
|
||||
|
||||
if(empty($smarty->debug_tpl)) {
|
||||
// set path to debug template from SMARTY_DIR
|
||||
$smarty->debug_tpl = SMARTY_DIR . 'debug.tpl';
|
||||
if($smarty->security && is_file($smarty->debug_tpl)) {
|
||||
$smarty->secure_dir[] = realpath($smarty->debug_tpl);
|
||||
}
|
||||
$smarty->debug_tpl = 'file:' . SMARTY_DIR . 'debug.tpl';
|
||||
}
|
||||
|
||||
$_ldelim_orig = $smarty->left_delimiter;
|
||||
$_rdelim_orig = $smarty->right_delimiter;
|
||||
|
||||
$smarty->left_delimiter = '{';
|
||||
$smarty->right_delimiter = '}';
|
||||
|
||||
$_compile_id_orig = $smarty->_compile_id;
|
||||
$smarty->_compile_id = null;
|
||||
|
||||
$_compile_path = $smarty->_get_compile_path($smarty->debug_tpl);
|
||||
if ($smarty->_compile_resource($smarty->debug_tpl, $_compile_path))
|
||||
{
|
||||
ob_start();
|
||||
$smarty->_include($_compile_path);
|
||||
$_results = ob_get_contents();
|
||||
ob_end_clean();
|
||||
} else {
|
||||
$_results = '';
|
||||
}
|
||||
|
||||
$smarty->_compile_id = $_compile_id_orig;
|
||||
|
||||
$smarty->left_delimiter = $_ldelim_orig;
|
||||
$smarty->right_delimiter = $_rdelim_orig;
|
||||
|
||||
return $_results;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
44
smarty/libs/internals/core.get_include_path.php
Normal file
44
smarty/libs/internals/core.get_include_path.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get path to file from include_path
|
||||
*
|
||||
* @param string $file_path
|
||||
* @param string $new_file_path
|
||||
* @return boolean
|
||||
* @staticvar array|null
|
||||
*/
|
||||
|
||||
// $file_path, &$new_file_path
|
||||
|
||||
function smarty_core_get_include_path(&$params, &$smarty)
|
||||
{
|
||||
static $_path_array = null;
|
||||
|
||||
if(!isset($_path_array)) {
|
||||
$_ini_include_path = ini_get('include_path');
|
||||
|
||||
if(strstr($_ini_include_path,';')) {
|
||||
// windows pathnames
|
||||
$_path_array = explode(';',$_ini_include_path);
|
||||
} else {
|
||||
$_path_array = explode(':',$_ini_include_path);
|
||||
}
|
||||
}
|
||||
foreach ($_path_array as $_include_path) {
|
||||
if (@is_readable($_include_path . DIRECTORY_SEPARATOR . $params['file_path'])) {
|
||||
$params['new_file_path'] = $_include_path . DIRECTORY_SEPARATOR . $params['file_path'];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
23
smarty/libs/internals/core.get_microtime.php
Normal file
23
smarty/libs/internals/core.get_microtime.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get seconds and microseconds
|
||||
* @return double
|
||||
*/
|
||||
function smarty_core_get_microtime($params, &$smarty)
|
||||
{
|
||||
$mtime = microtime();
|
||||
$mtime = explode(" ", $mtime);
|
||||
$mtime = (double)($mtime[1]) + (double)($mtime[0]);
|
||||
return ($mtime);
|
||||
}
|
||||
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
80
smarty/libs/internals/core.get_php_resource.php
Normal file
80
smarty/libs/internals/core.get_php_resource.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Retrieves PHP script resource
|
||||
*
|
||||
* sets $php_resource to the returned resource
|
||||
* @param string $resource
|
||||
* @param string $resource_type
|
||||
* @param $php_resource
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
function smarty_core_get_php_resource(&$params, &$smarty)
|
||||
{
|
||||
|
||||
$params['resource_base_path'] = $smarty->trusted_dir;
|
||||
$smarty->_parse_resource_name($params, $smarty);
|
||||
|
||||
/*
|
||||
* Find out if the resource exists.
|
||||
*/
|
||||
|
||||
if ($params['resource_type'] == 'file') {
|
||||
$_readable = false;
|
||||
if(file_exists($params['resource_name']) && is_readable($params['resource_name'])) {
|
||||
$_readable = true;
|
||||
} else {
|
||||
// test for file in include_path
|
||||
$_params = array('file_path' => $params['resource_name']);
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_include_path.php');
|
||||
if(smarty_core_get_include_path($_params, $smarty)) {
|
||||
$_include_path = $_params['new_file_path'];
|
||||
$_readable = true;
|
||||
}
|
||||
}
|
||||
} else if ($params['resource_type'] != 'file') {
|
||||
$_template_source = null;
|
||||
$_readable = is_callable($smarty->_plugins['resource'][$params['resource_type']][0][0])
|
||||
&& call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][0],
|
||||
array($params['resource_name'], &$_template_source, &$smarty));
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the error function, depending on which class calls us.
|
||||
*/
|
||||
if (method_exists($smarty, '_syntax_error')) {
|
||||
$_error_funcc = '_syntax_error';
|
||||
} else {
|
||||
$_error_funcc = 'trigger_error';
|
||||
}
|
||||
|
||||
if ($_readable) {
|
||||
if ($smarty->security) {
|
||||
require_once(SMARTY_CORE_DIR . 'core.is_trusted.php');
|
||||
if (!smarty_core_is_trusted($params, $smarty)) {
|
||||
$smarty->$_error_funcc('(secure mode) ' . $params['resource_type'] . ':' . $params['resource_name'] . ' is not trusted');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$smarty->$_error_funcc($params['resource_type'] . ':' . $params['resource_name'] . ' is not readable');
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($params['resource_type'] == 'file') {
|
||||
$params['php_resource'] = $params['resource_name'];
|
||||
} else {
|
||||
$params['php_resource'] = $_template_source;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
59
smarty/libs/internals/core.is_secure.php
Normal file
59
smarty/libs/internals/core.is_secure.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* determines if a resource is secure or not.
|
||||
*
|
||||
* @param string $resource_type
|
||||
* @param string $resource_name
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $resource_type, $resource_name
|
||||
|
||||
function smarty_core_is_secure($params, &$smarty)
|
||||
{
|
||||
if (!$smarty->security || $smarty->security_settings['INCLUDE_ANY']) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($params['resource_type'] == 'file') {
|
||||
$_rp = realpath($params['resource_name']);
|
||||
if (isset($params['resource_base_path'])) {
|
||||
foreach ((array)$params['resource_base_path'] as $curr_dir) {
|
||||
if ( ($_cd = realpath($curr_dir)) !== false &&
|
||||
strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
|
||||
substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!empty($smarty->secure_dir)) {
|
||||
foreach ((array)$smarty->secure_dir as $curr_dir) {
|
||||
if ( ($_cd = realpath($curr_dir)) !== false) {
|
||||
if($_cd == $_rp) {
|
||||
return true;
|
||||
} elseif (strncmp($_rp, $_cd, strlen($_cd)) == 0 &&
|
||||
substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// resource is not on local file system
|
||||
return call_user_func_array(
|
||||
$smarty->_plugins['resource'][$params['resource_type']][0][2],
|
||||
array($params['resource_name'], &$smarty));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
47
smarty/libs/internals/core.is_trusted.php
Normal file
47
smarty/libs/internals/core.is_trusted.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* determines if a resource is trusted or not
|
||||
*
|
||||
* @param string $resource_type
|
||||
* @param string $resource_name
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $resource_type, $resource_name
|
||||
|
||||
function smarty_core_is_trusted($params, &$smarty)
|
||||
{
|
||||
$_smarty_trusted = false;
|
||||
if ($params['resource_type'] == 'file') {
|
||||
if (!empty($smarty->trusted_dir)) {
|
||||
$_rp = realpath($params['resource_name']);
|
||||
foreach ((array)$smarty->trusted_dir as $curr_dir) {
|
||||
if (!empty($curr_dir) && is_readable ($curr_dir)) {
|
||||
$_cd = realpath($curr_dir);
|
||||
if (strncmp($_rp, $_cd, strlen($_cd)) == 0
|
||||
&& substr($_rp, strlen($_cd), 1) == DIRECTORY_SEPARATOR ) {
|
||||
$_smarty_trusted = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// resource is not on local file system
|
||||
$_smarty_trusted = call_user_func_array($smarty->_plugins['resource'][$params['resource_type']][0][3],
|
||||
array($params['resource_name'], $smarty));
|
||||
}
|
||||
|
||||
return $_smarty_trusted;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
125
smarty/libs/internals/core.load_plugins.php
Normal file
125
smarty/libs/internals/core.load_plugins.php
Normal file
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Load requested plugins
|
||||
*
|
||||
* @param array $plugins
|
||||
*/
|
||||
|
||||
// $plugins
|
||||
|
||||
function smarty_core_load_plugins($params, &$smarty)
|
||||
{
|
||||
|
||||
foreach ($params['plugins'] as $_plugin_info) {
|
||||
list($_type, $_name, $_tpl_file, $_tpl_line, $_delayed_loading) = $_plugin_info;
|
||||
$_plugin = &$smarty->_plugins[$_type][$_name];
|
||||
|
||||
/*
|
||||
* We do not load plugin more than once for each instance of Smarty.
|
||||
* The following code checks for that. The plugin can also be
|
||||
* registered dynamically at runtime, in which case template file
|
||||
* and line number will be unknown, so we fill them in.
|
||||
*
|
||||
* The final element of the info array is a flag that indicates
|
||||
* whether the dynamically registered plugin function has been
|
||||
* checked for existence yet or not.
|
||||
*/
|
||||
if (isset($_plugin)) {
|
||||
if (empty($_plugin[3])) {
|
||||
if (!is_callable($_plugin[0])) {
|
||||
$smarty->_trigger_fatal_error("[plugin] $_type '$_name' is not implemented", $_tpl_file, $_tpl_line, __FILE__, __LINE__);
|
||||
} else {
|
||||
$_plugin[1] = $_tpl_file;
|
||||
$_plugin[2] = $_tpl_line;
|
||||
$_plugin[3] = true;
|
||||
if (!isset($_plugin[4])) $_plugin[4] = true; /* cacheable */
|
||||
}
|
||||
}
|
||||
continue;
|
||||
} else if ($_type == 'insert') {
|
||||
/*
|
||||
* For backwards compatibility, we check for insert functions in
|
||||
* the symbol table before trying to load them as a plugin.
|
||||
*/
|
||||
$_plugin_func = 'insert_' . $_name;
|
||||
if (function_exists($_plugin_func)) {
|
||||
$_plugin = array($_plugin_func, $_tpl_file, $_tpl_line, true, false);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$_plugin_file = $smarty->_get_plugin_filepath($_type, $_name);
|
||||
|
||||
if (! $_found = ($_plugin_file != false)) {
|
||||
$_message = "could not load plugin file '$_type.$_name.php'\n";
|
||||
}
|
||||
|
||||
/*
|
||||
* If plugin file is found, it -must- provide the properly named
|
||||
* plugin function. In case it doesn't, simply output the error and
|
||||
* do not fall back on any other method.
|
||||
*/
|
||||
if ($_found) {
|
||||
include_once $_plugin_file;
|
||||
|
||||
$_plugin_func = 'smarty_' . $_type . '_' . $_name;
|
||||
if (!function_exists($_plugin_func)) {
|
||||
$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", $_tpl_file, $_tpl_line, __FILE__, __LINE__);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* In case of insert plugins, their code may be loaded later via
|
||||
* 'script' attribute.
|
||||
*/
|
||||
else if ($_type == 'insert' && $_delayed_loading) {
|
||||
$_plugin_func = 'smarty_' . $_type . '_' . $_name;
|
||||
$_found = true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Plugin specific processing and error checking.
|
||||
*/
|
||||
if (!$_found) {
|
||||
if ($_type == 'modifier') {
|
||||
/*
|
||||
* In case modifier falls back on using PHP functions
|
||||
* directly, we only allow those specified in the security
|
||||
* context.
|
||||
*/
|
||||
if ($smarty->security && !in_array($_name, $smarty->security_settings['MODIFIER_FUNCS'])) {
|
||||
$_message = "(secure mode) modifier '$_name' is not allowed";
|
||||
} else {
|
||||
if (!function_exists($_name)) {
|
||||
$_message = "modifier '$_name' is not implemented";
|
||||
} else {
|
||||
$_plugin_func = $_name;
|
||||
$_found = true;
|
||||
}
|
||||
}
|
||||
} else if ($_type == 'function') {
|
||||
/*
|
||||
* This is a catch-all situation.
|
||||
*/
|
||||
$_message = "unknown tag - '$_name'";
|
||||
}
|
||||
}
|
||||
|
||||
if ($_found) {
|
||||
$smarty->_plugins[$_type][$_name] = array($_plugin_func, $_tpl_file, $_tpl_line, true, true);
|
||||
} else {
|
||||
// output error
|
||||
$smarty->_trigger_fatal_error('[plugin] ' . $_message, $_tpl_file, $_tpl_line, __FILE__, __LINE__);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
74
smarty/libs/internals/core.load_resource_plugin.php
Normal file
74
smarty/libs/internals/core.load_resource_plugin.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* load a resource plugin
|
||||
*
|
||||
* @param string $type
|
||||
*/
|
||||
|
||||
// $type
|
||||
|
||||
function smarty_core_load_resource_plugin($params, &$smarty)
|
||||
{
|
||||
/*
|
||||
* Resource plugins are not quite like the other ones, so they are
|
||||
* handled differently. The first element of plugin info is the array of
|
||||
* functions provided by the plugin, the second one indicates whether
|
||||
* all of them exist or not.
|
||||
*/
|
||||
|
||||
$_plugin = &$smarty->_plugins['resource'][$params['type']];
|
||||
if (isset($_plugin)) {
|
||||
if (!$_plugin[1] && count($_plugin[0])) {
|
||||
$_plugin[1] = true;
|
||||
foreach ($_plugin[0] as $_plugin_func) {
|
||||
if (!is_callable($_plugin_func)) {
|
||||
$_plugin[1] = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$_plugin[1]) {
|
||||
$smarty->_trigger_fatal_error("[plugin] resource '" . $params['type'] . "' is not implemented", null, null, __FILE__, __LINE__);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$_plugin_file = $smarty->_get_plugin_filepath('resource', $params['type']);
|
||||
$_found = ($_plugin_file != false);
|
||||
|
||||
if ($_found) { /*
|
||||
* If the plugin file is found, it -must- provide the properly named
|
||||
* plugin functions.
|
||||
*/
|
||||
include_once($_plugin_file);
|
||||
|
||||
/*
|
||||
* Locate functions that we require the plugin to provide.
|
||||
*/
|
||||
$_resource_ops = array('source', 'timestamp', 'secure', 'trusted');
|
||||
$_resource_funcs = array();
|
||||
foreach ($_resource_ops as $_op) {
|
||||
$_plugin_func = 'smarty_resource_' . $params['type'] . '_' . $_op;
|
||||
if (!function_exists($_plugin_func)) {
|
||||
$smarty->_trigger_fatal_error("[plugin] function $_plugin_func() not found in $_plugin_file", null, null, __FILE__, __LINE__);
|
||||
return;
|
||||
} else {
|
||||
$_resource_funcs[] = $_plugin_func;
|
||||
}
|
||||
}
|
||||
|
||||
$smarty->_plugins['resource'][$params['type']] = array($_resource_funcs, true);
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
71
smarty/libs/internals/core.process_cached_inserts.php
Normal file
71
smarty/libs/internals/core.process_cached_inserts.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Replace cached inserts with the actual results
|
||||
*
|
||||
* @param string $results
|
||||
* @return string
|
||||
*/
|
||||
function smarty_core_process_cached_inserts($params, &$smarty)
|
||||
{
|
||||
preg_match_all('!'.$smarty->_smarty_md5.'{insert_cache (.*)}'.$smarty->_smarty_md5.'!Uis',
|
||||
$params['results'], $match);
|
||||
list($cached_inserts, $insert_args) = $match;
|
||||
|
||||
for ($i = 0, $for_max = count($cached_inserts); $i < $for_max; $i++) {
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$debug_start_time = smarty_core_get_microtime($_params, $smarty);
|
||||
}
|
||||
|
||||
$args = unserialize($insert_args[$i]);
|
||||
$name = $args['name'];
|
||||
|
||||
if (isset($args['script'])) {
|
||||
$_params = array('resource_name' => $smarty->_dequote($args['script']));
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php');
|
||||
if(!smarty_core_get_php_resource($_params, $smarty)) {
|
||||
return false;
|
||||
}
|
||||
$resource_type = $_params['resource_type'];
|
||||
$php_resource = $_params['php_resource'];
|
||||
|
||||
|
||||
if ($resource_type == 'file') {
|
||||
$smarty->_include($php_resource, true);
|
||||
} else {
|
||||
$smarty->_eval($php_resource);
|
||||
}
|
||||
}
|
||||
|
||||
$function_name = $smarty->_plugins['insert'][$name][0];
|
||||
if (empty($args['assign'])) {
|
||||
$replace = $function_name($args, $smarty);
|
||||
} else {
|
||||
$smarty->assign($args['assign'], $function_name($args, $smarty));
|
||||
$replace = '';
|
||||
}
|
||||
|
||||
$params['results'] = substr_replace($params['results'], $replace, strpos($params['results'], $cached_inserts[$i]), strlen($cached_inserts[$i]));
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$smarty->_smarty_debug_info[] = array('type' => 'insert',
|
||||
'filename' => 'insert_'.$name,
|
||||
'depth' => $smarty->_inclusion_depth,
|
||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $debug_start_time);
|
||||
}
|
||||
}
|
||||
|
||||
return $params['results'];
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
37
smarty/libs/internals/core.process_compiled_include.php
Normal file
37
smarty/libs/internals/core.process_compiled_include.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Replace nocache-tags by results of the corresponding non-cacheable
|
||||
* functions and return it
|
||||
*
|
||||
* @param string $compiled_tpl
|
||||
* @param string $cached_source
|
||||
* @return string
|
||||
*/
|
||||
|
||||
function smarty_core_process_compiled_include($params, &$smarty)
|
||||
{
|
||||
$_cache_including = $smarty->_cache_including;
|
||||
$smarty->_cache_including = true;
|
||||
|
||||
$_return = $params['results'];
|
||||
|
||||
foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) {
|
||||
$smarty->_include($_include_file_path, true);
|
||||
}
|
||||
|
||||
foreach ($smarty->_cache_info['cache_serials'] as $_include_file_path=>$_cache_serial) {
|
||||
$_return = preg_replace_callback('!(\{nocache\:('.$_cache_serial.')#(\d+)\})!s',
|
||||
array(&$smarty, '_process_compiled_include_callback'),
|
||||
$_return);
|
||||
}
|
||||
$smarty->_cache_including = $_cache_including;
|
||||
return $_return;
|
||||
}
|
||||
|
||||
?>
|
101
smarty/libs/internals/core.read_cache_file.php
Normal file
101
smarty/libs/internals/core.read_cache_file.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* read a cache file, determine if it needs to be
|
||||
* regenerated or not
|
||||
*
|
||||
* @param string $tpl_file
|
||||
* @param string $cache_id
|
||||
* @param string $compile_id
|
||||
* @param string $results
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $tpl_file, $cache_id, $compile_id, &$results
|
||||
|
||||
function smarty_core_read_cache_file(&$params, &$smarty)
|
||||
{
|
||||
static $content_cache = array();
|
||||
|
||||
if ($smarty->force_compile) {
|
||||
// force compile enabled, always regenerate
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isset($content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']])) {
|
||||
list($params['results'], $smarty->_cache_info) = $content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']];
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!empty($smarty->cache_handler_func)) {
|
||||
// use cache_handler function
|
||||
call_user_func_array($smarty->cache_handler_func,
|
||||
array('read', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], null));
|
||||
} else {
|
||||
// use local cache file
|
||||
$_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']);
|
||||
$_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id);
|
||||
$params['results'] = $smarty->_read_file($_cache_file);
|
||||
}
|
||||
|
||||
if (empty($params['results'])) {
|
||||
// nothing to parse (error?), regenerate cache
|
||||
return false;
|
||||
}
|
||||
|
||||
$_contents = $params['results'];
|
||||
$_info_start = strpos($_contents, "\n") + 1;
|
||||
$_info_len = (int)substr($_contents, 0, $_info_start - 1);
|
||||
$_cache_info = unserialize(substr($_contents, $_info_start, $_info_len));
|
||||
$params['results'] = substr($_contents, $_info_start + $_info_len);
|
||||
|
||||
if ($smarty->caching == 2 && isset ($_cache_info['expires'])){
|
||||
// caching by expiration time
|
||||
if ($_cache_info['expires'] > -1 && (time() > $_cache_info['expires'])) {
|
||||
// cache expired, regenerate
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
// caching by lifetime
|
||||
if ($smarty->cache_lifetime > -1 && (time() - $_cache_info['timestamp'] > $smarty->cache_lifetime)) {
|
||||
// cache expired, regenerate
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($smarty->compile_check) {
|
||||
$_params = array('get_source' => false, 'quiet'=>true);
|
||||
foreach (array_keys($_cache_info['template']) as $_template_dep) {
|
||||
$_params['resource_name'] = $_template_dep;
|
||||
if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) {
|
||||
// template file has changed, regenerate cache
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_cache_info['config'])) {
|
||||
$_params = array('resource_base_path' => $smarty->config_dir, 'get_source' => false, 'quiet'=>true);
|
||||
foreach (array_keys($_cache_info['config']) as $_config_dep) {
|
||||
$_params['resource_name'] = $_config_dep;
|
||||
if (!$smarty->_fetch_resource_info($_params) || $_cache_info['timestamp'] < $_params['resource_timestamp']) {
|
||||
// config file has changed, regenerate cache
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$content_cache[$params['tpl_file'].','.$params['cache_id'].','.$params['compile_id']] = array($params['results'], $_cache_info);
|
||||
|
||||
$smarty->_cache_info = $_cache_info;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
71
smarty/libs/internals/core.rm_auto.php
Normal file
71
smarty/libs/internals/core.rm_auto.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* delete an automagically created file by name and id
|
||||
*
|
||||
* @param string $auto_base
|
||||
* @param string $auto_source
|
||||
* @param string $auto_id
|
||||
* @param integer $exp_time
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $auto_base, $auto_source = null, $auto_id = null, $exp_time = null
|
||||
|
||||
function smarty_core_rm_auto($params, &$smarty)
|
||||
{
|
||||
if (!@is_dir($params['auto_base']))
|
||||
return false;
|
||||
|
||||
if(!isset($params['auto_id']) && !isset($params['auto_source'])) {
|
||||
$_params = array(
|
||||
'dirname' => $params['auto_base'],
|
||||
'level' => 0,
|
||||
'exp_time' => $params['exp_time']
|
||||
);
|
||||
require_once(SMARTY_CORE_DIR . 'core.rmdir.php');
|
||||
$_res = smarty_core_rmdir($_params, $smarty);
|
||||
} else {
|
||||
$_tname = $smarty->_get_auto_filename($params['auto_base'], $params['auto_source'], $params['auto_id']);
|
||||
|
||||
if(isset($params['auto_source'])) {
|
||||
if (isset($params['extensions'])) {
|
||||
$_res = false;
|
||||
foreach ((array)$params['extensions'] as $_extension)
|
||||
$_res |= $smarty->_unlink($_tname.$_extension, $params['exp_time']);
|
||||
} else {
|
||||
$_res = $smarty->_unlink($_tname, $params['exp_time']);
|
||||
}
|
||||
} elseif ($smarty->use_sub_dirs) {
|
||||
$_params = array(
|
||||
'dirname' => $_tname,
|
||||
'level' => 1,
|
||||
'exp_time' => $params['exp_time']
|
||||
);
|
||||
require_once(SMARTY_CORE_DIR . 'core.rmdir.php');
|
||||
$_res = smarty_core_rmdir($_params, $smarty);
|
||||
} else {
|
||||
// remove matching file names
|
||||
$_handle = opendir($params['auto_base']);
|
||||
$_res = true;
|
||||
while (false !== ($_filename = readdir($_handle))) {
|
||||
if($_filename == '.' || $_filename == '..') {
|
||||
continue;
|
||||
} elseif (substr($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, 0, strlen($_tname)) == $_tname) {
|
||||
$_res &= (bool)$smarty->_unlink($params['auto_base'] . DIRECTORY_SEPARATOR . $_filename, $params['exp_time']);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $_res;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
54
smarty/libs/internals/core.rmdir.php
Normal file
54
smarty/libs/internals/core.rmdir.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* delete a dir recursively (level=0 -> keep root)
|
||||
* WARNING: no tests, it will try to remove what you tell it!
|
||||
*
|
||||
* @param string $dirname
|
||||
* @param integer $level
|
||||
* @param integer $exp_time
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
// $dirname, $level = 1, $exp_time = null
|
||||
|
||||
function smarty_core_rmdir($params, &$smarty)
|
||||
{
|
||||
if(!isset($params['level'])) { $params['level'] = 1; }
|
||||
if(!isset($params['exp_time'])) { $params['exp_time'] = null; }
|
||||
|
||||
if($_handle = @opendir($params['dirname'])) {
|
||||
|
||||
while (false !== ($_entry = readdir($_handle))) {
|
||||
if ($_entry != '.' && $_entry != '..') {
|
||||
if (@is_dir($params['dirname'] . DIRECTORY_SEPARATOR . $_entry)) {
|
||||
$_params = array(
|
||||
'dirname' => $params['dirname'] . DIRECTORY_SEPARATOR . $_entry,
|
||||
'level' => $params['level'] + 1,
|
||||
'exp_time' => $params['exp_time']
|
||||
);
|
||||
smarty_core_rmdir($_params, $smarty);
|
||||
}
|
||||
else {
|
||||
$smarty->_unlink($params['dirname'] . DIRECTORY_SEPARATOR . $_entry, $params['exp_time']);
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir($_handle);
|
||||
}
|
||||
|
||||
if ($params['level']) {
|
||||
return @rmdir($params['dirname']);
|
||||
}
|
||||
return (bool)$_handle;
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
71
smarty/libs/internals/core.run_insert_handler.php
Normal file
71
smarty/libs/internals/core.run_insert_handler.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Handle insert tags
|
||||
*
|
||||
* @param array $args
|
||||
* @return string
|
||||
*/
|
||||
function smarty_core_run_insert_handler($params, &$smarty)
|
||||
{
|
||||
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
$_debug_start_time = smarty_core_get_microtime($_params, $smarty);
|
||||
}
|
||||
|
||||
if ($smarty->caching) {
|
||||
$_arg_string = serialize($params['args']);
|
||||
$_name = $params['args']['name'];
|
||||
if (!isset($smarty->_cache_info['insert_tags'][$_name])) {
|
||||
$smarty->_cache_info['insert_tags'][$_name] = array('insert',
|
||||
$_name,
|
||||
$smarty->_plugins['insert'][$_name][1],
|
||||
$smarty->_plugins['insert'][$_name][2],
|
||||
!empty($params['args']['script']) ? true : false);
|
||||
}
|
||||
return $smarty->_smarty_md5."{insert_cache $_arg_string}".$smarty->_smarty_md5;
|
||||
} else {
|
||||
if (isset($params['args']['script'])) {
|
||||
$_params = array('resource_name' => $smarty->_dequote($params['args']['script']));
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php');
|
||||
if(!smarty_core_get_php_resource($_params, $smarty)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($_params['resource_type'] == 'file') {
|
||||
$smarty->_include($_params['php_resource'], true);
|
||||
} else {
|
||||
$smarty->_eval($_params['php_resource']);
|
||||
}
|
||||
unset($params['args']['script']);
|
||||
}
|
||||
|
||||
$_funcname = $smarty->_plugins['insert'][$params['args']['name']][0];
|
||||
$_content = $_funcname($params['args'], $smarty);
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$smarty->_smarty_debug_info[] = array('type' => 'insert',
|
||||
'filename' => 'insert_'.$params['args']['name'],
|
||||
'depth' => $smarty->_inclusion_depth,
|
||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time);
|
||||
}
|
||||
|
||||
if (!empty($params['args']["assign"])) {
|
||||
$smarty->assign($params['args']["assign"], $_content);
|
||||
} else {
|
||||
return $_content;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
50
smarty/libs/internals/core.smarty_include_php.php
Normal file
50
smarty/libs/internals/core.smarty_include_php.php
Normal file
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* called for included php files within templates
|
||||
*
|
||||
* @param string $smarty_file
|
||||
* @param string $smarty_assign variable to assign the included template's
|
||||
* output into
|
||||
* @param boolean $smarty_once uses include_once if this is true
|
||||
* @param array $smarty_include_vars associative array of vars from
|
||||
* {include file="blah" var=$var}
|
||||
*/
|
||||
|
||||
// $file, $assign, $once, $_smarty_include_vars
|
||||
|
||||
function smarty_core_smarty_include_php($params, &$smarty)
|
||||
{
|
||||
$_params = array('resource_name' => $params['smarty_file']);
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_php_resource.php');
|
||||
smarty_core_get_php_resource($_params, $smarty);
|
||||
$_smarty_resource_type = $_params['resource_type'];
|
||||
$_smarty_php_resource = $_params['php_resource'];
|
||||
|
||||
if (!empty($params['smarty_assign'])) {
|
||||
ob_start();
|
||||
if ($_smarty_resource_type == 'file') {
|
||||
$smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']);
|
||||
} else {
|
||||
$smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']);
|
||||
}
|
||||
$smarty->assign($params['smarty_assign'], ob_get_contents());
|
||||
ob_end_clean();
|
||||
} else {
|
||||
if ($_smarty_resource_type == 'file') {
|
||||
$smarty->_include($_smarty_php_resource, $params['smarty_once'], $params['smarty_include_vars']);
|
||||
} else {
|
||||
$smarty->_eval($_smarty_php_resource, $params['smarty_include_vars']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
96
smarty/libs/internals/core.write_cache_file.php
Normal file
96
smarty/libs/internals/core.write_cache_file.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Prepend the cache information to the cache file
|
||||
* and write it
|
||||
*
|
||||
* @param string $tpl_file
|
||||
* @param string $cache_id
|
||||
* @param string $compile_id
|
||||
* @param string $results
|
||||
* @return true|null
|
||||
*/
|
||||
|
||||
// $tpl_file, $cache_id, $compile_id, $results
|
||||
|
||||
function smarty_core_write_cache_file($params, &$smarty)
|
||||
{
|
||||
|
||||
// put timestamp in cache header
|
||||
$smarty->_cache_info['timestamp'] = time();
|
||||
if ($smarty->cache_lifetime > -1){
|
||||
// expiration set
|
||||
$smarty->_cache_info['expires'] = $smarty->_cache_info['timestamp'] + $smarty->cache_lifetime;
|
||||
} else {
|
||||
// cache will never expire
|
||||
$smarty->_cache_info['expires'] = -1;
|
||||
}
|
||||
|
||||
// collapse nocache.../nocache-tags
|
||||
if (preg_match_all('!\{(/?)nocache\:[0-9a-f]{32}#\d+\}!', $params['results'], $match, PREG_PATTERN_ORDER)) {
|
||||
// remove everything between every pair of outermost noache.../nocache-tags
|
||||
// and replace it by a single nocache-tag
|
||||
// this new nocache-tag will be replaced by dynamic contents in
|
||||
// smarty_core_process_compiled_includes() on a cache-read
|
||||
|
||||
$match_count = count($match[0]);
|
||||
$results = preg_split('!(\{/?nocache\:[0-9a-f]{32}#\d+\})!', $params['results'], -1, PREG_SPLIT_DELIM_CAPTURE);
|
||||
|
||||
$level = 0;
|
||||
$j = 0;
|
||||
for ($i=0, $results_count = count($results); $i < $results_count && $j < $match_count; $i++) {
|
||||
if ($results[$i] == $match[0][$j]) {
|
||||
// nocache tag
|
||||
if ($match[1][$j]) { // closing tag
|
||||
$level--;
|
||||
unset($results[$i]);
|
||||
} else { // opening tag
|
||||
if ($level++ > 0) unset($results[$i]);
|
||||
}
|
||||
$j++;
|
||||
} elseif ($level > 0) {
|
||||
unset($results[$i]);
|
||||
}
|
||||
}
|
||||
$params['results'] = implode('', $results);
|
||||
}
|
||||
$smarty->_cache_info['cache_serials'] = $smarty->_cache_serials;
|
||||
|
||||
// prepend the cache header info into cache file
|
||||
$_cache_info = serialize($smarty->_cache_info);
|
||||
$params['results'] = strlen($_cache_info) . "\n" . $_cache_info . $params['results'];
|
||||
|
||||
if (!empty($smarty->cache_handler_func)) {
|
||||
// use cache_handler function
|
||||
call_user_func_array($smarty->cache_handler_func,
|
||||
array('write', &$smarty, &$params['results'], $params['tpl_file'], $params['cache_id'], $params['compile_id'], $smarty->_cache_info['expires']));
|
||||
} else {
|
||||
// use local cache file
|
||||
|
||||
if(!@is_writable($smarty->cache_dir)) {
|
||||
// cache_dir not writable, see if it exists
|
||||
if(!@is_dir($smarty->cache_dir)) {
|
||||
$smarty->trigger_error('the $cache_dir \'' . $smarty->cache_dir . '\' does not exist, or is not a directory.', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
$smarty->trigger_error('unable to write to $cache_dir \'' . realpath($smarty->cache_dir) . '\'. Be sure $cache_dir is writable by the web server user.', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
$_auto_id = $smarty->_get_auto_id($params['cache_id'], $params['compile_id']);
|
||||
$_cache_file = $smarty->_get_auto_filename($smarty->cache_dir, $params['tpl_file'], $_auto_id);
|
||||
$_params = array('filename' => $_cache_file, 'contents' => $params['results'], 'create_dirs' => true);
|
||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php');
|
||||
smarty_core_write_file($_params, $smarty);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
91
smarty/libs/internals/core.write_compiled_include.php
Normal file
91
smarty/libs/internals/core.write_compiled_include.php
Normal file
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Extract non-cacheable parts out of compiled template and write it
|
||||
*
|
||||
* @param string $compile_path
|
||||
* @param string $template_compiled
|
||||
* @return boolean
|
||||
*/
|
||||
|
||||
function smarty_core_write_compiled_include($params, &$smarty)
|
||||
{
|
||||
$_tag_start = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{nocache\:('.$params['cache_serial'].')#(\d+)\}\'; endif;';
|
||||
$_tag_end = 'if \(\$this->caching && \!\$this->_cache_including\)\: echo \'\{/nocache\:(\\2)#(\\3)\}\'; endif;';
|
||||
|
||||
preg_match_all('!('.$_tag_start.'(.*)'.$_tag_end.')!Us',
|
||||
$params['compiled_content'], $_match_source, PREG_SET_ORDER);
|
||||
|
||||
// no nocache-parts found: done
|
||||
if (count($_match_source)==0) return;
|
||||
|
||||
// convert the matched php-code to functions
|
||||
$_include_compiled = "<?php /* Smarty version ".$smarty->_version.", created on ".strftime("%Y-%m-%d %H:%M:%S")."\n";
|
||||
$_include_compiled .= " compiled from " . strtr(urlencode($params['resource_name']), array('%2F'=>'/', '%3A'=>':')) . " */\n\n";
|
||||
|
||||
$_compile_path = $params['include_file_path'];
|
||||
|
||||
$smarty->_cache_serials[$_compile_path] = $params['cache_serial'];
|
||||
$_include_compiled .= "\$this->_cache_serials['".$_compile_path."'] = '".$params['cache_serial']."';\n\n?>";
|
||||
|
||||
$_include_compiled .= $params['plugins_code'];
|
||||
$_include_compiled .= "<?php";
|
||||
|
||||
$this_varname = ((double)phpversion() >= 5.0) ? '_smarty' : 'this';
|
||||
for ($_i = 0, $_for_max = count($_match_source); $_i < $_for_max; $_i++) {
|
||||
$_match =& $_match_source[$_i];
|
||||
$source = $_match[4];
|
||||
if ($this_varname == '_smarty') {
|
||||
/* rename $this to $_smarty in the sourcecode */
|
||||
$tokens = token_get_all('<?php ' . $_match[4]);
|
||||
|
||||
/* remove trailing <?php */
|
||||
$open_tag = '';
|
||||
while ($tokens) {
|
||||
$token = array_shift($tokens);
|
||||
if (is_array($token)) {
|
||||
$open_tag .= $token[1];
|
||||
} else {
|
||||
$open_tag .= $token;
|
||||
}
|
||||
if ($open_tag == '<?php ') break;
|
||||
}
|
||||
|
||||
for ($i=0, $count = count($tokens); $i < $count; $i++) {
|
||||
if (is_array($tokens[$i])) {
|
||||
if ($tokens[$i][0] == T_VARIABLE && $tokens[$i][1] == '$this') {
|
||||
$tokens[$i] = '$' . $this_varname;
|
||||
} else {
|
||||
$tokens[$i] = $tokens[$i][1];
|
||||
}
|
||||
}
|
||||
}
|
||||
$source = implode('', $tokens);
|
||||
}
|
||||
|
||||
/* add function to compiled include */
|
||||
$_include_compiled .= "
|
||||
function _smarty_tplfunc_$_match[2]_$_match[3](&\$$this_varname)
|
||||
{
|
||||
$source
|
||||
}
|
||||
|
||||
";
|
||||
}
|
||||
$_include_compiled .= "\n\n?>\n";
|
||||
|
||||
$_params = array('filename' => $_compile_path,
|
||||
'contents' => $_include_compiled, 'create_dirs' => true);
|
||||
|
||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php');
|
||||
smarty_core_write_file($_params, $smarty);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
?>
|
35
smarty/libs/internals/core.write_compiled_resource.php
Normal file
35
smarty/libs/internals/core.write_compiled_resource.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* write the compiled resource
|
||||
*
|
||||
* @param string $compile_path
|
||||
* @param string $compiled_content
|
||||
* @return true
|
||||
*/
|
||||
function smarty_core_write_compiled_resource($params, &$smarty)
|
||||
{
|
||||
if(!@is_writable($smarty->compile_dir)) {
|
||||
// compile_dir not writable, see if it exists
|
||||
if(!@is_dir($smarty->compile_dir)) {
|
||||
$smarty->trigger_error('the $compile_dir \'' . $smarty->compile_dir . '\' does not exist, or is not a directory.', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
$smarty->trigger_error('unable to write to $compile_dir \'' . realpath($smarty->compile_dir) . '\'. Be sure $compile_dir is writable by the web server user.', E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
|
||||
$_params = array('filename' => $params['compile_path'], 'contents' => $params['compiled_content'], 'create_dirs' => true);
|
||||
require_once(SMARTY_CORE_DIR . 'core.write_file.php');
|
||||
smarty_core_write_file($_params, $smarty);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
54
smarty/libs/internals/core.write_file.php
Normal file
54
smarty/libs/internals/core.write_file.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* write out a file to disk
|
||||
*
|
||||
* @param string $filename
|
||||
* @param string $contents
|
||||
* @param boolean $create_dirs
|
||||
* @return boolean
|
||||
*/
|
||||
function smarty_core_write_file($params, &$smarty)
|
||||
{
|
||||
$_dirname = dirname($params['filename']);
|
||||
|
||||
if ($params['create_dirs']) {
|
||||
$_params = array('dir' => $_dirname);
|
||||
require_once(SMARTY_CORE_DIR . 'core.create_dir_structure.php');
|
||||
smarty_core_create_dir_structure($_params, $smarty);
|
||||
}
|
||||
|
||||
// write to tmp file, then rename it to avoid file locking race condition
|
||||
$_tmp_file = tempnam($_dirname, 'wrt');
|
||||
|
||||
if (!($fd = @fopen($_tmp_file, 'wb'))) {
|
||||
$_tmp_file = $_dirname . DIRECTORY_SEPARATOR . uniqid('wrt');
|
||||
if (!($fd = @fopen($_tmp_file, 'wb'))) {
|
||||
$smarty->trigger_error("problem writing temporary file '$_tmp_file'");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
fwrite($fd, $params['contents']);
|
||||
fclose($fd);
|
||||
|
||||
if (DIRECTORY_SEPARATOR == '\\' || !@rename($_tmp_file, $params['filename'])) {
|
||||
// On platforms and filesystems that cannot overwrite with rename()
|
||||
// delete the file before renaming it -- because windows always suffers
|
||||
// this, it is short-circuited to avoid the initial rename() attempt
|
||||
@unlink($params['filename']);
|
||||
@rename($_tmp_file, $params['filename']);
|
||||
}
|
||||
@chmod($params['filename'], $smarty->_file_perms);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
103
smarty/libs/plugins/block.textformat.php
Normal file
103
smarty/libs/plugins/block.textformat.php
Normal file
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {textformat}{/textformat} block plugin
|
||||
*
|
||||
* Type: block function<br>
|
||||
* Name: textformat<br>
|
||||
* Purpose: format text a certain way with preset styles
|
||||
* or custom wrap/indent settings<br>
|
||||
* @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat}
|
||||
* (Smarty online manual)
|
||||
* @param array
|
||||
* <pre>
|
||||
* Params: style: string (email)
|
||||
* indent: integer (0)
|
||||
* wrap: integer (80)
|
||||
* wrap_char string ("\n")
|
||||
* indent_char: string (" ")
|
||||
* wrap_boundary: boolean (true)
|
||||
* </pre>
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string contents of the block
|
||||
* @param Smarty clever simulation of a method
|
||||
* @return string string $content re-formatted
|
||||
*/
|
||||
function smarty_block_textformat($params, $content, &$smarty)
|
||||
{
|
||||
if (is_null($content)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$style = null;
|
||||
$indent = 0;
|
||||
$indent_first = 0;
|
||||
$indent_char = ' ';
|
||||
$wrap = 80;
|
||||
$wrap_char = "\n";
|
||||
$wrap_cut = false;
|
||||
$assign = null;
|
||||
|
||||
foreach ($params as $_key => $_val) {
|
||||
switch ($_key) {
|
||||
case 'style':
|
||||
case 'indent_char':
|
||||
case 'wrap_char':
|
||||
case 'assign':
|
||||
$$_key = (string)$_val;
|
||||
break;
|
||||
|
||||
case 'indent':
|
||||
case 'indent_first':
|
||||
case 'wrap':
|
||||
$$_key = (int)$_val;
|
||||
break;
|
||||
|
||||
case 'wrap_cut':
|
||||
$$_key = (bool)$_val;
|
||||
break;
|
||||
|
||||
default:
|
||||
$smarty->trigger_error("textformat: unknown attribute '$_key'");
|
||||
}
|
||||
}
|
||||
|
||||
if ($style == 'email') {
|
||||
$wrap = 72;
|
||||
}
|
||||
|
||||
// split into paragraphs
|
||||
$_paragraphs = preg_split('![\r\n][\r\n]!',$content);
|
||||
$_output = '';
|
||||
|
||||
for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) {
|
||||
if ($_paragraphs[$_x] == '') {
|
||||
continue;
|
||||
}
|
||||
// convert mult. spaces & special chars to single space
|
||||
$_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]);
|
||||
// indent first line
|
||||
if($indent_first > 0) {
|
||||
$_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x];
|
||||
}
|
||||
// wordwrap sentences
|
||||
$_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut);
|
||||
// indent lines
|
||||
if($indent > 0) {
|
||||
$_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]);
|
||||
}
|
||||
}
|
||||
$_output = implode($wrap_char . $wrap_char, $_paragraphs);
|
||||
|
||||
return $assign ? $smarty->assign($assign, $_output) : $_output;
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
40
smarty/libs/plugins/compiler.assign.php
Normal file
40
smarty/libs/plugins/compiler.assign.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {assign} compiler function plugin
|
||||
*
|
||||
* Type: compiler function<br>
|
||||
* Name: assign<br>
|
||||
* Purpose: assign a value to a template variable
|
||||
* @link http://smarty.php.net/manual/en/language.custom.functions.php#LANGUAGE.FUNCTION.ASSIGN {assign}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com> (initial author)
|
||||
* @author messju mohr <messju at lammfellpuschen dot de> (conversion to compiler function)
|
||||
* @param string containing var-attribute and value-attribute
|
||||
* @param Smarty_Compiler
|
||||
*/
|
||||
function smarty_compiler_assign($tag_attrs, &$compiler)
|
||||
{
|
||||
$_params = $compiler->_parse_attrs($tag_attrs);
|
||||
|
||||
if (!isset($_params['var'])) {
|
||||
$compiler->_syntax_error("assign: missing 'var' parameter", E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isset($_params['value'])) {
|
||||
$compiler->_syntax_error("assign: missing 'value' parameter", E_USER_WARNING);
|
||||
return;
|
||||
}
|
||||
|
||||
return "\$this->assign({$_params['var']}, {$_params['value']});";
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
40
smarty/libs/plugins/function.assign_debug_info.php
Normal file
40
smarty/libs/plugins/function.assign_debug_info.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {assign_debug_info} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: assign_debug_info<br>
|
||||
* Purpose: assign debug info to the template<br>
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array unused in this plugin, this plugin uses {@link Smarty::$_config},
|
||||
* {@link Smarty::$_tpl_vars} and {@link Smarty::$_smarty_debug_info}
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_function_assign_debug_info($params, &$smarty)
|
||||
{
|
||||
$assigned_vars = $smarty->_tpl_vars;
|
||||
ksort($assigned_vars);
|
||||
if (@is_array($smarty->_config[0])) {
|
||||
$config_vars = $smarty->_config[0];
|
||||
ksort($config_vars);
|
||||
$smarty->assign("_debug_config_keys", array_keys($config_vars));
|
||||
$smarty->assign("_debug_config_vals", array_values($config_vars));
|
||||
}
|
||||
|
||||
$included_templates = $smarty->_smarty_debug_info;
|
||||
|
||||
$smarty->assign("_debug_keys", array_keys($assigned_vars));
|
||||
$smarty->assign("_debug_vals", array_values($assigned_vars));
|
||||
|
||||
$smarty->assign("_debug_tpls", $included_templates);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
142
smarty/libs/plugins/function.config_load.php
Normal file
142
smarty/libs/plugins/function.config_load.php
Normal file
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {config_load} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: config_load<br>
|
||||
* Purpose: load config file vars
|
||||
* @link http://smarty.php.net/manual/en/language.function.config.load.php {config_load}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author messju mohr <messju at lammfellpuschen dot de> (added use of resources)
|
||||
* @param array Format:
|
||||
* <pre>
|
||||
* array('file' => required config file name,
|
||||
* 'section' => optional config file section to load
|
||||
* 'scope' => local/parent/global
|
||||
* 'global' => overrides scope, setting to parent if true)
|
||||
* </pre>
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_function_config_load($params, &$smarty)
|
||||
{
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$_debug_start_time = smarty_core_get_microtime($_params, $smarty);
|
||||
}
|
||||
|
||||
$_file = isset($params['file']) ? $smarty->_dequote($params['file']) : null;
|
||||
$_section = isset($params['section']) ? $smarty->_dequote($params['section']) : null;
|
||||
$_scope = isset($params['scope']) ? $smarty->_dequote($params['scope']) : 'global';
|
||||
$_global = isset($params['global']) ? $smarty->_dequote($params['global']) : false;
|
||||
|
||||
if (!isset($_file) || strlen($_file) == 0) {
|
||||
$smarty->trigger_error("missing 'file' attribute in config_load tag", E_USER_ERROR, __FILE__, __LINE__);
|
||||
}
|
||||
|
||||
if (isset($_scope)) {
|
||||
if ($_scope != 'local' &&
|
||||
$_scope != 'parent' &&
|
||||
$_scope != 'global') {
|
||||
$smarty->trigger_error("invalid 'scope' attribute value", E_USER_ERROR, __FILE__, __LINE__);
|
||||
}
|
||||
} else {
|
||||
if ($_global) {
|
||||
$_scope = 'parent';
|
||||
} else {
|
||||
$_scope = 'local';
|
||||
}
|
||||
}
|
||||
|
||||
$_params = array('resource_name' => $_file,
|
||||
'resource_base_path' => $smarty->config_dir,
|
||||
'get_source' => false);
|
||||
$smarty->_parse_resource_name($_params);
|
||||
$_file_path = $_params['resource_type'] . ':' . $_params['resource_name'];
|
||||
if (isset($_section))
|
||||
$_compile_file = $smarty->_get_compile_path($_file_path.'|'.$_section);
|
||||
else
|
||||
$_compile_file = $smarty->_get_compile_path($_file_path);
|
||||
|
||||
if($smarty->force_compile || !file_exists($_compile_file)) {
|
||||
$_compile = true;
|
||||
} elseif ($smarty->compile_check) {
|
||||
$_params = array('resource_name' => $_file,
|
||||
'resource_base_path' => $smarty->config_dir,
|
||||
'get_source' => false);
|
||||
$_compile = $smarty->_fetch_resource_info($_params) &&
|
||||
$_params['resource_timestamp'] > filemtime($_compile_file);
|
||||
} else {
|
||||
$_compile = false;
|
||||
}
|
||||
|
||||
if($_compile) {
|
||||
// compile config file
|
||||
if(!is_object($smarty->_conf_obj)) {
|
||||
require_once SMARTY_DIR . $smarty->config_class . '.class.php';
|
||||
$smarty->_conf_obj = new $smarty->config_class();
|
||||
$smarty->_conf_obj->overwrite = $smarty->config_overwrite;
|
||||
$smarty->_conf_obj->booleanize = $smarty->config_booleanize;
|
||||
$smarty->_conf_obj->read_hidden = $smarty->config_read_hidden;
|
||||
$smarty->_conf_obj->fix_newlines = $smarty->config_fix_newlines;
|
||||
}
|
||||
|
||||
$_params = array('resource_name' => $_file,
|
||||
'resource_base_path' => $smarty->config_dir,
|
||||
$_params['get_source'] = true);
|
||||
if (!$smarty->_fetch_resource_info($_params)) {
|
||||
return;
|
||||
}
|
||||
$smarty->_conf_obj->set_file_contents($_file, $_params['source_content']);
|
||||
$_config_vars = array_merge($smarty->_conf_obj->get($_file),
|
||||
$smarty->_conf_obj->get($_file, $_section));
|
||||
if(function_exists('var_export')) {
|
||||
$_output = '<?php $_config_vars = ' . var_export($_config_vars, true) . '; ?>';
|
||||
} else {
|
||||
$_output = '<?php $_config_vars = unserialize(\'' . strtr(serialize($_config_vars),array('\''=>'\\\'', '\\'=>'\\\\')) . '\'); ?>';
|
||||
}
|
||||
$_params = (array('compile_path' => $_compile_file, 'compiled_content' => $_output, 'resource_timestamp' => $_params['resource_timestamp']));
|
||||
require_once(SMARTY_CORE_DIR . 'core.write_compiled_resource.php');
|
||||
smarty_core_write_compiled_resource($_params, $smarty);
|
||||
} else {
|
||||
include($_compile_file);
|
||||
}
|
||||
|
||||
if ($smarty->caching) {
|
||||
$smarty->_cache_info['config'][$_file] = true;
|
||||
}
|
||||
|
||||
$smarty->_config[0]['vars'] = @array_merge($smarty->_config[0]['vars'], $_config_vars);
|
||||
$smarty->_config[0]['files'][$_file] = true;
|
||||
|
||||
if ($_scope == 'parent') {
|
||||
$smarty->_config[1]['vars'] = @array_merge($smarty->_config[1]['vars'], $_config_vars);
|
||||
$smarty->_config[1]['files'][$_file] = true;
|
||||
} else if ($_scope == 'global') {
|
||||
for ($i = 1, $for_max = count($smarty->_config); $i < $for_max; $i++) {
|
||||
$smarty->_config[$i]['vars'] = @array_merge($smarty->_config[$i]['vars'], $_config_vars);
|
||||
$smarty->_config[$i]['files'][$_file] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($smarty->debugging) {
|
||||
$_params = array();
|
||||
require_once(SMARTY_CORE_DIR . 'core.get_microtime.php');
|
||||
$smarty->_smarty_debug_info[] = array('type' => 'config',
|
||||
'filename' => $_file.' ['.$_section.'] '.$_scope,
|
||||
'depth' => $smarty->_inclusion_depth,
|
||||
'exec_time' => smarty_core_get_microtime($_params, $smarty) - $_debug_start_time);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
80
smarty/libs/plugins/function.counter.php
Normal file
80
smarty/libs/plugins/function.counter.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {counter} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: counter<br>
|
||||
* Purpose: print out a counter value
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @link http://smarty.php.net/manual/en/language.function.counter.php {counter}
|
||||
* (Smarty online manual)
|
||||
* @param array parameters
|
||||
* @param Smarty
|
||||
* @return string|null
|
||||
*/
|
||||
function smarty_function_counter($params, &$smarty)
|
||||
{
|
||||
static $counters = array();
|
||||
|
||||
$name = (isset($params['name'])) ? $params['name'] : 'default';
|
||||
if (!isset($counters[$name])) {
|
||||
$counters[$name] = array(
|
||||
'start'=>1,
|
||||
'skip'=>1,
|
||||
'direction'=>'up',
|
||||
'count'=>1
|
||||
);
|
||||
}
|
||||
$counter =& $counters[$name];
|
||||
|
||||
if (isset($params['start'])) {
|
||||
$counter['start'] = $counter['count'] = (int)$params['start'];
|
||||
}
|
||||
|
||||
if (!empty($params['assign'])) {
|
||||
$counter['assign'] = $params['assign'];
|
||||
}
|
||||
|
||||
if (isset($counter['assign'])) {
|
||||
$smarty->assign($counter['assign'], $counter['count']);
|
||||
}
|
||||
|
||||
if (isset($params['print'])) {
|
||||
$print = (bool)$params['print'];
|
||||
} else {
|
||||
$print = empty($counter['assign']);
|
||||
}
|
||||
|
||||
if ($print) {
|
||||
$retval = $counter['count'];
|
||||
} else {
|
||||
$retval = null;
|
||||
}
|
||||
|
||||
if (isset($params['skip'])) {
|
||||
$counter['skip'] = $params['skip'];
|
||||
}
|
||||
|
||||
if (isset($params['direction'])) {
|
||||
$counter['direction'] = $params['direction'];
|
||||
}
|
||||
|
||||
if ($counter['direction'] == "down")
|
||||
$counter['count'] -= $counter['skip'];
|
||||
else
|
||||
$counter['count'] += $counter['skip'];
|
||||
|
||||
return $retval;
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
102
smarty/libs/plugins/function.cycle.php
Normal file
102
smarty/libs/plugins/function.cycle.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {cycle} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: cycle<br>
|
||||
* Date: May 3, 2002<br>
|
||||
* Purpose: cycle through given values<br>
|
||||
* Input:
|
||||
* - name = name of cycle (optional)
|
||||
* - values = comma separated list of values to cycle,
|
||||
* or an array of values to cycle
|
||||
* (this can be left out for subsequent calls)
|
||||
* - reset = boolean - resets given var to true
|
||||
* - print = boolean - print var or not. default is true
|
||||
* - advance = boolean - whether or not to advance the cycle
|
||||
* - delimiter = the value delimiter, default is ","
|
||||
* - assign = boolean, assigns to template var instead of
|
||||
* printed.
|
||||
*
|
||||
* Examples:<br>
|
||||
* <pre>
|
||||
* {cycle values="#eeeeee,#d0d0d0d"}
|
||||
* {cycle name=row values="one,two,three" reset=true}
|
||||
* {cycle name=row}
|
||||
* </pre>
|
||||
* @link http://smarty.php.net/manual/en/language.function.cycle.php {cycle}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credit to Mark Priatel <mpriatel@rogers.com>
|
||||
* @author credit to Gerard <gerard@interfold.com>
|
||||
* @author credit to Jason Sweat <jsweat_php@yahoo.com>
|
||||
* @version 1.3
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string|null
|
||||
*/
|
||||
function smarty_function_cycle($params, &$smarty)
|
||||
{
|
||||
static $cycle_vars;
|
||||
|
||||
$name = (empty($params['name'])) ? 'default' : $params['name'];
|
||||
$print = (isset($params['print'])) ? (bool)$params['print'] : true;
|
||||
$advance = (isset($params['advance'])) ? (bool)$params['advance'] : true;
|
||||
$reset = (isset($params['reset'])) ? (bool)$params['reset'] : false;
|
||||
|
||||
if (!in_array('values', array_keys($params))) {
|
||||
if(!isset($cycle_vars[$name]['values'])) {
|
||||
$smarty->trigger_error("cycle: missing 'values' parameter");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if(isset($cycle_vars[$name]['values'])
|
||||
&& $cycle_vars[$name]['values'] != $params['values'] ) {
|
||||
$cycle_vars[$name]['index'] = 0;
|
||||
}
|
||||
$cycle_vars[$name]['values'] = $params['values'];
|
||||
}
|
||||
|
||||
$cycle_vars[$name]['delimiter'] = (isset($params['delimiter'])) ? $params['delimiter'] : ',';
|
||||
|
||||
if(is_array($cycle_vars[$name]['values'])) {
|
||||
$cycle_array = $cycle_vars[$name]['values'];
|
||||
} else {
|
||||
$cycle_array = explode($cycle_vars[$name]['delimiter'],$cycle_vars[$name]['values']);
|
||||
}
|
||||
|
||||
if(!isset($cycle_vars[$name]['index']) || $reset ) {
|
||||
$cycle_vars[$name]['index'] = 0;
|
||||
}
|
||||
|
||||
if (isset($params['assign'])) {
|
||||
$print = false;
|
||||
$smarty->assign($params['assign'], $cycle_array[$cycle_vars[$name]['index']]);
|
||||
}
|
||||
|
||||
if($print) {
|
||||
$retval = $cycle_array[$cycle_vars[$name]['index']];
|
||||
} else {
|
||||
$retval = null;
|
||||
}
|
||||
|
||||
if($advance) {
|
||||
if ( $cycle_vars[$name]['index'] >= count($cycle_array) -1 ) {
|
||||
$cycle_vars[$name]['index'] = 0;
|
||||
} else {
|
||||
$cycle_vars[$name]['index']++;
|
||||
}
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
35
smarty/libs/plugins/function.debug.php
Normal file
35
smarty/libs/plugins/function.debug.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {debug} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: debug<br>
|
||||
* Date: July 1, 2002<br>
|
||||
* Purpose: popup debug window
|
||||
* @link http://smarty.php.net/manual/en/language.function.debug.php {debug}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string output from {@link Smarty::_generate_debug_output()}
|
||||
*/
|
||||
function smarty_function_debug($params, &$smarty)
|
||||
{
|
||||
if (isset($params['output'])) {
|
||||
$smarty->assign('_smarty_debug_output', $params['output']);
|
||||
}
|
||||
require_once(SMARTY_CORE_DIR . 'core.display_debug_console.php');
|
||||
return smarty_core_display_debug_console(null, $smarty);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
49
smarty/libs/plugins/function.eval.php
Normal file
49
smarty/libs/plugins/function.eval.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {eval} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: eval<br>
|
||||
* Purpose: evaluate a template variable as a template<br>
|
||||
* @link http://smarty.php.net/manual/en/language.function.eval.php {eval}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
*/
|
||||
function smarty_function_eval($params, &$smarty)
|
||||
{
|
||||
|
||||
if (!isset($params['var'])) {
|
||||
$smarty->trigger_error("eval: missing 'var' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
if($params['var'] == '') {
|
||||
return;
|
||||
}
|
||||
|
||||
$smarty->_compile_source('evaluated template', $params['var'], $_var_compiled);
|
||||
|
||||
ob_start();
|
||||
$smarty->_eval('?>' . $_var_compiled);
|
||||
$_contents = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
if (!empty($params['assign'])) {
|
||||
$smarty->assign($params['assign'], $_contents);
|
||||
} else {
|
||||
return $_contents;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
221
smarty/libs/plugins/function.fetch.php
Normal file
221
smarty/libs/plugins/function.fetch.php
Normal file
@@ -0,0 +1,221 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {fetch} plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: fetch<br>
|
||||
* Purpose: fetch file, web or ftp data and display results
|
||||
* @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string|null if the assign parameter is passed, Smarty assigns the
|
||||
* result to a template variable
|
||||
*/
|
||||
function smarty_function_fetch($params, &$smarty)
|
||||
{
|
||||
if (empty($params['file'])) {
|
||||
$smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty");
|
||||
return;
|
||||
}
|
||||
|
||||
$content = '';
|
||||
if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) {
|
||||
$_params = array('resource_type' => 'file', 'resource_name' => $params['file']);
|
||||
require_once(SMARTY_CORE_DIR . 'core.is_secure.php');
|
||||
if(!smarty_core_is_secure($_params, $smarty)) {
|
||||
$smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed');
|
||||
return;
|
||||
}
|
||||
|
||||
// fetch the file
|
||||
if($fp = @fopen($params['file'],'r')) {
|
||||
while(!feof($fp)) {
|
||||
$content .= fgets ($fp,4096);
|
||||
}
|
||||
fclose($fp);
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\'');
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// not a local file
|
||||
if(preg_match('!^http://!i',$params['file'])) {
|
||||
// http fetch
|
||||
if($uri_parts = parse_url($params['file'])) {
|
||||
// set defaults
|
||||
$host = $server_name = $uri_parts['host'];
|
||||
$timeout = 30;
|
||||
$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*";
|
||||
$agent = "Smarty Template Engine ".$smarty->_version;
|
||||
$referer = "";
|
||||
$uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/';
|
||||
$uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : '';
|
||||
$_is_proxy = false;
|
||||
if(empty($uri_parts['port'])) {
|
||||
$port = 80;
|
||||
} else {
|
||||
$port = $uri_parts['port'];
|
||||
}
|
||||
if(!empty($uri_parts['user'])) {
|
||||
$user = $uri_parts['user'];
|
||||
}
|
||||
if(!empty($uri_parts['pass'])) {
|
||||
$pass = $uri_parts['pass'];
|
||||
}
|
||||
// loop through parameters, setup headers
|
||||
foreach($params as $param_key => $param_value) {
|
||||
switch($param_key) {
|
||||
case "file":
|
||||
case "assign":
|
||||
case "assign_headers":
|
||||
break;
|
||||
case "user":
|
||||
if(!empty($param_value)) {
|
||||
$user = $param_value;
|
||||
}
|
||||
break;
|
||||
case "pass":
|
||||
if(!empty($param_value)) {
|
||||
$pass = $param_value;
|
||||
}
|
||||
break;
|
||||
case "accept":
|
||||
if(!empty($param_value)) {
|
||||
$accept = $param_value;
|
||||
}
|
||||
break;
|
||||
case "header":
|
||||
if(!empty($param_value)) {
|
||||
if(!preg_match('![\w\d-]+: .+!',$param_value)) {
|
||||
$smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'");
|
||||
return;
|
||||
} else {
|
||||
$extra_headers[] = $param_value;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "proxy_host":
|
||||
if(!empty($param_value)) {
|
||||
$proxy_host = $param_value;
|
||||
}
|
||||
break;
|
||||
case "proxy_port":
|
||||
if(!preg_match('!\D!', $param_value)) {
|
||||
$proxy_port = (int) $param_value;
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case "agent":
|
||||
if(!empty($param_value)) {
|
||||
$agent = $param_value;
|
||||
}
|
||||
break;
|
||||
case "referer":
|
||||
if(!empty($param_value)) {
|
||||
$referer = $param_value;
|
||||
}
|
||||
break;
|
||||
case "timeout":
|
||||
if(!preg_match('!\D!', $param_value)) {
|
||||
$timeout = (int) $param_value;
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'");
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(!empty($proxy_host) && !empty($proxy_port)) {
|
||||
$_is_proxy = true;
|
||||
$fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout);
|
||||
} else {
|
||||
$fp = fsockopen($server_name,$port,$errno,$errstr,$timeout);
|
||||
}
|
||||
|
||||
if(!$fp) {
|
||||
$smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)");
|
||||
return;
|
||||
} else {
|
||||
if($_is_proxy) {
|
||||
fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");
|
||||
} else {
|
||||
fputs($fp, "GET $uri HTTP/1.0\r\n");
|
||||
}
|
||||
if(!empty($host)) {
|
||||
fputs($fp, "Host: $host\r\n");
|
||||
}
|
||||
if(!empty($accept)) {
|
||||
fputs($fp, "Accept: $accept\r\n");
|
||||
}
|
||||
if(!empty($agent)) {
|
||||
fputs($fp, "User-Agent: $agent\r\n");
|
||||
}
|
||||
if(!empty($referer)) {
|
||||
fputs($fp, "Referer: $referer\r\n");
|
||||
}
|
||||
if(isset($extra_headers) && is_array($extra_headers)) {
|
||||
foreach($extra_headers as $curr_header) {
|
||||
fputs($fp, $curr_header."\r\n");
|
||||
}
|
||||
}
|
||||
if(!empty($user) && !empty($pass)) {
|
||||
fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");
|
||||
}
|
||||
|
||||
fputs($fp, "\r\n");
|
||||
while(!feof($fp)) {
|
||||
$content .= fgets($fp,4096);
|
||||
}
|
||||
fclose($fp);
|
||||
$csplit = split("\r\n\r\n",$content,2);
|
||||
|
||||
$content = $csplit[1];
|
||||
|
||||
if(!empty($params['assign_headers'])) {
|
||||
$smarty->assign($params['assign_headers'],split("\r\n",$csplit[0]));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// ftp fetch
|
||||
if($fp = @fopen($params['file'],'r')) {
|
||||
while(!feof($fp)) {
|
||||
$content .= fgets ($fp,4096);
|
||||
}
|
||||
fclose($fp);
|
||||
} else {
|
||||
$smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\'');
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (!empty($params['assign'])) {
|
||||
$smarty->assign($params['assign'],$content);
|
||||
} else {
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
143
smarty/libs/plugins/function.html_checkboxes.php
Normal file
143
smarty/libs/plugins/function.html_checkboxes.php
Normal file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_checkboxes} function plugin
|
||||
*
|
||||
* File: function.html_checkboxes.php<br>
|
||||
* Type: function<br>
|
||||
* Name: html_checkboxes<br>
|
||||
* Date: 24.Feb.2003<br>
|
||||
* Purpose: Prints out a list of checkbox input types<br>
|
||||
* Input:<br>
|
||||
* - name (optional) - string default "checkbox"
|
||||
* - values (required) - array
|
||||
* - options (optional) - associative array
|
||||
* - checked (optional) - array default not set
|
||||
* - separator (optional) - ie <br> or
|
||||
* - output (optional) - the output next to each checkbox
|
||||
* - assign (optional) - assign the output as an array to this variable
|
||||
* Examples:
|
||||
* <pre>
|
||||
* {html_checkboxes values=$ids output=$names}
|
||||
* {html_checkboxes values=$ids name='box' separator='<br>' output=$names}
|
||||
* {html_checkboxes values=$ids checked=$checked separator='<br>' output=$names}
|
||||
* </pre>
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.checkboxes.php {html_checkboxes}
|
||||
* (Smarty online manual)
|
||||
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
|
||||
* @author credits to Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_function_escape_special_chars()
|
||||
*/
|
||||
function smarty_function_html_checkboxes($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
|
||||
$name = 'checkbox';
|
||||
$values = null;
|
||||
$options = null;
|
||||
$selected = null;
|
||||
$separator = '';
|
||||
$labels = true;
|
||||
$output = null;
|
||||
|
||||
$extra = '';
|
||||
|
||||
foreach($params as $_key => $_val) {
|
||||
switch($_key) {
|
||||
case 'name':
|
||||
case 'separator':
|
||||
$$_key = $_val;
|
||||
break;
|
||||
|
||||
case 'labels':
|
||||
$$_key = (bool)$_val;
|
||||
break;
|
||||
|
||||
case 'options':
|
||||
$$_key = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'values':
|
||||
case 'output':
|
||||
$$_key = array_values((array)$_val);
|
||||
break;
|
||||
|
||||
case 'checked':
|
||||
case 'selected':
|
||||
$selected = array_map('strval', array_values((array)$_val));
|
||||
break;
|
||||
|
||||
case 'checkboxes':
|
||||
$smarty->trigger_error('html_checkboxes: the use of the "checkboxes" attribute is deprecated, use "options" instead', E_USER_WARNING);
|
||||
$options = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'assign':
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_val)) {
|
||||
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_checkboxes: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($options) && !isset($values))
|
||||
return ''; /* raise error here? */
|
||||
|
||||
settype($selected, 'array');
|
||||
$_html_result = array();
|
||||
|
||||
if (isset($options)) {
|
||||
|
||||
foreach ($options as $_key=>$_val)
|
||||
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
|
||||
|
||||
|
||||
} else {
|
||||
foreach ($values as $_i=>$_key) {
|
||||
$_val = isset($output[$_i]) ? $output[$_i] : '';
|
||||
$_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!empty($params['assign'])) {
|
||||
$smarty->assign($params['assign'], $_html_result);
|
||||
} else {
|
||||
return implode("\n",$_html_result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) {
|
||||
$_output = '';
|
||||
if ($labels) $_output .= '<label>';
|
||||
$_output .= '<input type="checkbox" name="'
|
||||
. smarty_function_escape_special_chars($name) . '[]" value="'
|
||||
. smarty_function_escape_special_chars($value) . '"';
|
||||
|
||||
if (in_array((string)$value, $selected)) {
|
||||
$_output .= ' checked="checked"';
|
||||
}
|
||||
$_output .= $extra . ' />' . $output;
|
||||
if ($labels) $_output .= '</label>';
|
||||
$_output .= $separator;
|
||||
|
||||
return $_output;
|
||||
}
|
||||
|
||||
?>
|
142
smarty/libs/plugins/function.html_image.php
Normal file
142
smarty/libs/plugins/function.html_image.php
Normal file
@@ -0,0 +1,142 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_image} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_image<br>
|
||||
* Date: Feb 24, 2003<br>
|
||||
* Purpose: format HTML tags for the image<br>
|
||||
* Input:<br>
|
||||
* - file = file (and path) of image (required)
|
||||
* - height = image height (optional, default actual height)
|
||||
* - width = image width (optional, default actual width)
|
||||
* - basedir = base directory for absolute paths, default
|
||||
* is environment variable DOCUMENT_ROOT
|
||||
* - path_prefix = prefix for path output (optional, default empty)
|
||||
*
|
||||
* Examples: {html_image file="/images/masthead.gif"}
|
||||
* Output: <img src="/images/masthead.gif" width=400 height=23>
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.image.php {html_image}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credits to Duda <duda@big.hu> - wrote first image function
|
||||
* in repository, helped with lots of functionality
|
||||
* @version 1.0
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_function_escape_special_chars()
|
||||
*/
|
||||
function smarty_function_html_image($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
|
||||
$alt = '';
|
||||
$file = '';
|
||||
$height = '';
|
||||
$width = '';
|
||||
$extra = '';
|
||||
$prefix = '';
|
||||
$suffix = '';
|
||||
$path_prefix = '';
|
||||
$server_vars = ($smarty->request_use_auto_globals) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS'];
|
||||
$basedir = isset($server_vars['DOCUMENT_ROOT']) ? $server_vars['DOCUMENT_ROOT'] : '';
|
||||
foreach($params as $_key => $_val) {
|
||||
switch($_key) {
|
||||
case 'file':
|
||||
case 'height':
|
||||
case 'width':
|
||||
case 'dpi':
|
||||
case 'path_prefix':
|
||||
case 'basedir':
|
||||
$$_key = $_val;
|
||||
break;
|
||||
|
||||
case 'alt':
|
||||
if(!is_array($_val)) {
|
||||
$$_key = smarty_function_escape_special_chars($_val);
|
||||
} else {
|
||||
$smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'link':
|
||||
case 'href':
|
||||
$prefix = '<a href="' . $_val . '">';
|
||||
$suffix = '</a>';
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_val)) {
|
||||
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_image: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($file)) {
|
||||
$smarty->trigger_error("html_image: missing 'file' parameter", E_USER_NOTICE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (substr($file,0,1) == '/') {
|
||||
$_image_path = $basedir . $file;
|
||||
} else {
|
||||
$_image_path = $file;
|
||||
}
|
||||
|
||||
if(!isset($params['width']) || !isset($params['height'])) {
|
||||
if(!$_image_data = @getimagesize($_image_path)) {
|
||||
if(!file_exists($_image_path)) {
|
||||
$smarty->trigger_error("html_image: unable to find '$_image_path'", E_USER_NOTICE);
|
||||
return;
|
||||
} else if(!is_readable($_image_path)) {
|
||||
$smarty->trigger_error("html_image: unable to read '$_image_path'", E_USER_NOTICE);
|
||||
return;
|
||||
} else {
|
||||
$smarty->trigger_error("html_image: '$_image_path' is not a valid image file", E_USER_NOTICE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ($smarty->security &&
|
||||
($_params = array('resource_type' => 'file', 'resource_name' => $_image_path)) &&
|
||||
(require_once(SMARTY_CORE_DIR . 'core.is_secure.php')) &&
|
||||
(!smarty_core_is_secure($_params, $smarty)) ) {
|
||||
$smarty->trigger_error("html_image: (secure) '$_image_path' not in secure directory", E_USER_NOTICE);
|
||||
}
|
||||
|
||||
if(!isset($params['width'])) {
|
||||
$width = $_image_data[0];
|
||||
}
|
||||
if(!isset($params['height'])) {
|
||||
$height = $_image_data[1];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(isset($params['dpi'])) {
|
||||
if(strstr($server_vars['HTTP_USER_AGENT'], 'Mac')) {
|
||||
$dpi_default = 72;
|
||||
} else {
|
||||
$dpi_default = 96;
|
||||
}
|
||||
$_resize = $dpi_default/$params['dpi'];
|
||||
$width = round($width * $_resize);
|
||||
$height = round($height * $_resize);
|
||||
}
|
||||
|
||||
return $prefix . '<img src="'.$path_prefix.$file.'" alt="'.$alt.'" width="'.$width.'" height="'.$height.'"'.$extra.' />' . $suffix;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
122
smarty/libs/plugins/function.html_options.php
Normal file
122
smarty/libs/plugins/function.html_options.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_options} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_options<br>
|
||||
* Input:<br>
|
||||
* - name (optional) - string default "select"
|
||||
* - values (required if no options supplied) - array
|
||||
* - options (required if no values supplied) - associative array
|
||||
* - selected (optional) - string default not set
|
||||
* - output (required if not options supplied) - array
|
||||
* Purpose: Prints the list of <option> tags generated from
|
||||
* the passed parameters
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.options.php {html_image}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_function_escape_special_chars()
|
||||
*/
|
||||
function smarty_function_html_options($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
|
||||
$name = null;
|
||||
$values = null;
|
||||
$options = null;
|
||||
$selected = array();
|
||||
$output = null;
|
||||
|
||||
$extra = '';
|
||||
|
||||
foreach($params as $_key => $_val) {
|
||||
switch($_key) {
|
||||
case 'name':
|
||||
$$_key = (string)$_val;
|
||||
break;
|
||||
|
||||
case 'options':
|
||||
$$_key = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'values':
|
||||
case 'output':
|
||||
$$_key = array_values((array)$_val);
|
||||
break;
|
||||
|
||||
case 'selected':
|
||||
$$_key = array_map('strval', array_values((array)$_val));
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_val)) {
|
||||
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_options: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($options) && !isset($values))
|
||||
return ''; /* raise error here? */
|
||||
|
||||
$_html_result = '';
|
||||
|
||||
if (isset($options)) {
|
||||
|
||||
foreach ($options as $_key=>$_val)
|
||||
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected);
|
||||
|
||||
} else {
|
||||
|
||||
foreach ($values as $_i=>$_key) {
|
||||
$_val = isset($output[$_i]) ? $output[$_i] : '';
|
||||
$_html_result .= smarty_function_html_options_optoutput($_key, $_val, $selected);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!empty($name)) {
|
||||
$_html_result = '<select name="' . $name . '"' . $extra . '>' . "\n" . $_html_result . '</select>' . "\n";
|
||||
}
|
||||
|
||||
return $_html_result;
|
||||
|
||||
}
|
||||
|
||||
function smarty_function_html_options_optoutput($key, $value, $selected) {
|
||||
if(!is_array($value)) {
|
||||
$_html_result = '<option label="' . smarty_function_escape_special_chars($value) . '" value="' .
|
||||
smarty_function_escape_special_chars($key) . '"';
|
||||
if (in_array((string)$key, $selected))
|
||||
$_html_result .= ' selected="selected"';
|
||||
$_html_result .= '>' . smarty_function_escape_special_chars($value) . '</option>' . "\n";
|
||||
} else {
|
||||
$_html_result = smarty_function_html_options_optgroup($key, $value, $selected);
|
||||
}
|
||||
return $_html_result;
|
||||
}
|
||||
|
||||
function smarty_function_html_options_optgroup($key, $values, $selected) {
|
||||
$optgroup_html = '<optgroup label="' . smarty_function_escape_special_chars($key) . '">' . "\n";
|
||||
foreach ($values as $key => $value) {
|
||||
$optgroup_html .= smarty_function_html_options_optoutput($key, $value, $selected);
|
||||
}
|
||||
$optgroup_html .= "</optgroup>\n";
|
||||
return $optgroup_html;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
156
smarty/libs/plugins/function.html_radios.php
Normal file
156
smarty/libs/plugins/function.html_radios.php
Normal file
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_radios} function plugin
|
||||
*
|
||||
* File: function.html_radios.php<br>
|
||||
* Type: function<br>
|
||||
* Name: html_radios<br>
|
||||
* Date: 24.Feb.2003<br>
|
||||
* Purpose: Prints out a list of radio input types<br>
|
||||
* Input:<br>
|
||||
* - name (optional) - string default "radio"
|
||||
* - values (required) - array
|
||||
* - options (optional) - associative array
|
||||
* - checked (optional) - array default not set
|
||||
* - separator (optional) - ie <br> or
|
||||
* - output (optional) - the output next to each radio button
|
||||
* - assign (optional) - assign the output as an array to this variable
|
||||
* Examples:
|
||||
* <pre>
|
||||
* {html_radios values=$ids output=$names}
|
||||
* {html_radios values=$ids name='box' separator='<br>' output=$names}
|
||||
* {html_radios values=$ids checked=$checked separator='<br>' output=$names}
|
||||
* </pre>
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.radios.php {html_radios}
|
||||
* (Smarty online manual)
|
||||
* @author Christopher Kvarme <christopher.kvarme@flashjab.com>
|
||||
* @author credits to Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_function_escape_special_chars()
|
||||
*/
|
||||
function smarty_function_html_radios($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
|
||||
$name = 'radio';
|
||||
$values = null;
|
||||
$options = null;
|
||||
$selected = null;
|
||||
$separator = '';
|
||||
$labels = true;
|
||||
$label_ids = false;
|
||||
$output = null;
|
||||
$extra = '';
|
||||
|
||||
foreach($params as $_key => $_val) {
|
||||
switch($_key) {
|
||||
case 'name':
|
||||
case 'separator':
|
||||
$$_key = (string)$_val;
|
||||
break;
|
||||
|
||||
case 'checked':
|
||||
case 'selected':
|
||||
if(is_array($_val)) {
|
||||
$smarty->trigger_error('html_radios: the "' . $_key . '" attribute cannot be an array', E_USER_WARNING);
|
||||
} else {
|
||||
$selected = (string)$_val;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'labels':
|
||||
case 'label_ids':
|
||||
$$_key = (bool)$_val;
|
||||
break;
|
||||
|
||||
case 'options':
|
||||
$$_key = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'values':
|
||||
case 'output':
|
||||
$$_key = array_values((array)$_val);
|
||||
break;
|
||||
|
||||
case 'radios':
|
||||
$smarty->trigger_error('html_radios: the use of the "radios" attribute is deprecated, use "options" instead', E_USER_WARNING);
|
||||
$options = (array)$_val;
|
||||
break;
|
||||
|
||||
case 'assign':
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_val)) {
|
||||
$extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_radios: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($options) && !isset($values))
|
||||
return ''; /* raise error here? */
|
||||
|
||||
$_html_result = array();
|
||||
|
||||
if (isset($options)) {
|
||||
|
||||
foreach ($options as $_key=>$_val)
|
||||
$_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids);
|
||||
|
||||
} else {
|
||||
|
||||
foreach ($values as $_i=>$_key) {
|
||||
$_val = isset($output[$_i]) ? $output[$_i] : '';
|
||||
$_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(!empty($params['assign'])) {
|
||||
$smarty->assign($params['assign'], $_html_result);
|
||||
} else {
|
||||
return implode("\n",$_html_result);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids) {
|
||||
$_output = '';
|
||||
if ($labels) {
|
||||
if($label_ids) {
|
||||
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!', '_', $name . '_' . $value));
|
||||
$_output .= '<label for="' . $_id . '">';
|
||||
} else {
|
||||
$_output .= '<label>';
|
||||
}
|
||||
}
|
||||
$_output .= '<input type="radio" name="'
|
||||
. smarty_function_escape_special_chars($name) . '" value="'
|
||||
. smarty_function_escape_special_chars($value) . '"';
|
||||
|
||||
if ($labels && $label_ids) $_output .= ' id="' . $_id . '"';
|
||||
|
||||
if ((string)$value==$selected) {
|
||||
$_output .= ' checked="checked"';
|
||||
}
|
||||
$_output .= $extra . ' />' . $output;
|
||||
if ($labels) $_output .= '</label>';
|
||||
$_output .= $separator;
|
||||
|
||||
return $_output;
|
||||
}
|
||||
|
||||
?>
|
331
smarty/libs/plugins/function.html_select_date.php
Normal file
331
smarty/libs/plugins/function.html_select_date.php
Normal file
@@ -0,0 +1,331 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Smarty {html_select_date} plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_select_date<br>
|
||||
* Purpose: Prints the dropdowns for date selection.
|
||||
*
|
||||
* ChangeLog:<br>
|
||||
* - 1.0 initial release
|
||||
* - 1.1 added support for +/- N syntax for begin
|
||||
* and end year values. (Monte)
|
||||
* - 1.2 added support for yyyy-mm-dd syntax for
|
||||
* time value. (Jan Rosier)
|
||||
* - 1.3 added support for choosing format for
|
||||
* month values (Gary Loescher)
|
||||
* - 1.3.1 added support for choosing format for
|
||||
* day values (Marcus Bointon)
|
||||
* - 1.3.2 support negative timestamps, force year
|
||||
* dropdown to include given date unless explicitly set (Monte)
|
||||
* - 1.3.4 fix behaviour of 0000-00-00 00:00:00 dates to match that
|
||||
* of 0000-00-00 dates (cybot, boots)
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.select.date.php {html_select_date}
|
||||
* (Smarty online manual)
|
||||
* @version 1.3.4
|
||||
* @author Andrei Zmievski
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_html_select_date($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
|
||||
require_once $smarty->_get_plugin_filepath('shared','make_timestamp');
|
||||
require_once $smarty->_get_plugin_filepath('function','html_options');
|
||||
/* Default values. */
|
||||
$prefix = "Date_";
|
||||
$start_year = strftime("%Y");
|
||||
$end_year = $start_year;
|
||||
$display_days = true;
|
||||
$display_months = true;
|
||||
$display_years = true;
|
||||
$month_format = "%B";
|
||||
/* Write months as numbers by default GL */
|
||||
$month_value_format = "%m";
|
||||
$day_format = "%02d";
|
||||
/* Write day values using this format MB */
|
||||
$day_value_format = "%d";
|
||||
$year_as_text = false;
|
||||
/* Display years in reverse order? Ie. 2000,1999,.... */
|
||||
$reverse_years = false;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Day]",
|
||||
"birthday[Month]" & "birthday[Year]". Can be combined with prefix */
|
||||
$field_array = null;
|
||||
/* <select size>'s of the different <select> tags.
|
||||
If not set, uses default dropdown. */
|
||||
$day_size = null;
|
||||
$month_size = null;
|
||||
$year_size = null;
|
||||
/* Unparsed attributes common to *ALL* the <select>/<input> tags.
|
||||
An example might be in the template: all_extra ='class ="foo"'. */
|
||||
$all_extra = null;
|
||||
/* Separate attributes for the tags. */
|
||||
$day_extra = null;
|
||||
$month_extra = null;
|
||||
$year_extra = null;
|
||||
/* Order in which to display the fields.
|
||||
"D" -> day, "M" -> month, "Y" -> year. */
|
||||
$field_order = 'MDY';
|
||||
/* String printed between the different fields. */
|
||||
$field_separator = "\n";
|
||||
$time = time();
|
||||
$all_empty = null;
|
||||
$day_empty = null;
|
||||
$month_empty = null;
|
||||
$year_empty = null;
|
||||
$extra_attrs = '';
|
||||
|
||||
foreach ($params as $_key=>$_value) {
|
||||
switch ($_key) {
|
||||
case 'prefix':
|
||||
case 'time':
|
||||
case 'start_year':
|
||||
case 'end_year':
|
||||
case 'month_format':
|
||||
case 'day_format':
|
||||
case 'day_value_format':
|
||||
case 'field_array':
|
||||
case 'day_size':
|
||||
case 'month_size':
|
||||
case 'year_size':
|
||||
case 'all_extra':
|
||||
case 'day_extra':
|
||||
case 'month_extra':
|
||||
case 'year_extra':
|
||||
case 'field_order':
|
||||
case 'field_separator':
|
||||
case 'month_value_format':
|
||||
case 'month_empty':
|
||||
case 'day_empty':
|
||||
case 'year_empty':
|
||||
$$_key = (string)$_value;
|
||||
break;
|
||||
|
||||
case 'all_empty':
|
||||
$$_key = (string)$_value;
|
||||
$day_empty = $month_empty = $year_empty = $all_empty;
|
||||
break;
|
||||
|
||||
case 'display_days':
|
||||
case 'display_months':
|
||||
case 'display_years':
|
||||
case 'year_as_text':
|
||||
case 'reverse_years':
|
||||
$$_key = (bool)$_value;
|
||||
break;
|
||||
|
||||
default:
|
||||
if(!is_array($_value)) {
|
||||
$extra_attrs .= ' '.$_key.'="'.smarty_function_escape_special_chars($_value).'"';
|
||||
} else {
|
||||
$smarty->trigger_error("html_select_date: extra attribute '$_key' cannot be an array", E_USER_NOTICE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (preg_match('!^-\d+$!', $time)) {
|
||||
// negative timestamp, use date()
|
||||
$time = date('Y-m-d', $time);
|
||||
}
|
||||
// If $time is not in format yyyy-mm-dd
|
||||
if (preg_match('/^(\d{0,4}-\d{0,2}-\d{0,2})/', $time, $found)) {
|
||||
$time = $found[1];
|
||||
} else {
|
||||
// use smarty_make_timestamp to get an unix timestamp and
|
||||
// strftime to make yyyy-mm-dd
|
||||
$time = strftime('%Y-%m-%d', smarty_make_timestamp($time));
|
||||
}
|
||||
// Now split this in pieces, which later can be used to set the select
|
||||
$time = explode("-", $time);
|
||||
|
||||
// make syntax "+N" or "-N" work with start_year and end_year
|
||||
if (preg_match('!^(\+|\-)\s*(\d+)$!', $end_year, $match)) {
|
||||
if ($match[1] == '+') {
|
||||
$end_year = strftime('%Y') + $match[2];
|
||||
} else {
|
||||
$end_year = strftime('%Y') - $match[2];
|
||||
}
|
||||
}
|
||||
if (preg_match('!^(\+|\-)\s*(\d+)$!', $start_year, $match)) {
|
||||
if ($match[1] == '+') {
|
||||
$start_year = strftime('%Y') + $match[2];
|
||||
} else {
|
||||
$start_year = strftime('%Y') - $match[2];
|
||||
}
|
||||
}
|
||||
if (strlen($time[0]) > 0) {
|
||||
if ($start_year > $time[0] && !isset($params['start_year'])) {
|
||||
// force start year to include given date if not explicitly set
|
||||
$start_year = $time[0];
|
||||
}
|
||||
if($end_year < $time[0] && !isset($params['end_year'])) {
|
||||
// force end year to include given date if not explicitly set
|
||||
$end_year = $time[0];
|
||||
}
|
||||
}
|
||||
|
||||
$field_order = strtoupper($field_order);
|
||||
|
||||
$html_result = $month_result = $day_result = $year_result = "";
|
||||
|
||||
$field_separator_count = -1;
|
||||
if ($display_months) {
|
||||
$field_separator_count++;
|
||||
$month_names = array();
|
||||
$month_values = array();
|
||||
if(isset($month_empty)) {
|
||||
$month_names[''] = $month_empty;
|
||||
$month_values[''] = '';
|
||||
}
|
||||
for ($i = 1; $i <= 12; $i++) {
|
||||
$month_names[$i] = strftime($month_format, mktime(0, 0, 0, $i, 1, 2000));
|
||||
$month_values[$i] = strftime($month_value_format, mktime(0, 0, 0, $i, 1, 2000));
|
||||
}
|
||||
|
||||
$month_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$month_result .= '"' . $field_array . '[' . $prefix . 'Month]"';
|
||||
} else {
|
||||
$month_result .= '"' . $prefix . 'Month"';
|
||||
}
|
||||
if (null !== $month_size){
|
||||
$month_result .= ' size="' . $month_size . '"';
|
||||
}
|
||||
if (null !== $month_extra){
|
||||
$month_result .= ' ' . $month_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$month_result .= ' ' . $all_extra;
|
||||
}
|
||||
$month_result .= $extra_attrs . '>'."\n";
|
||||
|
||||
$month_result .= smarty_function_html_options(array('output' => $month_names,
|
||||
'values' => $month_values,
|
||||
'selected' => (int)$time[1] ? strftime($month_value_format, mktime(0, 0, 0, (int)$time[1], 1, 2000)) : '',
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$month_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_days) {
|
||||
$field_separator_count++;
|
||||
$days = array();
|
||||
if (isset($day_empty)) {
|
||||
$days[''] = $day_empty;
|
||||
$day_values[''] = '';
|
||||
}
|
||||
for ($i = 1; $i <= 31; $i++) {
|
||||
$days[] = sprintf($day_format, $i);
|
||||
$day_values[] = sprintf($day_value_format, $i);
|
||||
}
|
||||
|
||||
$day_result .= '<select name=';
|
||||
if (null !== $field_array){
|
||||
$day_result .= '"' . $field_array . '[' . $prefix . 'Day]"';
|
||||
} else {
|
||||
$day_result .= '"' . $prefix . 'Day"';
|
||||
}
|
||||
if (null !== $day_size){
|
||||
$day_result .= ' size="' . $day_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$day_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $day_extra){
|
||||
$day_result .= ' ' . $day_extra;
|
||||
}
|
||||
$day_result .= $extra_attrs . '>'."\n";
|
||||
$day_result .= smarty_function_html_options(array('output' => $days,
|
||||
'values' => $day_values,
|
||||
'selected' => $time[2],
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$day_result .= '</select>';
|
||||
}
|
||||
|
||||
if ($display_years) {
|
||||
$field_separator_count++;
|
||||
if (null !== $field_array){
|
||||
$year_name = $field_array . '[' . $prefix . 'Year]';
|
||||
} else {
|
||||
$year_name = $prefix . 'Year';
|
||||
}
|
||||
if ($year_as_text) {
|
||||
$year_result .= '<input type="text" name="' . $year_name . '" value="' . $time[0] . '" size="4" maxlength="4"';
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= ' />';
|
||||
} else {
|
||||
$years = range((int)$start_year, (int)$end_year);
|
||||
if ($reverse_years) {
|
||||
rsort($years, SORT_NUMERIC);
|
||||
} else {
|
||||
sort($years, SORT_NUMERIC);
|
||||
}
|
||||
$yearvals = $years;
|
||||
if(isset($year_empty)) {
|
||||
array_unshift($years, $year_empty);
|
||||
array_unshift($yearvals, '');
|
||||
}
|
||||
$year_result .= '<select name="' . $year_name . '"';
|
||||
if (null !== $year_size){
|
||||
$year_result .= ' size="' . $year_size . '"';
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$year_result .= ' ' . $all_extra;
|
||||
}
|
||||
if (null !== $year_extra){
|
||||
$year_result .= ' ' . $year_extra;
|
||||
}
|
||||
$year_result .= $extra_attrs . '>'."\n";
|
||||
$year_result .= smarty_function_html_options(array('output' => $years,
|
||||
'values' => $yearvals,
|
||||
'selected' => $time[0],
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$year_result .= '</select>';
|
||||
}
|
||||
}
|
||||
|
||||
// Loop thru the field_order field
|
||||
for ($i = 0; $i <= 2; $i++){
|
||||
$c = substr($field_order, $i, 1);
|
||||
switch ($c){
|
||||
case 'D':
|
||||
$html_result .= $day_result;
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
$html_result .= $month_result;
|
||||
break;
|
||||
|
||||
case 'Y':
|
||||
$html_result .= $year_result;
|
||||
break;
|
||||
}
|
||||
// Add the field seperator
|
||||
if($i < $field_separator_count) {
|
||||
$html_result .= $field_separator;
|
||||
}
|
||||
}
|
||||
|
||||
return $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
194
smarty/libs/plugins/function.html_select_time.php
Normal file
194
smarty/libs/plugins/function.html_select_time.php
Normal file
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_select_time} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_select_time<br>
|
||||
* Purpose: Prints the dropdowns for time selection
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.select.time.php {html_select_time}
|
||||
* (Smarty online manual)
|
||||
* @author Roberto Berto <roberto@berto.net>
|
||||
* @credits Monte Ohrt <monte AT ohrt DOT com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
* @uses smarty_make_timestamp()
|
||||
*/
|
||||
function smarty_function_html_select_time($params, &$smarty)
|
||||
{
|
||||
require_once $smarty->_get_plugin_filepath('shared','make_timestamp');
|
||||
require_once $smarty->_get_plugin_filepath('function','html_options');
|
||||
/* Default values. */
|
||||
$prefix = "Time_";
|
||||
$time = time();
|
||||
$display_hours = true;
|
||||
$display_minutes = true;
|
||||
$display_seconds = true;
|
||||
$display_meridian = true;
|
||||
$use_24_hours = true;
|
||||
$minute_interval = 1;
|
||||
$second_interval = 1;
|
||||
/* Should the select boxes be part of an array when returned from PHP?
|
||||
e.g. setting it to "birthday", would create "birthday[Hour]",
|
||||
"birthday[Minute]", "birthday[Seconds]" & "birthday[Meridian]".
|
||||
Can be combined with prefix. */
|
||||
$field_array = null;
|
||||
$all_extra = null;
|
||||
$hour_extra = null;
|
||||
$minute_extra = null;
|
||||
$second_extra = null;
|
||||
$meridian_extra = null;
|
||||
|
||||
foreach ($params as $_key=>$_value) {
|
||||
switch ($_key) {
|
||||
case 'prefix':
|
||||
case 'time':
|
||||
case 'field_array':
|
||||
case 'all_extra':
|
||||
case 'hour_extra':
|
||||
case 'minute_extra':
|
||||
case 'second_extra':
|
||||
case 'meridian_extra':
|
||||
$$_key = (string)$_value;
|
||||
break;
|
||||
|
||||
case 'display_hours':
|
||||
case 'display_minutes':
|
||||
case 'display_seconds':
|
||||
case 'display_meridian':
|
||||
case 'use_24_hours':
|
||||
$$_key = (bool)$_value;
|
||||
break;
|
||||
|
||||
case 'minute_interval':
|
||||
case 'second_interval':
|
||||
$$_key = (int)$_value;
|
||||
break;
|
||||
|
||||
default:
|
||||
$smarty->trigger_error("[html_select_time] unknown parameter $_key", E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
$time = smarty_make_timestamp($time);
|
||||
|
||||
$html_result = '';
|
||||
|
||||
if ($display_hours) {
|
||||
$hours = $use_24_hours ? range(0, 23) : range(1, 12);
|
||||
$hour_fmt = $use_24_hours ? '%H' : '%I';
|
||||
for ($i = 0, $for_max = count($hours); $i < $for_max; $i++)
|
||||
$hours[$i] = sprintf('%02d', $hours[$i]);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Hour]"';
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Hour"';
|
||||
}
|
||||
if (null !== $hour_extra){
|
||||
$html_result .= ' ' . $hour_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$html_result .= ' ' . $all_extra;
|
||||
}
|
||||
$html_result .= '>'."\n";
|
||||
$html_result .= smarty_function_html_options(array('output' => $hours,
|
||||
'values' => $hours,
|
||||
'selected' => strftime($hour_fmt, $time),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_minutes) {
|
||||
$all_minutes = range(0, 59);
|
||||
for ($i = 0, $for_max = count($all_minutes); $i < $for_max; $i+= $minute_interval)
|
||||
$minutes[] = sprintf('%02d', $all_minutes[$i]);
|
||||
$selected = intval(floor(strftime('%M', $time) / $minute_interval) * $minute_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Minute]"';
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Minute"';
|
||||
}
|
||||
if (null !== $minute_extra){
|
||||
$html_result .= ' ' . $minute_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$html_result .= ' ' . $all_extra;
|
||||
}
|
||||
$html_result .= '>'."\n";
|
||||
|
||||
$html_result .= smarty_function_html_options(array('output' => $minutes,
|
||||
'values' => $minutes,
|
||||
'selected' => $selected,
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_seconds) {
|
||||
$all_seconds = range(0, 59);
|
||||
for ($i = 0, $for_max = count($all_seconds); $i < $for_max; $i+= $second_interval)
|
||||
$seconds[] = sprintf('%02d', $all_seconds[$i]);
|
||||
$selected = intval(floor(strftime('%S', $time) / $second_interval) * $second_interval);
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Second]"';
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Second"';
|
||||
}
|
||||
|
||||
if (null !== $second_extra){
|
||||
$html_result .= ' ' . $second_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$html_result .= ' ' . $all_extra;
|
||||
}
|
||||
$html_result .= '>'."\n";
|
||||
|
||||
$html_result .= smarty_function_html_options(array('output' => $seconds,
|
||||
'values' => $seconds,
|
||||
'selected' => $selected,
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
if ($display_meridian && !$use_24_hours) {
|
||||
$html_result .= '<select name=';
|
||||
if (null !== $field_array) {
|
||||
$html_result .= '"' . $field_array . '[' . $prefix . 'Meridian]"';
|
||||
} else {
|
||||
$html_result .= '"' . $prefix . 'Meridian"';
|
||||
}
|
||||
|
||||
if (null !== $meridian_extra){
|
||||
$html_result .= ' ' . $meridian_extra;
|
||||
}
|
||||
if (null !== $all_extra){
|
||||
$html_result .= ' ' . $all_extra;
|
||||
}
|
||||
$html_result .= '>'."\n";
|
||||
|
||||
$html_result .= smarty_function_html_options(array('output' => array('AM', 'PM'),
|
||||
'values' => array('am', 'pm'),
|
||||
'selected' => strtolower(strftime('%p', $time)),
|
||||
'print_result' => false),
|
||||
$smarty);
|
||||
$html_result .= "</select>\n";
|
||||
}
|
||||
|
||||
return $html_result;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
177
smarty/libs/plugins/function.html_table.php
Normal file
177
smarty/libs/plugins/function.html_table.php
Normal file
@@ -0,0 +1,177 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {html_table} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: html_table<br>
|
||||
* Date: Feb 17, 2003<br>
|
||||
* Purpose: make an html table from an array of data<br>
|
||||
* Input:<br>
|
||||
* - loop = array to loop through
|
||||
* - cols = number of columns, comma separated list of column names
|
||||
* or array of column names
|
||||
* - rows = number of rows
|
||||
* - table_attr = table attributes
|
||||
* - th_attr = table heading attributes (arrays are cycled)
|
||||
* - tr_attr = table row attributes (arrays are cycled)
|
||||
* - td_attr = table cell attributes (arrays are cycled)
|
||||
* - trailpad = value to pad trailing cells with
|
||||
* - caption = text for caption element
|
||||
* - vdir = vertical direction (default: "down", means top-to-bottom)
|
||||
* - hdir = horizontal direction (default: "right", means left-to-right)
|
||||
* - inner = inner loop (default "cols": print $loop line by line,
|
||||
* $loop will be printed column by column otherwise)
|
||||
*
|
||||
*
|
||||
* Examples:
|
||||
* <pre>
|
||||
* {table loop=$data}
|
||||
* {table loop=$data cols=4 tr_attr='"bgcolor=red"'}
|
||||
* {table loop=$data cols="first,second,third" tr_attr=$colors}
|
||||
* </pre>
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credit to Messju Mohr <messju at lammfellpuschen dot de>
|
||||
* @author credit to boots <boots dot smarty at yahoo dot com>
|
||||
* @version 1.1
|
||||
* @link http://smarty.php.net/manual/en/language.function.html.table.php {html_table}
|
||||
* (Smarty online manual)
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_html_table($params, &$smarty)
|
||||
{
|
||||
$table_attr = 'border="1"';
|
||||
$tr_attr = '';
|
||||
$th_attr = '';
|
||||
$td_attr = '';
|
||||
$cols = $cols_count = 3;
|
||||
$rows = 3;
|
||||
$trailpad = ' ';
|
||||
$vdir = 'down';
|
||||
$hdir = 'right';
|
||||
$inner = 'cols';
|
||||
$caption = '';
|
||||
|
||||
if (!isset($params['loop'])) {
|
||||
$smarty->trigger_error("html_table: missing 'loop' parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($params as $_key=>$_value) {
|
||||
switch ($_key) {
|
||||
case 'loop':
|
||||
$$_key = (array)$_value;
|
||||
break;
|
||||
|
||||
case 'cols':
|
||||
if (is_array($_value) && !empty($_value)) {
|
||||
$cols = $_value;
|
||||
$cols_count = count($_value);
|
||||
} elseif (!is_numeric($_value) && is_string($_value) && !empty($_value)) {
|
||||
$cols = explode(',', $_value);
|
||||
$cols_count = count($cols);
|
||||
} elseif (!empty($_value)) {
|
||||
$cols_count = (int)$_value;
|
||||
} else {
|
||||
$cols_count = $cols;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'rows':
|
||||
$$_key = (int)$_value;
|
||||
break;
|
||||
|
||||
case 'table_attr':
|
||||
case 'trailpad':
|
||||
case 'hdir':
|
||||
case 'vdir':
|
||||
case 'inner':
|
||||
case 'caption':
|
||||
$$_key = (string)$_value;
|
||||
break;
|
||||
|
||||
case 'tr_attr':
|
||||
case 'td_attr':
|
||||
case 'th_attr':
|
||||
$$_key = $_value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$loop_count = count($loop);
|
||||
if (empty($params['rows'])) {
|
||||
/* no rows specified */
|
||||
$rows = ceil($loop_count/$cols_count);
|
||||
} elseif (empty($params['cols'])) {
|
||||
if (!empty($params['rows'])) {
|
||||
/* no cols specified, but rows */
|
||||
$cols_count = ceil($loop_count/$rows);
|
||||
}
|
||||
}
|
||||
|
||||
$output = "<table $table_attr>\n";
|
||||
|
||||
if (!empty($caption)) {
|
||||
$output .= '<caption>' . $caption . "</caption>\n";
|
||||
}
|
||||
|
||||
if (is_array($cols)) {
|
||||
$cols = ($hdir == 'right') ? $cols : array_reverse($cols);
|
||||
$output .= "<thead><tr>\n";
|
||||
|
||||
for ($r=0; $r<$cols_count; $r++) {
|
||||
$output .= '<th' . smarty_function_html_table_cycle('th', $th_attr, $r) . '>';
|
||||
$output .= $cols[$r];
|
||||
$output .= "</th>\n";
|
||||
}
|
||||
$output .= "</tr></thead>\n";
|
||||
}
|
||||
|
||||
$output .= "<tbody>\n";
|
||||
for ($r=0; $r<$rows; $r++) {
|
||||
$output .= "<tr" . smarty_function_html_table_cycle('tr', $tr_attr, $r) . ">\n";
|
||||
$rx = ($vdir == 'down') ? $r*$cols_count : ($rows-1-$r)*$cols_count;
|
||||
|
||||
for ($c=0; $c<$cols_count; $c++) {
|
||||
$x = ($hdir == 'right') ? $rx+$c : $rx+$cols_count-1-$c;
|
||||
if ($inner!='cols') {
|
||||
/* shuffle x to loop over rows*/
|
||||
$x = floor($x/$cols_count) + ($x%$cols_count)*$rows;
|
||||
}
|
||||
|
||||
if ($x<$loop_count) {
|
||||
$output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">" . $loop[$x] . "</td>\n";
|
||||
} else {
|
||||
$output .= "<td" . smarty_function_html_table_cycle('td', $td_attr, $c) . ">$trailpad</td>\n";
|
||||
}
|
||||
}
|
||||
$output .= "</tr>\n";
|
||||
}
|
||||
$output .= "</tbody>\n";
|
||||
$output .= "</table>\n";
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
||||
function smarty_function_html_table_cycle($name, $var, $no) {
|
||||
if(!is_array($var)) {
|
||||
$ret = $var;
|
||||
} else {
|
||||
$ret = $var[$no % count($var)];
|
||||
}
|
||||
|
||||
return ($ret) ? ' '.$ret : '';
|
||||
}
|
||||
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
165
smarty/libs/plugins/function.mailto.php
Normal file
165
smarty/libs/plugins/function.mailto.php
Normal file
@@ -0,0 +1,165 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {mailto} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: mailto<br>
|
||||
* Date: May 21, 2002
|
||||
* Purpose: automate mailto address link creation, and optionally
|
||||
* encode them.<br>
|
||||
* Input:<br>
|
||||
* - address = e-mail address
|
||||
* - text = (optional) text to display, default is address
|
||||
* - encode = (optional) can be one of:
|
||||
* * none : no encoding (default)
|
||||
* * javascript : encode with javascript
|
||||
* * javascript_charcode : encode with javascript charcode
|
||||
* * hex : encode with hexidecimal (no javascript)
|
||||
* - cc = (optional) address(es) to carbon copy
|
||||
* - bcc = (optional) address(es) to blind carbon copy
|
||||
* - subject = (optional) e-mail subject
|
||||
* - newsgroups = (optional) newsgroup(s) to post to
|
||||
* - followupto = (optional) address(es) to follow up to
|
||||
* - extra = (optional) extra tags for the href link
|
||||
*
|
||||
* Examples:
|
||||
* <pre>
|
||||
* {mailto address="me@domain.com"}
|
||||
* {mailto address="me@domain.com" encode="javascript"}
|
||||
* {mailto address="me@domain.com" encode="hex"}
|
||||
* {mailto address="me@domain.com" subject="Hello to you!"}
|
||||
* {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
|
||||
* {mailto address="me@domain.com" extra='class="mailto"'}
|
||||
* </pre>
|
||||
* @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
|
||||
* (Smarty online manual)
|
||||
* @version 1.2
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @author credits to Jason Sweat (added cc, bcc and subject functionality)
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_mailto($params, &$smarty)
|
||||
{
|
||||
$extra = '';
|
||||
|
||||
if (empty($params['address'])) {
|
||||
$smarty->trigger_error("mailto: missing 'address' parameter");
|
||||
return;
|
||||
} else {
|
||||
$address = $params['address'];
|
||||
}
|
||||
|
||||
$text = $address;
|
||||
|
||||
// netscape and mozilla do not decode %40 (@) in BCC field (bug?)
|
||||
// so, don't encode it.
|
||||
$search = array('%40', '%2C');
|
||||
$replace = array('@', ',');
|
||||
$mail_parms = array();
|
||||
foreach ($params as $var=>$value) {
|
||||
switch ($var) {
|
||||
case 'cc':
|
||||
case 'bcc':
|
||||
case 'followupto':
|
||||
if (!empty($value))
|
||||
$mail_parms[] = $var.'='.str_replace($search,$replace,rawurlencode($value));
|
||||
break;
|
||||
|
||||
case 'subject':
|
||||
case 'newsgroups':
|
||||
$mail_parms[] = $var.'='.rawurlencode($value);
|
||||
break;
|
||||
|
||||
case 'extra':
|
||||
case 'text':
|
||||
$$var = $value;
|
||||
|
||||
default:
|
||||
}
|
||||
}
|
||||
|
||||
$mail_parm_vals = '';
|
||||
for ($i=0; $i<count($mail_parms); $i++) {
|
||||
$mail_parm_vals .= (0==$i) ? '?' : '&';
|
||||
$mail_parm_vals .= $mail_parms[$i];
|
||||
}
|
||||
$address .= $mail_parm_vals;
|
||||
|
||||
$encode = (empty($params['encode'])) ? 'none' : $params['encode'];
|
||||
if (!in_array($encode,array('javascript','javascript_charcode','hex','none')) ) {
|
||||
$smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex");
|
||||
return;
|
||||
}
|
||||
|
||||
if ($encode == 'javascript' ) {
|
||||
$string = 'document.write(\'<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>\');';
|
||||
|
||||
$js_encode = '';
|
||||
for ($x=0; $x < strlen($string); $x++) {
|
||||
$js_encode .= '%' . bin2hex($string[$x]);
|
||||
}
|
||||
|
||||
return '<script type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>';
|
||||
|
||||
} elseif ($encode == 'javascript_charcode' ) {
|
||||
$string = '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
|
||||
|
||||
for($x = 0, $y = strlen($string); $x < $y; $x++ ) {
|
||||
$ord[] = ord($string[$x]);
|
||||
}
|
||||
|
||||
$_ret = "<script type=\"text/javascript\" language=\"javascript\">\n";
|
||||
$_ret .= "<!--\n";
|
||||
$_ret .= "{document.write(String.fromCharCode(";
|
||||
$_ret .= implode(',',$ord);
|
||||
$_ret .= "))";
|
||||
$_ret .= "}\n";
|
||||
$_ret .= "//-->\n";
|
||||
$_ret .= "</script>\n";
|
||||
|
||||
return $_ret;
|
||||
|
||||
|
||||
} elseif ($encode == 'hex') {
|
||||
|
||||
preg_match('!^(.*)(\?.*)$!',$address,$match);
|
||||
if(!empty($match[2])) {
|
||||
$smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.");
|
||||
return;
|
||||
}
|
||||
$address_encode = '';
|
||||
for ($x=0; $x < strlen($address); $x++) {
|
||||
if(preg_match('!\w!',$address[$x])) {
|
||||
$address_encode .= '%' . bin2hex($address[$x]);
|
||||
} else {
|
||||
$address_encode .= $address[$x];
|
||||
}
|
||||
}
|
||||
$text_encode = '';
|
||||
for ($x=0; $x < strlen($text); $x++) {
|
||||
$text_encode .= '&#x' . bin2hex($text[$x]).';';
|
||||
}
|
||||
|
||||
$mailto = "mailto:";
|
||||
return '<a href="'.$mailto.$address_encode.'" '.$extra.'>'.$text_encode.'</a>';
|
||||
|
||||
} else {
|
||||
// no encoding
|
||||
return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
85
smarty/libs/plugins/function.math.php
Normal file
85
smarty/libs/plugins/function.math.php
Normal file
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {math} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: math<br>
|
||||
* Purpose: handle math computations in template<br>
|
||||
* @link http://smarty.php.net/manual/en/language.function.math.php {math}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_math($params, &$smarty)
|
||||
{
|
||||
// be sure equation parameter is present
|
||||
if (empty($params['equation'])) {
|
||||
$smarty->trigger_error("math: missing equation parameter");
|
||||
return;
|
||||
}
|
||||
|
||||
// strip out backticks, not necessary for math
|
||||
$equation = str_replace('`','',$params['equation']);
|
||||
|
||||
// make sure parenthesis are balanced
|
||||
if (substr_count($equation,"(") != substr_count($equation,")")) {
|
||||
$smarty->trigger_error("math: unbalanced parenthesis");
|
||||
return;
|
||||
}
|
||||
|
||||
// match all vars in equation, make sure all are passed
|
||||
preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]+)!",$equation, $match);
|
||||
$allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10',
|
||||
'max','min','pi','pow','rand','round','sin','sqrt','srand','tan');
|
||||
|
||||
foreach($match[1] as $curr_var) {
|
||||
if ($curr_var && !in_array($curr_var, array_keys($params)) && !in_array($curr_var, $allowed_funcs)) {
|
||||
$smarty->trigger_error("math: function call $curr_var not allowed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($params as $key => $val) {
|
||||
if ($key != "equation" && $key != "format" && $key != "assign") {
|
||||
// make sure value is not empty
|
||||
if (strlen($val)==0) {
|
||||
$smarty->trigger_error("math: parameter $key is empty");
|
||||
return;
|
||||
}
|
||||
if (!is_numeric($val)) {
|
||||
$smarty->trigger_error("math: parameter $key: is not numeric");
|
||||
return;
|
||||
}
|
||||
$equation = preg_replace("/\b$key\b/", " \$params['$key'] ", $equation);
|
||||
}
|
||||
}
|
||||
|
||||
eval("\$smarty_math_result = ".$equation.";");
|
||||
|
||||
if (empty($params['format'])) {
|
||||
if (empty($params['assign'])) {
|
||||
return $smarty_math_result;
|
||||
} else {
|
||||
$smarty->assign($params['assign'],$smarty_math_result);
|
||||
}
|
||||
} else {
|
||||
if (empty($params['assign'])){
|
||||
printf($params['format'],$smarty_math_result);
|
||||
} else {
|
||||
$smarty->assign($params['assign'],sprintf($params['format'],$smarty_math_result));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
119
smarty/libs/plugins/function.popup.php
Normal file
119
smarty/libs/plugins/function.popup.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {popup} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: popup<br>
|
||||
* Purpose: make text pop up in windows via overlib
|
||||
* @link http://smarty.php.net/manual/en/language.function.popup.php {popup}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_popup($params, &$smarty)
|
||||
{
|
||||
$append = '';
|
||||
foreach ($params as $_key=>$_value) {
|
||||
switch ($_key) {
|
||||
case 'text':
|
||||
case 'trigger':
|
||||
case 'function':
|
||||
case 'inarray':
|
||||
$$_key = (string)$_value;
|
||||
if ($_key == 'function' || $_key == 'inarray')
|
||||
$append .= ',' . strtoupper($_key) . ",'$_value'";
|
||||
break;
|
||||
|
||||
case 'caption':
|
||||
case 'closetext':
|
||||
case 'status':
|
||||
$append .= ',' . strtoupper($_key) . ",'" . str_replace("'","\'",$_value) . "'";
|
||||
break;
|
||||
|
||||
case 'fgcolor':
|
||||
case 'bgcolor':
|
||||
case 'textcolor':
|
||||
case 'capcolor':
|
||||
case 'closecolor':
|
||||
case 'textfont':
|
||||
case 'captionfont':
|
||||
case 'closefont':
|
||||
case 'fgbackground':
|
||||
case 'bgbackground':
|
||||
case 'caparray':
|
||||
case 'capicon':
|
||||
case 'background':
|
||||
case 'frame':
|
||||
$append .= ',' . strtoupper($_key) . ",'$_value'";
|
||||
break;
|
||||
|
||||
case 'textsize':
|
||||
case 'captionsize':
|
||||
case 'closesize':
|
||||
case 'width':
|
||||
case 'height':
|
||||
case 'border':
|
||||
case 'offsetx':
|
||||
case 'offsety':
|
||||
case 'snapx':
|
||||
case 'snapy':
|
||||
case 'fixx':
|
||||
case 'fixy':
|
||||
case 'padx':
|
||||
case 'pady':
|
||||
case 'timeout':
|
||||
case 'delay':
|
||||
$append .= ',' . strtoupper($_key) . ",$_value";
|
||||
break;
|
||||
|
||||
case 'sticky':
|
||||
case 'left':
|
||||
case 'right':
|
||||
case 'center':
|
||||
case 'above':
|
||||
case 'below':
|
||||
case 'noclose':
|
||||
case 'autostatus':
|
||||
case 'autostatuscap':
|
||||
case 'fullhtml':
|
||||
case 'hauto':
|
||||
case 'vauto':
|
||||
case 'mouseoff':
|
||||
case 'followmouse':
|
||||
case 'closeclick':
|
||||
if ($_value) $append .= ',' . strtoupper($_key);
|
||||
break;
|
||||
|
||||
default:
|
||||
$smarty->trigger_error("[popup] unknown parameter $_key", E_USER_WARNING);
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($text) && !isset($inarray) && empty($function)) {
|
||||
$smarty->trigger_error("overlib: attribute 'text' or 'inarray' or 'function' required");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (empty($trigger)) { $trigger = "onmouseover"; }
|
||||
|
||||
$retval = $trigger . '="return overlib(\''.preg_replace(array("!'!","![\r\n]!"),array("\'",'\r'),$text).'\'';
|
||||
$retval .= $append . ');"';
|
||||
if ($trigger == 'onmouseover')
|
||||
$retval .= ' onmouseout="nd();"';
|
||||
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
40
smarty/libs/plugins/function.popup_init.php
Normal file
40
smarty/libs/plugins/function.popup_init.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty {popup_init} function plugin
|
||||
*
|
||||
* Type: function<br>
|
||||
* Name: popup_init<br>
|
||||
* Purpose: initialize overlib
|
||||
* @link http://smarty.php.net/manual/en/language.function.popup.init.php {popup_init}
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array
|
||||
* @param Smarty
|
||||
* @return string
|
||||
*/
|
||||
function smarty_function_popup_init($params, &$smarty)
|
||||
{
|
||||
$zindex = 1000;
|
||||
|
||||
if (!empty($params['zindex'])) {
|
||||
$zindex = $params['zindex'];
|
||||
}
|
||||
|
||||
if (!empty($params['src'])) {
|
||||
return '<div id="overDiv" style="position:absolute; visibility:hidden; z-index:'.$zindex.';"></div>' . "\n"
|
||||
. '<script type="text/javascript" language="JavaScript" src="'.$params['src'].'"></script>' . "\n";
|
||||
} else {
|
||||
$smarty->trigger_error("popup_init: missing src parameter");
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
43
smarty/libs/plugins/modifier.capitalize.php
Normal file
43
smarty/libs/plugins/modifier.capitalize.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty capitalize modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: capitalize<br>
|
||||
* Purpose: capitalize words in the string
|
||||
* @link http://smarty.php.net/manual/en/language.modifiers.php#LANGUAGE.MODIFIER.CAPITALIZE
|
||||
* capitalize (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_capitalize($string, $uc_digits = false)
|
||||
{
|
||||
smarty_modifier_capitalize_ucfirst(null, $uc_digits);
|
||||
return preg_replace_callback('!\'?\b\w(\w|\')*\b!', 'smarty_modifier_capitalize_ucfirst', $string);
|
||||
}
|
||||
|
||||
function smarty_modifier_capitalize_ucfirst($string, $uc_digits = null)
|
||||
{
|
||||
static $_uc_digits = false;
|
||||
|
||||
if(isset($uc_digits)) {
|
||||
$_uc_digits = $uc_digits;
|
||||
return;
|
||||
}
|
||||
|
||||
if(substr($string[0],0,1) != "'" && !preg_match("!\d!",$string[0]) || $_uc_digits)
|
||||
return ucfirst($string[0]);
|
||||
else
|
||||
return $string[0];
|
||||
}
|
||||
|
||||
|
||||
?>
|
33
smarty/libs/plugins/modifier.cat.php
Normal file
33
smarty/libs/plugins/modifier.cat.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty cat modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: cat<br>
|
||||
* Date: Feb 24, 2003
|
||||
* Purpose: catenate a value to a variable
|
||||
* Input: string to catenate
|
||||
* Example: {$var|cat:"foo"}
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.cat.php cat
|
||||
* (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @version 1.0
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_cat($string, $cat)
|
||||
{
|
||||
return $string . $cat;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
32
smarty/libs/plugins/modifier.count_characters.php
Normal file
32
smarty/libs/plugins/modifier.count_characters.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty count_characters modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: count_characteres<br>
|
||||
* Purpose: count the number of characters in a text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.count.characters.php
|
||||
* count_characters (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param boolean include whitespace in the character count
|
||||
* @return integer
|
||||
*/
|
||||
function smarty_modifier_count_characters($string, $include_spaces = false)
|
||||
{
|
||||
if ($include_spaces)
|
||||
return(strlen($string));
|
||||
|
||||
return preg_match_all("/[^\s]/",$string, $match);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
29
smarty/libs/plugins/modifier.count_paragraphs.php
Normal file
29
smarty/libs/plugins/modifier.count_paragraphs.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty count_paragraphs modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: count_paragraphs<br>
|
||||
* Purpose: count the number of paragraphs in a text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php
|
||||
* count_paragraphs (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return integer
|
||||
*/
|
||||
function smarty_modifier_count_paragraphs($string)
|
||||
{
|
||||
// count \r or \n characters
|
||||
return count(preg_split('/[\r\n]+/', $string));
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
29
smarty/libs/plugins/modifier.count_sentences.php
Normal file
29
smarty/libs/plugins/modifier.count_sentences.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty count_sentences modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: count_sentences
|
||||
* Purpose: count the number of sentences in a text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.count.paragraphs.php
|
||||
* count_sentences (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return integer
|
||||
*/
|
||||
function smarty_modifier_count_sentences($string)
|
||||
{
|
||||
// find periods with a word before but not after.
|
||||
return preg_match_all('/[^\s]\.(?!\w)/', $string, $match);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
33
smarty/libs/plugins/modifier.count_words.php
Normal file
33
smarty/libs/plugins/modifier.count_words.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty count_words modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: count_words<br>
|
||||
* Purpose: count the number of words in a text
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.count.words.php
|
||||
* count_words (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @return integer
|
||||
*/
|
||||
function smarty_modifier_count_words($string)
|
||||
{
|
||||
// split text by ' ',\r,\n,\f,\t
|
||||
$split_array = preg_split('/\s+/',$string);
|
||||
// count matches that contain alphanumerics
|
||||
$word_count = preg_grep('/[a-zA-Z0-9\\x80-\\xff]/', $split_array);
|
||||
|
||||
return count($word_count);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
58
smarty/libs/plugins/modifier.date_format.php
Normal file
58
smarty/libs/plugins/modifier.date_format.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
/**
|
||||
* Include the {@link shared.make_timestamp.php} plugin
|
||||
*/
|
||||
require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp');
|
||||
/**
|
||||
* Smarty date_format modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: date_format<br>
|
||||
* Purpose: format datestamps via strftime<br>
|
||||
* Input:<br>
|
||||
* - string: input date string
|
||||
* - format: strftime format for output
|
||||
* - default_date: default date if $string is empty
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.date.format.php
|
||||
* date_format (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string|void
|
||||
* @uses smarty_make_timestamp()
|
||||
*/
|
||||
function smarty_modifier_date_format($string, $format = '%b %e, %Y', $default_date = '')
|
||||
{
|
||||
if ($string != '') {
|
||||
$timestamp = smarty_make_timestamp($string);
|
||||
} elseif ($default_date != '') {
|
||||
$timestamp = smarty_make_timestamp($default_date);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
if (DIRECTORY_SEPARATOR == '\\') {
|
||||
$_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
|
||||
$_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
|
||||
if (strpos($format, '%e') !== false) {
|
||||
$_win_from[] = '%e';
|
||||
$_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
|
||||
}
|
||||
if (strpos($format, '%l') !== false) {
|
||||
$_win_from[] = '%l';
|
||||
$_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
|
||||
}
|
||||
$format = str_replace($_win_from, $_win_to, $format);
|
||||
}
|
||||
return strftime($format, $timestamp);
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
90
smarty/libs/plugins/modifier.debug_print_var.php
Normal file
90
smarty/libs/plugins/modifier.debug_print_var.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty debug_print_var modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: debug_print_var<br>
|
||||
* Purpose: formats variable contents for display in the console
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.debug.print.var.php
|
||||
* debug_print_var (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param array|object
|
||||
* @param integer
|
||||
* @param integer
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_debug_print_var($var, $depth = 0, $length = 40)
|
||||
{
|
||||
$_replace = array(
|
||||
"\n" => '<i>\n</i>',
|
||||
"\r" => '<i>\r</i>',
|
||||
"\t" => '<i>\t</i>'
|
||||
);
|
||||
|
||||
switch (gettype($var)) {
|
||||
case 'array' :
|
||||
$results = '<b>Array (' . count($var) . ')</b>';
|
||||
foreach ($var as $curr_key => $curr_val) {
|
||||
$results .= '<br>' . str_repeat(' ', $depth * 2)
|
||||
. '<b>' . strtr($curr_key, $_replace) . '</b> => '
|
||||
. smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
|
||||
$depth--;
|
||||
}
|
||||
break;
|
||||
case 'object' :
|
||||
$object_vars = get_object_vars($var);
|
||||
$results = '<b>' . get_class($var) . ' Object (' . count($object_vars) . ')</b>';
|
||||
foreach ($object_vars as $curr_key => $curr_val) {
|
||||
$results .= '<br>' . str_repeat(' ', $depth * 2)
|
||||
. '<b> ->' . strtr($curr_key, $_replace) . '</b> = '
|
||||
. smarty_modifier_debug_print_var($curr_val, ++$depth, $length);
|
||||
$depth--;
|
||||
}
|
||||
break;
|
||||
case 'boolean' :
|
||||
case 'NULL' :
|
||||
case 'resource' :
|
||||
if (true === $var) {
|
||||
$results = 'true';
|
||||
} elseif (false === $var) {
|
||||
$results = 'false';
|
||||
} elseif (null === $var) {
|
||||
$results = 'null';
|
||||
} else {
|
||||
$results = htmlspecialchars((string) $var);
|
||||
}
|
||||
$results = '<i>' . $results . '</i>';
|
||||
break;
|
||||
case 'integer' :
|
||||
case 'float' :
|
||||
$results = htmlspecialchars((string) $var);
|
||||
break;
|
||||
case 'string' :
|
||||
$results = strtr($var, $_replace);
|
||||
if (strlen($var) > $length ) {
|
||||
$results = substr($var, 0, $length - 3) . '...';
|
||||
}
|
||||
$results = htmlspecialchars('"' . $results . '"');
|
||||
break;
|
||||
case 'unknown type' :
|
||||
default :
|
||||
$results = strtr((string) $var, $_replace);
|
||||
if (strlen($results) > $length ) {
|
||||
$results = substr($results, 0, $length - 3) . '...';
|
||||
}
|
||||
$results = htmlspecialchars($results);
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
32
smarty/libs/plugins/modifier.default.php
Normal file
32
smarty/libs/plugins/modifier.default.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty default modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: default<br>
|
||||
* Purpose: designate default value for empty variables
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.default.php
|
||||
* default (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_default($string, $default = '')
|
||||
{
|
||||
if (!isset($string) || $string === '')
|
||||
return $default;
|
||||
else
|
||||
return $string;
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
93
smarty/libs/plugins/modifier.escape.php
Normal file
93
smarty/libs/plugins/modifier.escape.php
Normal file
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
/**
|
||||
* Smarty plugin
|
||||
* @package Smarty
|
||||
* @subpackage plugins
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Smarty escape modifier plugin
|
||||
*
|
||||
* Type: modifier<br>
|
||||
* Name: escape<br>
|
||||
* Purpose: Escape the string according to escapement type
|
||||
* @link http://smarty.php.net/manual/en/language.modifier.escape.php
|
||||
* escape (Smarty online manual)
|
||||
* @author Monte Ohrt <monte at ohrt dot com>
|
||||
* @param string
|
||||
* @param html|htmlall|url|quotes|hex|hexentity|javascript
|
||||
* @return string
|
||||
*/
|
||||
function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
|
||||
{
|
||||
switch ($esc_type) {
|
||||
case 'html':
|
||||
return htmlspecialchars($string, ENT_QUOTES, $char_set);
|
||||
|
||||
case 'htmlall':
|
||||
return htmlentities($string, ENT_QUOTES, $char_set);
|
||||
|
||||
case 'url':
|
||||
return rawurlencode($string);
|
||||
|
||||
case 'urlpathinfo':
|
||||
return str_replace('%2F','/',rawurlencode($string));
|
||||
|
||||
case 'quotes':
|
||||
// escape unescaped single quotes
|
||||
return preg_replace("%(?<!\\\\)'%", "\\'", $string);
|
||||
|
||||
case 'hex':
|
||||
// escape every character into hex
|
||||
$return = '';
|
||||
for ($x=0; $x < strlen($string); $x++) {
|
||||
$return .= '%' . bin2hex($string[$x]);
|
||||
}
|
||||
return $return;
|
||||
|
||||
case 'hexentity':
|
||||
$return = '';
|
||||
for ($x=0; $x < strlen($string); $x++) {
|
||||
$return .= '&#x' . bin2hex($string[$x]) . ';';
|
||||
}
|
||||
return $return;
|
||||
|
||||
case 'decentity':
|
||||
$return = '';
|
||||
for ($x=0; $x < strlen($string); $x++) {
|
||||
$return .= '&#' . ord($string[$x]) . ';';
|
||||
}
|
||||
return $return;
|
||||
|
||||
case 'javascript':
|
||||
// escape quotes and backslashes, newlines, etc.
|
||||
return strtr($string, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/'));
|
||||
|
||||
case 'mail':
|
||||
// safe way to display e-mail address on a web page
|
||||
return str_replace(array('@', '.'),array(' [AT] ', ' [DOT] '), $string);
|
||||
|
||||
case 'nonstd':
|
||||
// escape non-standard chars, such as ms document quotes
|
||||
$_res = '';
|
||||
for($_i = 0, $_len = strlen($string); $_i < $_len; $_i++) {
|
||||
$_ord = ord(substr($string, $_i, 1));
|
||||
// non-standard char, escape it
|
||||
if($_ord >= 126){
|
||||
$_res .= '&#' . $_ord . ';';
|
||||
}
|
||||
else {
|
||||
$_res .= substr($string, $_i, 1);
|
||||
}
|
||||
}
|
||||
return $_res;
|
||||
|
||||
default:
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
/* vim: set expandtab: */
|
||||
|
||||
?>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user