Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 797 → Rev 798

/branches/v1.5-cisaille/jrest/util/extensions/phpMyEdit-messages.class.php
New file
0,0 → 1,329
<?php
 
/*
* phpMyEdit - instant MySQL table editor and code generator
*
* extensions/phpMyEdit-messages.class.php - phpMyEdit messages extension
* ____________________________________________________________
*
* Developed by Ondrej Jombik <nepto@platon.sk>
* Copyright (c) 2002-2006 Platon Group, http://platon.sk/
* All rights reserved.
*
* See README file for more information about this software.
* See COPYING file for license information.
*
* Download the latest version from
* http://platon.sk/projects/phpMyEdit/
*/
 
/* $Platon: phpMyEdit/extensions/phpMyEdit-messages.class.php,v 1.15 2006-06-17 11:14:54 nepto Exp $ */
 
/* This extension is part of phpMyEzin: Content Management System project,
where it handles discussion messages for particular articles. It depends on
some phpMyEzin characteristics, thus extension should not and cannot be used
outside this project. However there are planned some improvements for future
to make this extension handle any kind of tree-structured data. */
 
require_once dirname(__FILE__).'/../phpMyEdit.class.php';
 
class phpMyEdit_messages extends phpMyEdit
{
function phpMyEdit_messages($opts) /* {{{ */
{
$execute = 1;
isset($opts['execute']) && $execute = $opts['execute'];
$opts['execute'] = 0;
parent::phpMyEdit($opts);
$this->tb2 = $opts['tb2'];
$this->format_date = $opts['format_date'];
/* Preserved article ID in CGI environment. */
/* TODO: change to $this->article_id or something like this */
global $ezin_admin_article;
$ezin_admin_article = $this->get_data_cgi_var('article_id');
 
$execute && $this->execute();
} /* }}} */
 
function list_table() /* {{{ */
{
$ezin_admin_article_change_up = $this->get_sys_cgi_var('ezin_admin_article_change_up');
$ezin_admin_article_change_down = $this->get_sys_cgi_var('ezin_admin_article_change_down');
if (isset($ezin_admin_article_change_up)) {
$ezin_admin_article = $this->get_sys_cgi_var('ezin_admin_article_up');
} elseif (isset($ezin_admin_article_change_down)) {
$ezin_admin_article = $this->get_sys_cgi_var('ezin_admin_article_down');
}
!isset($ezin_admin_article) && $ezin_admin_article = $this->get_data_cgi_var('article_id');
$ezin_admin_article = intval($ezin_admin_article);
$query = sprintf('SELECT article_id, count(id) AS messages FROM %s'
.' GROUP BY article_id HAVING article_id = %d',
$this->tb, intval($ezin_admin_article));
if (($result = $this->myquery($query)) == false) {
return false;
}
$row = @mysql_fetch_array($result, MYSQL_ASSOC);
//$ezin_admin_article = intval($row['article_id']);
$ezin_admin_msgcount = intval($row['messages']);
@mysql_free_result($result);
 
echo '<form class="',$this->getCSSclass('form');
echo '" action="',$page_name,'" method="POST">',"\n";
 
if ($this->nav_up() || $ezin_admin_article <= 0) {
$this->message_nav_buttons($ezin_admin_article, $ezin_admin_msgcount, 'up');
echo '<hr class="',$this->getCSSclass('hr', 'up'),'">',"\n";
}
 
if ($ezin_admin_article > 0) {
echo '<table class="',$this->getCSSclass('main'),'" summary="',$this->tb,'">',"\n";
echo '<tr class="',$this->getCSSclass('header'),'">',"\n";
foreach (array('ID', 'Subject', ' ', 'Author', 'Date & Time', 'IP addresses') as $str) {
echo '<th class="',$this->getCSSclass('header'),'">';
echo Platon::htmlspecialchars2($str),'</th>',"\n";
}
echo '</tr>',"\n";
echo '<tr class="',$this->getCSSclass('header'),'">',"\n";
echo '<th class="',$this->getCSSclass('header'),'" colspan="6">';
echo 'Valid messages</td></tr>',"\n";
$message_ids = $this->message_process($ezin_admin_article, 0, 0);
$count_message_ids = count($message_ids);
if ($count_message_ids == 0) {
echo '<tr class="',$this->getCSSclass('row', null, 'next'),'">',"\n";
echo '<td class="',$this->getCSSclass('cell', null, true),'" colspan="6">',"\n";
echo '<i>There are no valid messages for this article.</i>';
echo '</td></tr>',"\n";
}
$query = sprintf('SELECT id, parent, article_id, author,'
.' email, homepage, subject, datetime, ip'
.' FROM %s WHERE article_id = %d ORDER BY datetime ASC',
$this->tb, intval($ezin_admin_article));
if (($result = $this->myquery($query)) == false) {
return false;
}
$all_ids = array();
$parents = array();
for ($i = 0; ($row = @mysql_fetch_array($result, MYSQL_ASSOC)); $i++) {
$all_ids[] = $row['id'];
$parents[$row['id']] = $row['parent'];
}
@mysql_free_result($result);
$all_ids = array_diff($all_ids, $message_ids);
echo '<tr class="',$this->getCSSclass('header'),'">',"\n";
echo '<th class="',$this->getCSSclass('header'),'" colspan="6">';
echo 'Invalid messages</td></tr>',"\n";
if (count($all_ids) > 0) {
/* To force buttons */
$count_message_ids = -1;
while (count($all_ids) > 0) {
//echo "<p>all_ids: "; var_dump($all_ids);echo '<br>';
$sub_ids = $this->message_process($ezin_admin_article,
$parents[array_shift($all_ids)], 0, true);
$all_ids = array_diff($all_ids, $sub_ids);
}
} else {
echo '<tr class="',$this->getCSSclass('row', null, 'next'),'">',"\n";
echo '<td class="',$this->getCSSclass('cell', null, true),'" colspan="6">',"\n";
echo '<i>There are no invalid messages for this article.</i>';
echo '</td></tr>',"\n";
}
echo '</table>';
}
if ($this->nav_down() && $ezin_admin_article > 0) {
echo '<hr class="',$this->getCSSclass('hr', 'down'),'">',"\n";
$this->message_nav_buttons($ezin_admin_article, $ezin_admin_msgcount, 'down');
}
echo $this->htmlHiddenData('article_id', $ezin_admin_article);
echo '</form>',"\n";
} /* }}} */
 
function message_process($article_id, $id, $level = 0, $parent = true) /* {{{ */
{
$id = intval($id);
$level = intval($level);
$query = sprintf('SELECT id, parent, article_id, author,'
.' email, homepage, subject, datetime, ip'
.' FROM %s WHERE %s = %d AND article_id = %d'
.' ORDER BY datetime ASC', $this->tb,
$parent == true ? 'parent' : 'id', intval($id), intval($article_id));
if (($result = $this->myquery($query)) == false) {
return false;
}
 
$ar = array();
$ar_out = array();
for ($i = 0; ($row = @mysql_fetch_array($result, MYSQL_ASSOC)); $i++) {
$ar[$i] = $row;
$ar_out[] = $row['id'];
}
$checked = ! $level && $parent ? ' checked' : '';
for ($i = 0; $i < count($ar); $i++) {
echo '<tr class="',$this->getCSSclass('row', null, 'next'),'">',"\n";
$css_class_name = $this->getCSSclass('cell', null, true);
$css_class_name2 = $this->getCSSclass('navigation', null, true);
echo '<td class="',$css_class_name,'">',$ar[$i]['id'],'</td>',"\n";
echo '<td class="',$css_class_name,'">';
for ($j = 0; $j < $level; $j++) {
echo '&nbsp;&nbsp;&nbsp;';
}
echo htmlspecialchars($ar[$i]['subject']);
echo '</td>',"\n";
echo '<td class="',$css_class_name2,'">';
echo '<input',$checked,' class="',$css_class_name2,'"';
echo ' type="radio" ','name="',$this->cgi['prefix']['sys'],'rec"';
echo ' value="',$ar[$i]['id'],'" class="link"></td>',"\n";
echo '<td class="',$css_class_name,'">',htmlspecialchars($ar[$i]['author']), '</td>';
echo '<td class="',$css_class_name,'">',htmlspecialchars($ar[$i]['datetime']),'</td>';
// TODO: do resolving
echo '<td class="',$css_class_name,'"><small>';
// this shoud be global IP-adress-deliminator
$output = false;
$ar_ip = preg_split('|([ ]*[ \\/,;]+[ ]*)|', $ar[$i]['ip'], -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($ar_ip as $ip) {
if (strlen($output) > 0) {
$output = true;
}
$ip = htmlspecialchars($ip);
if (preg_match('/^(\d{1,3}\.){3}\d{1,3}$/', $ip)) {
echo '<a class="',$css_class_name,'" target="_blank" href="http://',$ip,'">';
echo '<small>',$ip,'</small></a>';
} else {
echo $ip;
}
}
if (! $output) {
echo '&nbsp;';
}
echo '</small></td>',"\n";
echo '</tr>',"\n";
if ($parent) {
$ar_out = array_merge($ar_out, $this->message_process(
$article_id, $ar[$i]['id'], $level + 1));
}
strlen($checked) && $checked = '';
}
return $ar_out;
} /* }}} */
 
function message_nav_buttons($article_id, $messages_count, $position) /* {{{ */
{
echo '<table class="',$this->getCSSclass('navigation', $position),'">',"\n";
echo '<tr class="',$this->getCSSclass('navigation', $position),'">',"\n";
echo '<td class="',$this->getCSSclass('buttons', $position),'">',"\n";
$this->print_article_select($article_id, 0, $position);
echo '</td>',"\n";
echo '<td class="',$this->getCSSclass('buttons2', $position),'">',"\n";
if ($article_id > 0) {
if ($this->add_enabled()) {
echo $this->htmlSubmit('operation', 'Add', $this->getCSSclass('add', $position), false, false);
}
if ($this->view_enabled()) {
echo '&nbsp;';
echo $this->htmlSubmit('operation', 'View', $this->getCSSclass('view', $position),
false, $messages_count <= 0);
}
if ($this->change_enabled()) {
echo '&nbsp;';
echo $this->htmlSubmit('operation', 'Change', $this->getCSSclass('change', $position),
false, $messages_count <= 0);
}
if ($this->delete_enabled()) {
echo '&nbsp;';
echo $this->htmlSubmit('operation', 'Delete', $this->getCSSclass('delete', $position),
false, $messages_count <= 0);
}
}
echo '</td></tr></table>',"\n";
} /* }}} */
 
function display_record_buttons() /* {{{ */
{
echo '<table class="',$this->getCSSclass('navigation', $position),'">',"\n";
echo '<tr class="',$this->getCSSclass('navigation', $position),'">',"\n";
echo '<td class="',$this->getCSSclass('buttons', $position),'">',"\n";
$this->print_article_select($article_id, 1, $position);
echo '</td>',"\n";
if (strlen(@$this->message) > 0) {
echo '<td class="',$this->getCSSclass('message', $position),'">',$this->message,'</td>',"\n";
}
echo '<td class="',$this->getCSSclass('buttons2', $position),'">',"\n";
if ($this->change_operation()) {
echo $this->htmlSubmit('savechange', 'Save', $this->getCSSclass('save', $position), true), '&nbsp;';
echo $this->htmlSubmit('morechange', 'Apply', $this->getCSSclass('more', $position), true), '&nbsp;';
echo $this->htmlSubmit('cancelchange', 'Cancel', $this->getCSSclass('cancel', $position), false);
} elseif ($this->add_operation()) {
echo $this->htmlSubmit('saveadd', 'Save', $this->getCSSclass('save', $position), true), '&nbsp;';
echo $this->htmlSubmit('moreadd', 'More', $this->getCSSclass('more', $position), true), '&nbsp;';
echo $this->htmlSubmit('canceladd', 'Cancel', $this->getCSSclass('cancel', $position), false);
} elseif ($this->delete_operation()) {
echo $this->htmlSubmit('savedelete', 'Delete', $this->getCSSclass('save', $position), false), '&nbsp;';
echo $this->htmlSubmit('canceldelete', 'Cancel', $this->getCSSclass('cancel', $position), false);
} elseif ($this->view_operation()) {
if ($this->change_enabled()) {
echo $this->htmlSubmit('operation', 'Change', $this->getCSSclass('save', $position), false), '&nbsp;';
}
echo $this->htmlSubmit('cancelview', 'Cancel', $this->getCSSclass('cancel', $position), false);
}
// Message is now written here
echo '</td>',"\n";
echo '</tr></table>',"\n";
} /* }}} */
 
function print_article_select($selected_id, $disabled, $position) /* {{{ */
{
if ($selected_id <= 0) {
$rec = intval($this->get_sys_cgi_var('rec'));
if ($rec > 0) {
$query = sprintf('SELECT article_id FROM %s WHERE id = %d',
$this->tb, $rec);
$result = $this->myquery($query);
if ($result != false) {
$row = @mysql_fetch_array($result, MYSQL_NUM);
$selected_id = $row[0];
}
@mysql_free_result($result);
}
}
static $articles = null;
if ($articles == null) {
$articles = array();
$query = 'SELECT id, title, atitle, UNIX_TIMESTAMP(datetime) AS date'
.' FROM '.$this->tb2
.' ORDER BY date DESC';
if (($result = $this->myquery($query)) == false) {
return false;
}
for ($k = 0; ($row = @mysql_fetch_array($result, MYSQL_ASSOC)); $k++) {
$articles[] = $row;
}
@mysql_free_result($result);
}
echo '<select',($disabled ? ' disabled' : ''),' name="';
echo $this->cgi['prefix']['sys'].'ezin_admin_article_',$position,'" size="1">',"\n";
echo '<option value="0">-- Choose article --</option>',"\n";
foreach ($articles as $row) {
$row['title'] = empty($row['title']) ? $row['atitle'] : $row['title'];
$row['title'] = Platon::pretty_substr(strip_tags($row['title']), 40);
echo '<option'.($selected_id == $row['id'] ? ' selected' : '');
echo ' value="',$row['id'],'">',$row['title'];
if ($row['date'] > 0) {
printf(' [%d] (%s)', $row['id'], date($this->format_date, $row['date']));
}
echo '</option>',"\n";
}
echo '</select>',"\n";
if (! $disabled) {
echo $this->htmlSubmit('ezin_admin_article_change_'.$position, ' &gt; ', $this->get_sys_cgi_var('change', $position)), '&nbsp;', "\n";
}
return true;
} /* }}} */
 
}
 
/* Modeline for ViM {{{
* vim:set ts=4:
* vim600:fdm=marker fdl=0 fdc=0:
* }}} */
 
?>
/branches/v1.5-cisaille/jrest/util/extensions/phpMyEdit-report.class.php
New file
0,0 → 1,319
<?php
 
/*
* phpMyEdit - instant MySQL table editor and code generator
*
* extensions/phpMyEdit-report.class.php - phpMyEdit report extension
* ____________________________________________________________
*
* Developed by Ondrej Jombik <nepto@platon.sk>
* Copyright (c) 2002-2006 Platon Group, http://platon.sk/
* All rights reserved.
*
* See README file for more information about this software.
* See COPYING file for license information.
*
* Download the latest version from
* http://platon.sk/projects/phpMyEdit/
*/
 
/* $Platon: phpMyEdit/extensions/phpMyEdit-report.class.php,v 1.12 2006-01-22 21:44:23 nepto Exp $ */
 
/* Extension TODO:
 
- allow user to enable/disable particular field in reporting (maybe 'X' flag
for indicating that field is forbidden is good idea)
- support for ['help'] in select fields screen
- make extension's option for selecting "Select fields" link or button
*/
 
require_once dirname(__FILE__).'/../phpMyEdit.class.php';
 
class phpMyEdit_report extends phpMyEdit
{
 
function phpMyEdit_report($opts) /* {{{ */
{
$opts['options'] = 'L';
$execute = 1;
isset($opts['execute']) && $execute = $opts['execute'];
$opts['execute'] = 0;
parent::phpMyEdit($opts);
$execute && $this->execute();
} /* }}} */
 
function make_language_labels($language) /* {{{ */
{
$ret = parent::make_language_labels($language);
strlen($ret['Make report']) <= 0 && $ret['Make report'] = 'Make report';
strlen($ret['Select fields']) <= 0 && $ret['Select fields'] = 'Select fields';
strlen($ret['Records per screen']) <= 0 && $ret['Records per screen'] = 'Records per screen';
return $ret;
} /* }}} */
 
function get_cgi_cookie_var($name, $default_value = null) /* {{{ */
{
$ret = $this->get_cgi_var($name, null);
if ($ret === null) {
global $HTTP_COOKIE_VARS;
$ret = @$HTTP_COOKIE_VARS[$name.'_'.$this->tb.'_cookie'];
if (! isset($ret)) {
$ret = $default_value;
}
}
return $ret;
} /* }}} */
 
function display_list_table_buttons($total_recs, $position) /* {{{ */
{ /* This is mostly copy/paste from core class. */
$listall = $this->inc <= 0; // Are we doing a listall?
echo '<table class="',$this->getCSSclass('navigation', $position),'">',"\n";
echo '<tr class="',$this->getCSSclass('navigation', $position),'">',"\n";
echo '<td class="',$this->getCSSclass('buttons', $position),'">',"\n";
echo '<input class="',$this->getCSSclass('fields-select', $position);
echo '" type="submit" name="fields_select" value="',$this->labels['Select fields'],'">&nbsp;';
// Note that <input disabled isn't valid HTML, but most browsers support it
$disabled = ($this->fm > 0 && ! $listall) ? '' : ' disabled';
echo '<input',$disabled,' class="',$this->getCSSclass('prev', $position);
echo '" type="submit" name="',ltrim($disabled),'prev" value="',$this->labels['Prev'],'">&nbsp;';
$disabled = ($this->fm + $this->inc < $total_recs && ! $listall) ? '' : ' disabled';
echo '<input',$disabled,' class="',$this->getCSSclass('next', $position);
echo '" type="submit" name="',ltrim($disabled),'next" value="',$this->labels['Next'],'">';
// Message is now written here
echo '</td>',"\n";
if (strlen(@$this->message) > 0) {
echo '<td class="',$this->getCSSclass('message', $position),'">',$this->message,'</td>',"\n";
}
// Display page and records statistics
echo '<td class="',$this->getCSSclass('stats', $position),'">',"\n";
if ($listall) {
echo $this->labels['Page'],':&nbsp;1&nbsp;',$this->labels['of'],'&nbsp;1';
} else {
echo $this->labels['Page'],':&nbsp;',($this->fm / $this->inc) + 1;
echo '&nbsp;',$this->labels['of'],'&nbsp;',max(1, ceil($total_recs / abs($this->inc)));
}
echo '&nbsp; ',$this->labels['Records'],':&nbsp;',$total_recs;
echo '</td></tr></table>',"\n";
} /* }}} */
 
function display_report_selection_buttons($position) /* {{{ */
{
echo '<table class="',$this->getCSSclass('navigation', $position),'">',"\n";
echo '<tr class="',$this->getCSSclass('navigation', $position),'">',"\n";
echo '<td class="',$this->getCSSclass('buttons', $position),'">',"\n";
echo '<input class="',$this->getCSSclass('make-report', $position);
echo '" type="submit" name="prepare_filter" value="',$this->labels['Make report'],'">',"\n";
echo '</td></tr></table>',"\n";
} /* }}} */
 
function get_select_fields_link() /* {{{ */
{
$link = '<a href="'.htmlspecialchars($this->page_name).'?fields_select=1';
for ($i = 0; $i < count($table_cols); $i++) {
$varname = 'qf'.$i;
$value = $this->get_cgi_cookie_var($varname);
if (! empty($value)) {
$link .= htmlspecialchars(
'&'.rawurlencode($varname).
'='.rawurlencode($value));
}
}
$link .= htmlspecialchars($this->cgi['persist']);
$link .= '">'.$this->labels['Select fields'].'</a>';
return $link;
} /* }}} */
 
function execute() /* {{{ */
{
global $HTTP_GET_VARS;
global $HTTP_POST_VARS;
 
/*
* Extracting field names
*/
 
$table_cols = array();
$all_table_cols = array();
 
if ($this->connect() == false) {
return false;
}
$query_parts = array(
'type' => 'select',
'select' => '*',
'from' => $this->tb,
'limit' => '1');
$result = $this->myquery($this->get_SQL_query($query_parts), __LINE__);
$all_table_cols = array_keys(@mysql_fetch_array($result, MYSQL_ASSOC));
if (count($all_table_cols) <= 0) {
$this->error('database fetch error');
return false;
}
foreach (array_keys($this->fdd) as $field_name) {
if (preg_match('/^\d*$/', $field_name))
continue;
if (($idx = array_search($field_name, $all_table_cols)) !== false)
$table_cols[$field_name] = mysql_field_len($result, $idx);
}
@mysql_free_result($result);
unset($all_table_cols);
 
/*
* Preparing variables
*/
 
$fields_select = $this->get_cgi_var('fields_select');
$filter = $this->get_cgi_var('filter');
$prepare_filter = $this->get_cgi_var('prepare_filter');
$this->inc = intval($this->get_cgi_cookie_var('inc'));
$force_select = true;
$none_displayed = true;
$expire_time = time() + (3600 * 24 * 30 * 12 * 5); // five years
$headers_sent = @headers_sent();
 
foreach (array_merge(array('@inc'), array_keys($table_cols)) as $col) {
$varname = ($col[0] == '@' ? substr($col, 1) : 'have_'.$col);
if (isset($HTTP_POST_VARS[$varname]) || isset($HTTP_GET_VARS[$varname])) {
$value = $HTTP_POST_VARS[$varname];
if (isset($HTTP_GET_VARS[$varname])) {
$value = $HTTP_GET_VARS[$varname];
}
if ($varname != 'inc' && ! empty($value)) {
$force_select = false;
}
$headers_sent || setcookie($varname.'_'.$this->tb.'_cookie', $value, $expire_time);
$this->cgi['persist'] .= '&'.urlencode($varname);
$this->cgi['persist'] .= '='.urlencode($value);
} else {
$headers_sent || setcookie($varname.'_'.$this->tb.'_cookie', '', time() - 10000);
}
}
 
$i = -1;
foreach (array_keys($this->fdd) as $key) {
$i++;
if (preg_match('/^\d*$/', $key))
continue;
$varname = 'have_'.$key;
$value = @$this->get_cgi_cookie_var($varname, '');
$options = @$value ? 'LV' : '';
$this->fdd[$i]['options'] = $options;
$this->fdd[$key]['options'] = $options;
$this->displayed[$i] = @$value ? true : false;
$value && $none_displayed = false;
}
 
/*
* Redirecting when neccessary
* (hackity hack with unregistering/unchecking fields)
*/
 
if ($prepare_filter && ! $headers_sent) {
$this->execute_redirect();
exit;
}
 
/*
* Check if field selection report screen has to be displayed
*/
 
if (isset($fields_select) || $force_select || $none_displayed) {
$this->execute_report_screen($table_cols);
return true;
}
 
if (0) {
$this->message .= $this->get_select_fields_link();
}
 
// parent class call
return parent::execute();
} /* }}} */
 
function execute_redirect() /* {{{ */
{
global $HTTP_SERVER_VARS;
global $HTTP_GET_VARS;
global $HTTP_POST_VARS;
$redirect_url = 'http://'.$HTTP_SERVER_VARS['HTTP_HOST'].$HTTP_SERVER_VARS['SCRIPT_NAME'];
$delim = '?';
foreach ($HTTP_POST_VARS + $HTTP_GET_VARS as $cgi_var_name => $cgi_var_value) {
$cgi_var_name == 'prepare_filter' && $cgi_var_name = 'filter';
$redirect_url .= $delim;
$redirect_url .= rawurlencode($cgi_var_name).'='.rawurlencode($cgi_var_value);
$delim == '?' && $delim = '&';
}
$redirect_url .= $this->cgi['persist'];
header('Location: '.$redirect_url);
exit;
} /* }}} */
 
function execute_report_screen($table_cols) /* {{{ */
{
echo '<form class="',$this->getCSSclass('form'),'" action="';
echo htmlspecialchars($this->page_name),'" method="POST">',"\n";
if ($this->nav_up()) {
$this->display_report_selection_buttons('up');
echo '<hr class="',$this->getCSSclass('hr', 'up'),'">',"\n";
}
echo '<table class="',$this->getCSSclass('main'),'" summary="',$this->tb,'">',"\n";
 
$i = 0;
foreach ($table_cols as $key => $val) {
$css_postfix = @$this->fdd[$key]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, true, $css_postfix);
$varname = 'have_'.$key;
$value = $this->get_cgi_cookie_var($varname);
$checked = @$value ? ' checked' : '';
echo '<tr class="',$this->getCSSclass('row', null, 'next', $css_postfix),'">',"\n";
echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'">';
echo $this->fdd[$i]['name'],'</td>',"\n";
echo '<td class="',$this->getCSSclass('check', null, true, $css_postfix),'">';
echo '<input class="',$css_class_name,'" type="checkbox" name="';
echo htmlspecialchars($varname),'"',$checked,'>';
echo '</td>',"\n";
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($key),">\n";
$varname = 'qf'.$i;
$value = $this->get_cgi_cookie_var($varname);
if ($this->fdd[$key]['select'] == 'D' || $this->fdd[$key]['select'] == 'M') {
$from_table = ! $this->col_has_values($key) || isset($this->fdd[$key]['values']['table']);
$selected = $value;
$value = $this->set_values($key, array('*' => '*'), null, $from_table);
$multiple = $this->col_has_multiple_select($key);
$multiple |= $this->fdd[$key]['select'] == 'M';
$readonly = false;
$strip_tags = true;
$escape = true;
echo $this->htmlSelect($varname.'_id', $css_class_name, $value, $selected,
$multiple, $readonly, $strip_tags, $escape);
} else {
echo '<input class="',$css_class_name,'" type=text name="';
echo htmlspecialchars($varname),'" value="',htmlspecialchars($value),'" size="';
echo min(40, $val),'" maxlength="',min(40, max(10, $val)),'">';
}
echo '</td>',"\n",'</tr>',"\n";
$i++;
}
echo '<tr class="',$this->getCSSclass('row', null, 'next', $css_postfix),'">',"\n";
echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'" colspan="2">';
echo $this->labels['Records per screen'],'</td>';
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'">';
echo '<input class="',$css_class_name,'" type="text" name="inc" value="',$this->inc.'">';
echo '</td></tr>',"\n";
echo '</table>',"\n";
if ($this->nav_down()) {
echo '<hr class="',$this->getCSSclass('hr', 'down'),'">',"\n";
$this->display_report_selection_buttons('down');
}
echo '</form>';
} /* }}} */
 
}
 
/* Modeline for ViM {{{
* vim:set ts=4:
* vim600:fdm=marker fdl=0 fdc=0:
* }}} */
 
?>
/branches/v1.5-cisaille/jrest/util/extensions/phpMyEdit-htmlarea.class.php
New file
0,0 → 1,209
<?php
 
/*
* phpMyEdit - instant MySQL table editor and code generator
*
* extensions/phpMyEdit-htmlarea.class.php - phpMyEdit htmlArea extension
* ____________________________________________________________
*
* Contribution of Ezudin Kurtowich <ekurtovic@ieee.org>, Sarajevo
* Copyright (c) 2003-2006 Platon Group, http://platon.sk/
* All rights reserved.
*
* See README file for more information about this software.
* See COPYING file for license information.
*
* Download the latest version from
* http://platon.sk/projects/phpMyEdit/
*/
 
/* $Platon: phpMyEdit/extensions/phpMyEdit-htmlarea.class.php,v 1.10 2006-01-22 21:44:18 nepto Exp $ */
 
/*
OVERVIEW
--------
 
NOTE...This extension will not work with the CVS version of PME. It has
been replaced by the mce_cal extension.
htmlArea is a free WYSIWYG textarea replacement from
http://www.interactivetools.com/ website.
 
REQUIREMENTS
------------
The extension requires a properly installed htmlArea script
as described on the http://www.interactivetools.com/ site.
 
USAGE
-----
 
This extension enables WYSIWYG editing of a textarea field.
In order to use it, you should:
1. Load htmlArea script in the <head>...</head> section of your
phpMyEdit calling program as described in the htmlarea manual.
NOTE: To avoid an unwanted side effect in css style produced
by phpMyEditSetup.php, delete 'table-width:100%' property.
 
2. Call to phpMyEdit-htmlarea.class.php instead
of phpMyEdit.class.php.
 
Example:
 
require_once 'extensions/phpMyEdit-htmlarea.class.php';
new phpMyEdit_htmlarea($opts);
 
3. Add 'html'=>true parameter to the textarea field definition
in your phpMyEdit calling program.
 
Example:
$opts['fdd']['col_name'] = array(
'name' => 'Column',
'select' => 'T',
'options' => 'ACPVD',
'required' => true,
'textarea' => array(
'html' => true,
'rows' => 11,
'cols' => 81)
);
 
SEARCH KEYWORD
--------------
 
Search for "htmlArea" string in this source code,
to find all extension related modifications.
*/
 
require_once dirname(__FILE__).'/../phpMyEdit.class.php';
 
class phpMyEdit_htmlarea extends phpMyEdit
{
 
/*
* Display functions overriding
*/
 
function display_add_record() /* {{{ */
{
for ($k = 0; $k < $this->num_fds; $k++) {
if ($this->hidden($k)) {
echo $this->htmlHidden($this->fds[$k], $row["qf$k"]);
continue;
}
if (! $this->displayed[$k]) {
continue;
}
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, 'next', $css_postfix);
echo '<tr class="',$this->getCSSclass('row', null, true, $css_postfix),'">',"\n";
echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'">',$this->fdd[$k]['name'],'</td>',"\n";
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'">'."\n";
if ($this->col_has_values($k)) {
$vals = $this->set_values($k);
$selected = @$this->fdd[$k]['default'];
$multiple = $this->fdd[$k]['select'] == 'M' && ! $this->fdd[$k]['values']['table'];
$readonly = $this->readonly($k);
echo $this->htmlSelect($this->fds[$k], $css_class_name, $vals, $selected, $multiple,$readonly);
} elseif (isset ($this->fdd[$k]['textarea'])) {
echo '<textarea class="',$css_class_name,'" name="'.$this->fds[$k].'"';
echo ($this->readonly($k) ? ' disabled' : '');
if (intval($this->fdd[$k]['textarea']['rows']) > 0) {
echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';
}
if (intval($this->fdd[$k]['textarea']['cols']) > 0) {
echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';
}
if (isset($this->fdd[$k]['textarea']['wrap'])) {
echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';
} else {
echo ' wrap="virtual"';
}
echo '>',htmlspecialchars($this->fdd[$k]['default']),'</textarea>',"\n";
 
// EK htmlArea code modification is here
if (isset($this->fdd[$k]['textarea']['html'])) {
echo '<script type="text/javascript" language="javascript1.2"><!--',"\n";
echo 'editor_generate("',$this->fds[$k],'");',"\n";
echo '// --></script>';
}
} else {
// Simple edit box required
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
//$maxlen > 0 || $maxlen = 300;
$size = min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
echo '<input class="',$css_class_name,'" type="text" ';
echo ($this->readonly($k) ? 'disabled ' : ''),' name="',$this->fds[$k],'"';
echo $size_ml_props,' value="';
echo htmlspecialchars($this->fdd[$k]['default']),'">';
}
echo '</td>',"\n";
if ($this->guidance) {
$css_class_name = $this->getCSSclass('help', null, true, $css_postfix);
$cell_value = $this->fdd[$k]['help'] ? $this->fdd[$k]['help'] : '&nbsp;';
echo '<td class="',$css_class_name,'">',$cell_value,'</td>',"\n";
}
echo '</tr>',"\n";
}
} /* }}} */
 
function display_change_field($row, $k) /* {{{ */
{
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, true, $css_postfix);
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'">',"\n";
if ($this->col_has_values($k)) {
$vals = $this->set_values($k);
$multiple = $this->fdd[$k]['select'] == 'M' && ! $this->fdd[$k]['values']['table'];
$readonly = $this->readonly($k);
echo $this->htmlSelect($this->fds[$k], $css_class_name, $vals, $row["qf$k"], $multiple, $readonly);
} elseif (isset($this->fdd[$k]['textarea'])) {
echo '<textarea class="',$css_class_name,'" name="'.$this->fds[$k].'"';
echo ($this->readonly($k) ? ' disabled' : '');
if (intval($this->fdd[$k]['textarea']['rows']) > 0) {
echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';
}
if (intval($this->fdd[$k]['textarea']['cols']) > 0) {
echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';
}
if (isset($this->fdd[$k]['textarea']['wrap'])) {
echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';
} else {
echo ' wrap="virtual"';
}
echo '>',htmlspecialchars($row["qf$k"]),'</textarea>',"\n";
 
// EK htmlArea code modification is here
if (isset($this->fdd[$k]['textarea']['html'])) {
echo '<script type="text/javascript" language="javascript1.2"><!--',"\n";
echo 'editor_generate("',$this->fds[$k],'");',"\n";
echo '// --></script>';
}
} else {
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
//$maxlen > 0 || $maxlen = 300;
$size = min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
echo '<input class="',$css_class_name,'" type="text" ';
echo ($this->readonly($k) ? 'disabled ' : ''),'name="',$this->fds[$k],'" value="';
echo htmlspecialchars($row["qf$k"]),'" ',$size_ml_props,'>',"\n";
}
echo '</td>',"\n";
} /* }}} */
 
}
 
/* Modeline for ViM {{{
* vim:set ts=4:
* vim600:fdm=marker fdl=0 fdc=0:
* }}} */
 
?>
/branches/v1.5-cisaille/jrest/util/extensions/phpMyEdit-slide.class.php
New file
0,0 → 1,144
<?php
 
/*
* phpMyEdit - instant MySQL table editor and code generator
*
* extensions/phpMyEdit-slide.class.php - slide show extension for phpMyEdit
* ____________________________________________________________
*
* Developed by Ondrej Jombik <nepto@platon.sk>
* Copyright (c) 2002-2006 Platon Group, http://platon.sk/
* All rights reserved.
*
* See README file for more information about this software.
* See COPYING file for license information.
*
* Download the latest version from
* http://platon.sk/projects/phpMyEdit/
*/
 
/* $Platon: phpMyEdit/extensions/phpMyEdit-slide.class.php,v 1.10 2006-01-22 21:44:24 nepto Exp $ */
 
/*
* Coding elapsed time: from 8:30 to 10:30 at 30th October 2002
* with heavy patching phpMyEdit core class.
*
* Music used: E-Type (Campione, This is the Way and others)
*/
 
require_once dirname(__FILE__).'/../phpMyEdit.class.php';
 
class phpMyEdit_slide extends phpMyEdit
{
// Extension options array
var $ext;
 
function phpMyEdit_slide($opts) /* {{{ */
{
$execute = 1;
isset($opts['execute']) && $execute = $opts['execute'];
$opts['execute'] = 0;
parent::phpMyEdit($opts);
 
$this->ext = $opts['ext'];
 
$execute && $this->execute($opts);
} /* }}} */
 
function display_record_buttons() /* {{{ */
{
// TODO: classify this table and cells
echo '<table border=0 cellpadding=0 cellspacing=0 width="100%" style="border:0;padding:0;">';
echo '<tr><td align=left style="text-align:left;border:0;padding:0;" nowrap>' . "\n";
if ($this->change_operation()) {
echo '<input type="submit" name="savechange" value="'.$this->labels['Save'].'" />'."\n";
echo '<input type="submit" name="morechange" value="'.$this->labels['Apply'].'" />'."\n";
echo '<input type="button" name="cancel" value="'.$this->labels['Cancel'].'" onClick="form.submit();" />'."\n";
echo '<input type="hidden" name="rec_change" value="1">';
} elseif ($this->view_operation()) {
if ($this->change_enabled()) {
echo '<input type="submit" name="operation" value="'.$this->labels['Change'].'" />'."\n";
}
echo '<input type="submit" name="cancel" value="'.$this->labels['Cancel'].'" />'."\n";
}
 
if (! $this->ext['prev_disable']) {
$disabled = $this->ext['prev'] ? '' : ' disabled';
echo '<input'.$disabled.' type="submit" name="'.ltrim($disabled).'prev" value="'
.$this->labels['Prev'].'">&nbsp;';
echo '<input type="hidden" name="rec_prev" value="'.$this->ext['prev'].'">';
}
if (! $this->ext['next_disable']) {
$disabled = $this->ext['next'] ? '' : ' disabled';
echo '<input'.$disabled.' type="submit" name="'.ltrim($disabled).'next" value="'
.$this->labels['Next'].'">';
echo '<input type="hidden" name="rec_next" value="'.$this->ext['next'].'">';
}
echo '</td></tr></table>'."\n";
} /* }}} */
 
function execute($opts) /* {{{ */
{
if ($this->get_cgi_var('rec_change')
&& ($this->next_operation() || $this->prev_operation())) {
$this->operation = $this->labels['Change'];
}
if (! $this->change_operation()) {
$this->operation = $this->labels['View'];
}
if ($this->prev_operation()) {
! $this->ext['prev_disabled'] && $this->rec = $this->get_cgi_var('rec_prev');
$this->prev = '';
}
if ($this->next_operation()) {
! $this->ext['next_disabled'] && $this->rec = $this->get_cgi_var('rec_next');
$this->next = '';
}
if (! $this->rec) {
$this->rec = $this->ext['rec'];
}
 
if (! $this->rec
|| (! $this->ext['prev_disable'] && ! $this->ext['prev'])
|| (! $this->ext['next_disable'] && ! $this->ext['next'])) {
if ($this->connect() == false) {
return false;
}
$query_parts = array(
'type' => 'select',
// XXX FIXME - simplify query
'select' => 'PMEtable0.'.$this->key,
'from' => $this->get_SQL_join_clause(),
'where' => $this->get_SQL_where_from_query_opts());
// TODO: order by clausule according to default sort order options
$res = $this->myquery($this->get_SQL_query($query_parts), __LINE__);
$ids = array();
while (($row = @mysql_fetch_array($res, MYSQL_NUM)) !== false) {
$ids[] = $row[0];
}
@mysql_free_result($res);
if ($this->rec) {
$idx = array_search($this->rec, $ids);
$idx === false && $idx = 0;
} else {
$idx = 0;
}
 
$this->rec = $ids[$idx];
! $this->ext['prev'] && $this->ext['prev'] = $ids[$idx - 1];
! $this->ext['next'] && $this->ext['next'] = $ids[$idx + 1];
}
$this->recreate_fdd();
$this->recreate_displayed();
parent::execute();
} /* }}} */
 
}
 
/* Modeline for ViM {{{
* vim:set ts=4:
* vim600:fdm=marker fdl=0 fdc=0:
* }}} */
 
?>
/branches/v1.5-cisaille/jrest/util/extensions/phpMyEdit-mce-cal.class.php
New file
0,0 → 1,509
<?php
 
/*
* phpMyEdit - instant MySQL table editor and code generator
*
* extensions/phpMyEdit-mce-cal.class.php - phpMyEdit html area & calendar popup extension
* ____________________________________________________________
*
* Contribution of Adam Hammond <php@pixolet.co.uk>, London, UK
* Contribution of Ezudin Kurtowich <ekurtovic@ieee.org>, Sarajevo
* Copyright (c) 2003-2006 Platon Group, http://platon.sk/
* All rights reserved.
*
* Updated 28th Jul 2005
*
* Updated to use TinyMCE instead of HTMLArea
* Updated to handle multiple tabs and to use PME prefixes.
* Updated to include sub-form patch
*
*
*
* See README file for more information about this software.
* See COPYING file for license information.
*
* Download the latest version from
* http://platon.sk/projects/phpMyEdit/
*/
 
/* $Platon: phpMyEdit/extensions/phpMyEdit-mce-cal.class.php,v 1.6 2006-09-16 18:43:47 nepto Exp $ */
/*
OVERVIEW
--------
 
mce_cal extends the standard phpMyEdit class to allow
a calendar popup helper to be put on any text field and for any textarea
field to turned into an HTML editor.
This extension uses the free jsCalendar from http://dynarch.com/mishoo
and the TinyMCE code from http://tinymce.moxiecode.com/
REQUIREMENTS
------------
 
The requirement is a properly installed jsCalendar and TinyMCE script.
All browsers supported by these scripts are supported by this
extension. Note that version 1.44 or later for TinyMCE is required.
USAGE
-----
 
For both features:
1. Call to phpMyEdit-mce-cal.class.php instead
of phpMyEdit.class.php.
 
Example:
 
require_once 'extensions/phpMyEdit-mce-cal.class.php';
new phpMyEdit_mce_cal($opts);
 
 
 
HTML TextArea
 
This enables WYSIWYG editing of a textarea field.
In order to use it, you should:
 
1. Load TinyMCE script in the <head>...</head> section of your
phpMyEdit calling program as described in the htmlarea manual.
 
<!-- tinyMCE -->
<script language="javascript" type="text/javascript" src="js/<path to TinyMCE>"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
mode : "specific_textareas",
auto_reset_designmode : true
});
</script>
<!-- /tinyMCE -->
 
where 'js/<path to TinyMCE>' is the path to the javascript code
 
NOTES:
A. The PME implementation uses the "specific_textareas" mode - this
must always be set
 
B. Due to a bug in Mozilla, if any of the textareas being used as HTML
editors are in tabs and are initially hidden, the width and height
need to be specified in the tinyMCE initialization and
'auto_reset_designmode' must be set to 'true':
tinyMCE.init({
mode : "specific_textareas",
auto_reset_designmode : true,
width: "800",
height: "200"
});
 
2. Add 'html'=>true parameter to the textarea field definition
in your phpMyEdit calling program.
 
Example:
 
$opts['fdd']['col_name'] = array(
'name' => 'Column',
'select' => 'T',
'options' => 'ACPVD',
'required' => true,
'textarea' => array(
'html' => true,
'rows' => 11,
'cols' => 81)
);
 
3. It is also possible to have multiple text area formats on the same
form. This is done by specifying a text tag for the textarea:
 
$opts['fdd']['col_name'] = array(
'name' => 'Column',
'select' => 'T',
'options' => 'ACPVD',
'required' => true,
'textarea' => array(
'html' => 'format1',
'rows' => 11,
'cols' => 81)
);
 
You then need to initialize TinyMCE in the header to recognize all of
the tags used in the textareas.
EXAMPLE
In the following, two formats of tinyMCE editor are defined.
 
This example is the default, and will be used for any fields where
'html' is set to true.
 
tinyMCE.init({
mode : "specific_textareas",
auto_reset_designmode : true
});
 
This second example has an extra parameter, 'textarea_trigger', which is
set to the text tag given to the textarea in PME with 'mce_' prepended
to it.
 
tinyMCE.init({
mode : "specific_textareas",
auto_reset_designmode : true,
textarea_trigger : "mce_format1",
theme : "advanced",
width: "800",
height: "200",
plugins : "table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,flash,searchreplace,print",
theme_advanced_buttons1_add_before : "save,separator",
theme_advanced_buttons1_add : "fontselect,fontsizeselect",
theme_advanced_buttons2_add : "separator,insertdate,inserttime,preview,zoom,separator,forecolor,backcolor",
theme_advanced_buttons2_add_before: "cut,copy,paste,separator,search,replace,separator",
theme_advanced_buttons3_add_before : "tablecontrols,separator",
theme_advanced_buttons3_add : "emotions,iespell,flash,advhr,separator,print",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_path_location : "bottom",
content_css : "example_full.css",
plugin_insertdate_dateFormat : "%Y-%m-%d",
plugin_insertdate_timeFormat : "%H:%M:%S",
extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]"
});
So:
'html' => 'format1' maps to textarea_trigger : "mce_format1"
'html' => 'foo' maps to textarea_trigger : "mce_foo"
'html' => 'bar' maps to textarea_trigger : "mce_bar"
 
You can initialize TinyMCE as many times as you need to give you as many
editor formats as you need.
 
CALENDAR
 
This extension enables the display of a popup calendar selection
against selected fields.
In order to use it, you should:
 
1. Load the jsCalendar scripts in the <head>...</head> section of
your phpMyEdit calling program, substituting the correct paths:
 
<script type="text/javascript" src="js/jscalendar/calendar.js"></script>
<script type="text/javascript" src="js/jscalendar/lang/calendar-en.js"></script>
<script type="text/javascript" src="js/jscalendar/calendar-setup.js"></script>
 
2. Choose your preferred jsCalendar CSS file (see jsCalendar
documentation) and add the following in the <head>...</head>
section of your phpMyEdit calling program, substituting the
correct path:
<link rel="stylesheet" type="text/css" media="screen"
href="js/jscalendar/calendar-system.css">
 
3. Add 'calendar' parameter to the field definitions where you
want a calendar popup in your phpMyEdit calling program.
 
Example:
 
$opts['fdd']['col_name'] = array(
'name' => 'Column',
'select' => 'T',
'options' => 'ACPVD',
'required' => true,
'calendar' => true
);
 
This is will display a button next to the field which pops up
a calendar when clicked. If that field has a 'strftimemask'
parameter set, it will use this for the date format.
For more advanced usage, you can set the 'calendar' parameter
to an array of valid jsCalendar Calendar.setup options
(see jSCalendar document for details). Note that not all
of these options make sense to use in phpMyEdit, and some
of them will actively break the function.
Example:
$opts['fdd']['col_name'] = array(
'name' => 'Column',
'select' => 'T',
'options' => 'ACPVD',
'required' => true,
'calendar' => array(
'ifFormat' => '%Y/%m/%d', // defaults to the ['strftimemask']
'firstDay' => 1, // 0 = Sunday, 1 = Monday
'singleClick' => true, // single or double click to close
'weekNumbers' => true, // Show week numbers
'showsTime' => false, // Show time as well as date
'timeFormat' => '24', // 12 or 24 hour clock
'button' => true, // Display button (rather then clickable area)
'label' => '...', // button label (used by phpMyEdit)
'date' => '2003-12-19 10:00' // Initial date/time for popup
// (see notes below)
)
);
 
NOTES
-----
 
1. The popup will normally set the initial value to the current
field value or to current date/time. 'date' option will always
override this, even if there is a current date/time value
in the field. If you want a default value only if the field
is currently empty, use the phpMyEdit 'default' option.
 
2. Only the options listed above may be set by the user, any other
options will be ignored.
3. The 'label' option can contain HTML markup which will be displayed as
the button/clickable area to pull up the calendar
 
SEARCH KEYWORD
--------------
 
Search for "htmlcal" string in this source code,
to find all extension related modifications.
*/
 
require_once dirname(__FILE__).'/../phpMyEdit.class.php';
 
class phpMyEdit_mce_cal extends phpMyEdit
{
/* calendar mod start */
 
var $calendars; // Array for collecting list of fields with calendar popups
/* Array of valid options for passing to Calendar.setup */
var $valid_opts = array(
'button','ifFormat','singleClick','firstDay',
'weekNumbers','showsTime','timeFormat','date'
);
 
/**
* Checks to see if the calendar parameter is set on the field
*
* @param k current field name
* @param curval current value of field (set to null for default)
*
* If the calendar parameter is set on the field, this function displays
* the button. It then pushes the Calendar.setup parameters into an array,
* including the user specified ones in the calling program is they exist.
* This array is then added to the $calendars array indexed by the field
* name. This allows for multiple fields with calendar popups.
*/
function calPopup_helper($k, $curval) /* {{{ */
{
if (@$this->fdd[$k]['calendar']) {
$cal_ar['ifFormat'] = '%Y-%m-%d %H:%M';
$cal_ar['showsTime'] = true;
$cal_ar['singleClick'] = false;
if (isset($curval)) {
if (substr($curval, 0, 4) != '0000')
$cal_ar['date'] = $curval;
}
if (isset($this->fdd[$k]['strftimemask'])) {
$cal_ar['ifFormat'] = $this->fdd[$k]['strftimemask'];
}
if (is_array($this->fdd[$k]['calendar'])) {
foreach($this->fdd[$k]['calendar'] as $ck => $cv) {
$cal_ar[$ck] = $cv;
}
}
$cal_ar['button'] = $this->dhtml['prefix'].'calbutton_'.$this->fds[$k];
$this->calendars[$this->fds[$k]] = $cal_ar;
 
$label = @$this->fdd[$k]['calendar']['label'];
strlen($label) || $label = '...';
 
$do_button = true;
if (isset($this->fdd[$k]['calendar']['button'])) {
$do_button = $this->fdd[$k]['calendar']['button'];
};
 
if ($do_button) {
echo '<button id="',$cal_ar['button'],'">',$label,'</button>';
} else {
echo '<span style="cursor: pointer" id="',$cal_ar['button'],'">',$label,'</span>';
}
}
} /* }}} */
 
/* calendar mod end */
 
function display_add_record() /* {{{ */
{
for ($tab = 0, $k = 0; $k < $this->num_fds; $k++) {
if (isset($this->fdd[$k]['tab']) && $this->tabs_enabled() && $k > 0) {
$tab++;
echo '</table>',"\n";
echo '</div>',"\n";
echo '<div id="'.$this->dhtml['prefix'].'tab',$tab,'">',"\n";
echo '<table class="',$this->getCSSclass('main'),'" summary="',$this->tb,'">',"\n";
}
if (! $this->displayed[$k]) {
continue;
}
if ($this->hidden($k)) {
echo $this->htmlHiddenData($this->fds[$k], $this->fdd[$k]['default']);
continue;
}
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, 'next', $css_postfix);
echo '<tr class="',$this->getCSSclass('row', null, true, $css_postfix),'">',"\n";
echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'">';
echo $this->fdd[$k]['name'],'</td>',"\n";
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($k),">\n";
if ($this->col_has_values($k)) {
$vals = $this->set_values($k);
$selected = @$this->fdd[$k]['default'];
$multiple = $this->col_has_multiple_select($k);
$readonly = $this->readonly($k);
$strip_tags = true;
$escape = true;
echo $this->htmlSelect($this->cgi['prefix']['data'].$this->fds[$k], $css_class_name,
$vals, $selected, $multiple, $readonly, $strip_tags, $escape);
} elseif (isset ($this->fdd[$k]['textarea'])) {
echo '<textarea class="',$css_class_name,'" name="',$this->cgi['prefix']['data'].$this->fds[$k],'"';
echo ($this->readonly($k) ? ' disabled' : '');
if (intval($this->fdd[$k]['textarea']['rows']) > 0) {
echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';
}
if (intval($this->fdd[$k]['textarea']['cols']) > 0) {
echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';
}
if (isset($this->fdd[$k]['textarea']['wrap'])) {
echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';
} else {
echo ' wrap="virtual"';
};
// mce mod start
if (isset($this->fdd[$k]['textarea']['html'])) {
$mce_tag = 'editable';
if (is_string($this->fdd[$k]['textarea']['html'])) {
$mce_tag = $this->fdd[$k]['textarea']['html'];
};
echo ' mce_'.$mce_tag.'=true ';
};
// mce mod end
echo '>',htmlspecialchars($this->fdd[$k]['default']),'</textarea>',"\n";
} else {
// Simple edit box required
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
echo '<input class="',$css_class_name,'" ';
echo ($this->password($k) ? 'type="password"' : 'type="text"');
echo ($this->readonly($k) ? ' disabled' : '');
/* calendar mod start */
echo ' id="',$this->dhtml['prefix'].'fld_'.$this->fds[$k],'"';
/* calendar mod end */
echo ' name="',$this->cgi['prefix']['data'].$this->fds[$k],'"';
echo $size_ml_props,' value="';
echo htmlspecialchars($this->fdd[$k]['default']),'">';
/* calendar mod start */
/* Call htmlcal helper function */
$this->calPopup_helper($k, null);
/* calendar mod end */
}
echo '</td>',"\n";
if ($this->guidance) {
$css_class_name = $this->getCSSclass('help', null, true, $css_postfix);
$cell_value = $this->fdd[$k]['help'] ? $this->fdd[$k]['help'] : '&nbsp;';
echo '<td class="',$css_class_name,'">',$cell_value,'</td>',"\n";
}
echo '</tr>',"\n";
}
} /* }}} */
 
function display_change_field($row, $k) /* {{{ */
{
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, true, $css_postfix);
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($k),">\n";
if ($this->col_has_values($k)) {
$vals = $this->set_values($k);
$multiple = $this->col_has_multiple_select($k);
$readonly = $this->readonly($k);
$strip_tags = true;
$escape = true;
echo $this->htmlSelect($this->cgi['prefix']['data'].$this->fds[$k], $css_class_name,
$vals, $row["qf$k"], $multiple, $readonly, $strip_tags, $escape);
} elseif (isset($this->fdd[$k]['textarea'])) {
echo '<textarea class="',$css_class_name,'" name="',$this->cgi['prefix']['data'].$this->fds[$k],'"';
echo ($this->readonly($k) ? ' disabled' : '');
if (intval($this->fdd[$k]['textarea']['rows']) > 0) {
echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';
}
if (intval($this->fdd[$k]['textarea']['cols']) > 0) {
echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';
}
if (isset($this->fdd[$k]['textarea']['wrap'])) {
echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';
} else {
echo ' wrap="virtual"';
};
// mce mod start
if (isset($this->fdd[$k]['textarea']['html'])) {
$mce_tag = 'editable';
if (is_string($this->fdd[$k]['textarea']['html'])) {
$mce_tag = $this->fdd[$k]['textarea']['html'];
};
echo ' mce_'.$mce_tag.'=true ';
};
// mce mod end
echo '>',htmlspecialchars($row["qf$k"]),'</textarea>',"\n";
} else {
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
echo '<input class="',$css_class_name,'" type="text" ';
echo ($this->readonly($k) ? 'disabled ' : '');
/* calendar mod start */
echo ' id="',$this->dhtml['prefix'].'fld_'.$this->fds[$k],'"';
/* calendar mod end */
echo 'name="',$this->cgi['prefix']['data'].$this->fds[$k],'" value="';
echo htmlspecialchars($row["qf$k"]),'" ',$size_ml_props,'>',"\n";
/* calendar mod start */
/* Call calPopup helper function */
$this->calPopup_helper($k, htmlspecialchars($row["qf$k"]));
/* calendar mod end */
}
echo '</td>',"\n";
} /* }}} */
 
function form_end() /* {{{ */
{
if ($this->display['form']) {
echo '</form>',"\n";
 
/* calendar mod start */
 
/* Add script calls to the end of the form for all fields
with calendar popups. */
if (isset($this->calendars)) {
echo '<script type="text/javascript"><!--',"\n";
foreach($this->calendars as $ck => $cv) {
echo 'Calendar.setup({',"\n";
foreach ($cv as $ck1 => $cv1) {
if (in_array($ck1, $this->valid_opts)) {
echo "\t",str_pad($ck1, 15),' : "',$cv1,'",',"\n";
}
}
echo "\t",str_pad('inputField', 15),' : "',$this->dhtml['prefix'].'fld_'.$ck,'"',"\n";
echo '});',"\n";
};
echo '// -->',"\n";
echo '</script>',"\n";
};
/* calendar mod end */
};
} /* }}} */
 
}
 
?>
/branches/v1.5-cisaille/jrest/util/extensions/phpMyEdit-calpopup.class.php
New file
0,0 → 1,357
<?php
 
/*
* phpMyEdit - instant MySQL table editor and code generator
*
* extensions/phpMyEdit-calpopup.class.php - phpMyEdit calendar popup extension
* ____________________________________________________________
*
* Contribution of Adam Hammond <php@pixolet.co.uk>, London, UK
* Copyright (c) 2003-2006 Platon Group, http://platon.sk/
* All rights reserved.
*
* See README file for more information about this software.
* See COPYING file for license information.
*
* Download the latest version from
* http://platon.sk/projects/phpMyEdit/
*/
/* $Platon: phpMyEdit/extensions/phpMyEdit-calpopup.class.php,v 1.9 2006-01-22 21:44:17 nepto Exp $ */
 
/*
OVERVIEW
--------
 
NOTE...This extension will not work with the CVS version of PME
 
calPopup extends the standard phpMyEdit class to allow
a calendar popup helper to be put on any text field.
This extension uses the free jsCalendar code from
http://dynarch.com/mishoo/calendar.epl website.
REQUIREMENTS
------------
 
The requirement is a properly installed jsCalendar script.
All browsers supported by jsCalendar are supported by this
extension.
 
USAGE
-----
 
This extension enables the display of a popup calendar selection
against selected fields.
In order to use it, you should:
 
1. Load the jsCalendar scripts in the <head>...</head> section of
your phpMyEdit calling program, substituting the correct paths:
 
<script type="text/javascript" src="js/calendar.js"></script>
<script type="text/javascript" src="js/lang/calendar-en.js"></script>
<script type="text/javascript" src="js/calendar-setup.js"></script>
 
2. Choose your preferred jsCalendar CSS file (see jsCalendar
documentation) and add the following in the <head>...</head>
section of your phpMyEdit calling program, substituting the
correct path:
<link rel="stylesheet" type="text/css" media="screen"
href="css/calendar-system.css">
 
NOTE: To avoid an unwanted side effect in the CSS style
produced by phpMyEditSetup.php, add a 'width:auto' property
into the '.calendar table' entry in your selected jsCalendar
style sheet.
 
3. Call to phpMyEdit-calPopup.class.php instead
of phpMyEdit.class.php.
 
Example:
 
require_once 'extensions/phpMyEdit-calpopup.class.php';
new phpMyEdit_calpopup($opts);
 
4. Add 'calendar' parameter to the field definitions where you
want a calendar popup in your phpMyEdit calling program.
 
Example:
 
$opts['fdd']['col_name'] = array(
'name' => 'Column',
'select' => 'T',
'options' => 'ACPVD',
'required' => true,
'calendar' => true
);
 
This is will display a button next to the field which pops up
a calendar when clicked. If that field has a 'strftimemask'
parameter set, it will use this for the date format.
For more advanced usage, you can set the 'calendar' parameter
to an array of valid jsCalendar Calendar.setup options
(see jSCalendar document for details). Note that not all
of these options make sense to use in phpMyEdit, and some
of them will actively break the function.
Example:
$opts['fdd']['col_name'] = array(
'name' => 'Column',
'select' => 'T',
'options' => 'ACPVD',
'required' => true,
'calendar' => array(
'ifFormat' => '%Y/%m/%d', // defaults to the ['strftimemask']
'firstDay' => 1, // 0 = Sunday, 1 = Monday
'singleClick' => true, // single or double click to close
'weekNumbers' => true, // Show week numbers
'showsTime' => false, // Show time as well as date
'timeFormat' => '24', // 12 or 24 hour clock
'label' => '...', // button label (used by phpMyEdit)
'date' => '2003-12-19 10:00' // Initial date/time for popup
// (see notes below)
)
);
 
NOTES
-----
 
1. The popup will normally set the initial value to the current
field value or to current date/time. 'date' option will always
override this, even if there is a current date/time value
in the field. If you want a default value only if the field
is currently empty, use the phpMyEdit 'default' option.
 
2. Only the options listed above may be set by the user, any other
options will be ignored.
 
SEARCH KEYWORD
--------------
 
Search for "CalPopup" string in this source code,
to find all extension related modifications.
*/
 
require_once dirname(__FILE__).'/../phpMyEdit.class.php';
 
class phpMyEdit_calpopup extends phpMyEdit
{
/* CalPopup mod start */
 
/* Array for collecting list of fields with calendar popups */
var $calendars;
 
/* Array of valid options for passing to Calendar.setup */
var $valid_opts = array(
'button','ifFormat','singleClick','firstDay',
'weekNumbers','showsTime','timeFormat','date'
);
 
/**
* Checks to see if the calendar parameter is set on the field
*
* @param k current field name
* @param curval current value of field (set to null for default)
*
* If the calendar parameter is set on the field, this function displays
* the button. It then pushes the Calendar.setup parameters into an array,
* including the user specified ones in the calling program is they exist.
* This array is then added to the $calendars array indexed by the field
* name. This allows for multiple fields with calendar popups.
*/
function CalPopup_helper($k, $curval) /* {{{ */
{
if (@$this->fdd[$k]['calendar']) {
$cal_ar['ifFormat'] = '%Y-%m-%d %H:%M';
$cal_ar['showsTime'] = true;
$cal_ar['singleClick'] = false;
if (isset($curval)) {
if (substr($curval, 0, 4) != '0000')
$cal_ar['date'] = $curval;
}
if (isset($this->fdd[$k]['strftimemask'])) {
$cal_ar['ifFormat'] = $this->fdd[$k]['strftimemask'];
}
if (is_array($this->fdd[$k]['calendar'])) {
foreach($this->fdd[$k]['calendar'] as $ck => $cv) {
$cal_ar[$ck] = $cv;
}
}
$cal_ar['button'] = 'pme_calpopup_button_'.$this->fds[$k];
$this->calendars[$this->fds[$k]] = $cal_ar;
$label = @$this->fdd[$k]['calendar']['label'];
strlen($label) || $label = '...';
echo '<button id="',$cal_ar['button'],'">',$label,'</button>';
}
} /* }}} */
 
/* CalPopup mod end */
 
function display_add_record() /* {{{ */
{
for ($tab = 0, $k = 0; $k < $this->num_fds; $k++) {
if (isset($this->fdd[$k]['tab']) && $this->tabs_enabled() && $k > 0) {
$tab++;
echo '</table>',"\n";
echo '</div>',"\n";
echo '<div id="phpMyEdit_tab',$tab,'">',"\n";
echo '<table class="',$this->getCSSclass('main'),'" summary="',$this->tb,'">',"\n";
}
if (! $this->displayed[$k]) {
continue;
}
if ($this->hidden($k)) {
echo $this->htmlHidden($this->fds[$k], $row["qf$k"]);
continue;
}
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, 'next', $css_postfix);
echo '<tr class="',$this->getCSSclass('row', null, true, $css_postfix),'">',"\n";
echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'">',$this->fdd[$k]['name'],'</td>',"\n";
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($k),">\n";
if ($this->col_has_values($k)) {
$vals = $this->set_values($k);
$selected = @$this->fdd[$k]['default'];
$multiple = $this->col_has_multiple_select($k);
$readonly = $this->readonly($k);
$strip_tags = true;
$escape = true;
echo $this->htmlSelect($this->fds[$k], $css_class_name, $vals, $selected,
$multiple, $readonly, $strip_tags, $escape);
} elseif (isset ($this->fdd[$k]['textarea'])) {
echo '<textarea class="',$css_class_name,'" name="',$this->fds[$k],'"';
echo ($this->readonly($k) ? ' disabled' : '');
if (intval($this->fdd[$k]['textarea']['rows']) > 0) {
echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';
}
if (intval($this->fdd[$k]['textarea']['cols']) > 0) {
echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';
}
if (isset($this->fdd[$k]['textarea']['wrap'])) {
echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';
} else {
echo ' wrap="virtual"';
}
echo '>',htmlspecialchars($this->fdd[$k]['default']),'</textarea>',"\n";
} else {
// Simple edit box required
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
 
/* CalPopup mod start */
if (@$this->fdd[$k]['calendar']) {
$size_ml_props .= ' id="pme_calpopup_input_'.$this->fds[$k].'"';
}
/* CalPopup mod end */
 
echo '<input class="',$css_class_name,'" type="text" ';
echo ($this->readonly($k) ? 'disabled ' : ''),' name="',$this->fds[$k],'"';
echo $size_ml_props,' value="';
echo htmlspecialchars($this->fdd[$k]['default']),'">';
 
/* CalPopup mod start */
/* Call CalPopup helper function */
$this->CalPopup_helper($k, null);
/* CalPopup mod end */
}
echo '</td>',"\n";
if ($this->guidance) {
$css_class_name = $this->getCSSclass('help', null, true, $css_postfix);
$cell_value = $this->fdd[$k]['help'] ? $this->fdd[$k]['help'] : '&nbsp;';
echo '<td class="',$css_class_name,'">',$cell_value,'</td>',"\n";
}
echo '</tr>',"\n";
}
} /* }}} */
 
function display_change_field($row, $k) /* {{{ */
{
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, true, $css_postfix);
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($k),">\n";
if ($this->col_has_values($k)) {
$vals = $this->set_values($k);
$multiple = $this->col_has_multiple_select($k);
$readonly = $this->readonly($k);
$strip_tags = true;
$escape = true;
echo $this->htmlSelect($this->fds[$k], $css_class_name, $vals, $row["qf$k"],
$multiple, $readonly, $strip_tags, $escape);
} elseif (isset($this->fdd[$k]['textarea'])) {
echo '<textarea class="',$css_class_name,'" name="',$this->fds[$k],'"';
echo ($this->readonly($k) ? ' disabled' : '');
if (intval($this->fdd[$k]['textarea']['rows']) > 0) {
echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';
}
if (intval($this->fdd[$k]['textarea']['cols']) > 0) {
echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';
}
if (isset($this->fdd[$k]['textarea']['wrap'])) {
echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';
} else {
echo ' wrap="virtual"';
}
echo '>',htmlspecialchars($row["qf$k"]),'</textarea>',"\n";
} else {
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
 
/* CalPopup mod start */
if (@$this->fdd[$k]['calendar']) {
$size_ml_props .= ' id="pme_calpopup_input_'.$this->fds[$k].'"';
}
/* CalPopup mod end */
 
echo '<input class="',$css_class_name,'" type="text" ';
echo ($this->readonly($k) ? 'disabled ' : ''),'name="',$this->fds[$k],'" value="';
echo htmlspecialchars($row["qf$k"]),'" ',$size_ml_props,'>',"\n";
 
/* CalPopup mod start */
/* Call CalPopup helper function */
$this->CalPopup_helper($k, htmlspecialchars($row["qf$k"]));
/* CalPopup mod end */
}
echo '</td>',"\n";
} /* }}} */
 
function form_end() /* {{{ */
{
if ($this->display['form']) {
echo '</form>',"\n";
/* CalPopup mod start */
/* Add script calls to the end of the form for all fields
with calendar popups. */
if (isset($this->calendars)) {
echo '<script type="text/javascript"><!--',"\n";
foreach($this->calendars as $ck => $cv) {
echo 'Calendar.setup({',"\n";
foreach ($cv as $ck1 => $cv1) {
if (in_array($ck1, $this->valid_opts)) {
echo "\t",str_pad($ck1, 15),' : "',$cv1,'",',"\n";
}
}
echo "\t",str_pad('inputField', 15),' : "pme_calpopup_input_',$ck,'"',"\n";
echo '});',"\n";
};
echo '// --></script>',"\n";
};
 
/* CalPopup mod end */
};
} /* }}} */
}
 
?>