*** empty log message ***

This commit is contained in:
sebastian 2005-03-06 16:57:54 +00:00
parent 0f4a5bfd34
commit 2d5684a528
23 changed files with 841 additions and 50 deletions

View File

@ -3,6 +3,7 @@ $Smarty->register_object('UIBROWSER', $uiBrowser);
$Smarty->register_object('PL', $uiBrowser->PLAYLIST);
$Smarty->register_object('BROWSE', $uiBrowser->BROWSE);
$Smarty->register_object('SEARCH', $uiBrowser->SEARCH);
$Smarty->assign_by_ref ('SCHEDULER', $uiBrowser->SCHEDULER);
$Smarty->register_function('str_repeat', 'S_str_repeat');
$Smarty->register_function('urlencode', 'S_urlencode');

View File

@ -91,7 +91,8 @@ $ui_fmask = array(
'element' => 'stationlogo',
'type' => 'file',
'label' => 'Station Logo',
'requiredmsg'=> 'please select Logo file'
'requiredmsg'=> 'please select Logo file',
'attributes'=> array('multiple' => 'application/pdf')
),
array(
'element' =>'Submit',
@ -370,7 +371,7 @@ $ui_fmask = array(
'type' => 'select',
'label' => 'Rows per Page',
'options' => array(
#1 => 1,
2 => 2,
5 => 5,
10 => 10,
25 => 25,
@ -488,7 +489,7 @@ $ui_fmask = array(
'type' => 'select',
'label' => 'Rows per Page',
'options' => array(
#1 => 1,
2 => 2,
5 => 5,
10 => 10,
25 => 25,

View File

@ -154,6 +154,10 @@ if ($uiBrowser->userid) {
case "PL.simpleManagement":
$Smarty->assign('PL_simpleManagement', TRUE);
break;
case "SCHEDULER":
$Smarty->assign('showScheduler', TRUE);
break;
}
}

View File

@ -45,7 +45,7 @@ switch($_REQUEST['act']){
if ($_REQUEST['id']) {
$uiHandler->editWebstream($_REQUEST, $ui_fmask['webstream']);
} else {
$ui_tmpid = $uiHandler->addWebstream($_REQUEST, $ui_fmask['webstream']);
$ui_tmpid = $uiHandler->addWebstream($_REQUEST, $ui_fmask['webstream']);
$uiHandler->SCRATCHPAD->addItem($ui_tmpid);
}
break;
@ -217,6 +217,16 @@ switch($_REQUEST['act']){
$uiHandler->PLAYLIST->setReload();
break;
case "SCHEDULER.set":
$uiHandler->SCHEDULER->set($_REQUEST);
$uiHandler->SCHEDULER->setReload();
break;
case "SCHEDULER.uploadPL":
$uiHandler->SCHEDULER->uploadPL($_REQUEST['gunid']);
$uiHandler->SCHEDULER->setReload();
break;
default:
$_SESSION["alertMsg"] = tra("Unknown method: $1", $_REQUEST["act"]);
header("Location: ".UI_BROWSER.'?popup[]=_reload_parent&popup[]=_close');

View File

@ -3,13 +3,15 @@
{if $searchForm}
{assign var="_act_prefix" value="SEARCH"}
{include file="library/searchForm.tpl"}
{SEARCH->getResult assign=searchResults}
{SEARCH->getResult assign=_results}
{SEARCH->getCriteria assign=_criteria}
{/if}
{if $browseForm}
{if $browseForm}
{assign var="_act_prefix" value="BROWSE"}
{include file="library/browseForm.tpl"}
{BROWSE->getResult assign=searchResults}
{BROWSE->getResult assign=_results}
{BROWSE->getCriteria assign=_criteria}
{/if}
{include file="library/results.tpl"}

View File

@ -1,8 +1,6 @@
{*Smarty template*}
<div id="searchres">
<center>
{if $searchResults.count > 0}
{if $_results.cnt > 0}
<table border="0" width="50%">
<tr style="background-color: {cycle values='#eeeeee, #dadada'}">
<td align="center"><a href="#" onClick="hpopup('{$UI_HANDLER}?act={$_act_prefix}.reOrder&by=title', 'order');">{tra 0=Title}</a></td>
@ -10,7 +8,7 @@
<td align="center"><a href="#" onClick="hpopup('{$UI_HANDLER}?act={$_act_prefix}.reOrder&by=extent', 'order');">{tra 0=Duration}</a></td>
<td align="center"><a href="#" onClick="hpopup('{$UI_HANDLER}?act={$_act_prefix}.reOrder&by=type', 'order');">{tra 0=Type}</a></td>
</tr>
{foreach from=$searchResults.items item=i}
{foreach from=$_results.items item=i}
<tr style="background-color: {cycle values='#eeeeee, #dadada'}" {assign var="moreContextBefore" value=", 'SP.addItem'"}{include file="sub/contextmenu.tpl"}>
<td align="center">
{if $PLAYLIST.id == $i.id}
@ -26,17 +24,23 @@
{/foreach}
<tr>
<td>
{if $searchResults.prev}<a href="#" onClick="hpopup('{$UI_HANDLER}?act={$_act_prefix}.setOffset&page=prev', 'pager')">back</a>{/if}
{if $_results.prev}<a href="#" onClick="hpopup('{$UI_HANDLER}?act={$_act_prefix}.setOffset&page=prev', 'pager')">backward</a>{/if}
</td>
<td>
Count:&nbsp;{$_results.cnt}
Page:&nbsp;&nbsp;{$_results.page+1}
Range:&nbsp;{$_criteria.offset+1}-{if ($_criteria.offset+$_criteria.limit)>$_results.cnt}{$_results.cnt}{else}{$_criteria.offset+$_criteria.limit}{/if}
</td>
<td>count: {$searchResults.count}</td>
<td>
go:
{foreach from=$searchResults.pages item=p key=k}
{foreach from=$_results.pagination item=p key=k}
<a href="#" onClick="hpopup('{$UI_HANDLER}?act={$_act_prefix}.setOffset&page={$k}', 'pager')">{$p}</a>
{/foreach}
</td>
<td align="right">
{if $searchResults.next}<a href="#" onClick="hpopup('{$UI_HANDLER}?act={$_act_prefix}.setOffset&page=next', 'pager')">forward</a>{/if}
{if $_results.next}<a href="#" onClick="hpopup('{$UI_HANDLER}?act={$_act_prefix}.setOffset&page=next', 'pager')">forward</a>{/if}
</td>
</tr>
<tr><td colspan="4">

View File

@ -48,6 +48,9 @@
{include file="playlist/simpleManagement.tpl"}
{/if}
{if $showScheduler}
{include file="scheduler/main.tpl"}
{/if}
</div>

View File

@ -6,6 +6,7 @@
<a href="{$UI_BROWSER}?id={$START.fid}&act=PL.simpleManagement">[PL Editor]</a>
<a href="{$UI_BROWSER}?id={$START.id}&act=SEARCH">[Search]</a>
<a href="{$UI_BROWSER}?id={$START.id}&act=BROWSE">[Browse]</a>
<a href="{$UI_BROWSER}?act=SCHEDULER">[Scheduler]</a>
<a href="{$UI_BROWSER}?id={$START.id}&act=subjects">{tra 0='[User/Groups]'}</a>
<!-- <a href="{$UI_BROWSER}?act=MetaDataValues&Main=1">[Metadata]</a> -->
<a href="{$UI_BROWSER}?act=changeStationPrefs">[StationPrefs]</a>

View File

@ -0,0 +1,31 @@
{$SCHEDULER->buildMonth()}
{$SCHEDULER->buildWeek()}
<table border=1>
<tr><th colspan="8">{$SCHEDULER->curr.year}-{$SCHEDULER->curr.month}-{$SCHEDULER->curr.day}</th></tr>
<tr> <td></td>
{foreach from=$SCHEDULER->Week item="_Weekday"}
<td>{$_Weekday.label.short}</td>
{/foreach}
</tr>
{foreach from=$SCHEDULER->Month item="_Day"}
{if $_Day.isFirst}
<tr>
<th><a href="#" onClick="hpopup('{$UI_HANDLER}?act=SCHEDULER.set&week={$_Day.week}')">{$_Day.week}</a></th>
{/if}
<td>
{if $_Day.isEmpty}
&nbsp;
{elseif $_Day.isSelected}
<b>{$_Day.day}</b>
{else}
<a href="#" onClick="hpopup('{$UI_HANDLER}?act=SCHEDULER.set&day={$_Day.day}')">{$_Day.day}</a>
{/if}
</td>
{if $_Day.isLast}
</tr>
{/if}
{/foreach}
</table>

View File

@ -0,0 +1,21 @@
{SEARCH->getResult assign=_results}
{if $_results.cnt > 0}
<table border="0" width="50%">
{foreach from=$_results.items item=i}
<tr style="background-color: {cycle values='#eeeeee, #dadada'}" {assign var="moreContextBefore" value=", 'SP.addItem'"}{include file="sub/contextmenu.tpl"}>
<td align="center">
{if $PLAYLIST.id == $i.id}
<b>{$i.title|truncate:30}</b>
{else}
{$i.title|truncate:30}
{/if}
</td>
<td align="center">{$i.type}</td>
<td><a href="#" onClick="hpopup('{$UI_HANDLER}?act=SCHEDULER.uploadPL&gunid={$i.gunid}')">{$i.gunid}</td>
</tr>
{/foreach}
</table>
{else}
No match found.
{/if}

View File

@ -0,0 +1,14 @@
<div class="standardFrame">
{include file="sub/x.tpl"}
<input type="button" onClick="hpopup('{$UI_HANDLER}?act=SCHEDULER.set&view=day')" value="Day">
<input type="button" onClick="hpopup('{$UI_HANDLER}?act=SCHEDULER.set&view=week')" value="Week">
<input type="button" onClick="hpopup('{$UI_HANDLER}?act=SCHEDULER.set&view=month')" value="Month">
<input type="button" onClick="hpopup('{$UI_HANDLER}?act=SCHEDULER.set&view=input')" value="Input">
{include file="scheduler/calendar.tpl"}
{assign var="view" value=$SCHEDULER->curr.view}
{include file="scheduler/$view.tpl"}
</div>

View File

@ -0,0 +1,30 @@
{$SCHEDULER->buildMonth()}
{$SCHEDULER->buildWeek()}
Month View
<table border=1>
<tr>
{foreach from=$SCHEDULER->Week item="_Weekday"}
<td>{$_Weekday.label.full}</td>
{/foreach}
</tr>
{foreach from=$SCHEDULER->Month item="_Day"}
{if $_Day.isFirst}
<tr>
{/if}
{if $_Day.isEmpty}
<td>&nbsp;</td>
{else}
<td><a href="#" onClick="hpopup('{$UI_HANDLER}?act=SCHEDULER.set&day={$_Day.day}')">{$_Day.day}</td>
{/if}
{if $_Day.isLast}
</tr>
{/if}
{/foreach}
</table>

View File

@ -42,10 +42,10 @@
window.popupwin.focus();
}
function hpopup(url, name) //hidden popup!
function hpopup(url, name) //hidden popup! 'width=1, height=1'
{
popupwin = window.open(url, name, 'width=1, height=1');
window.parent.focus();
popupwin = window.open(url, name);
//window.parent.focus();
}
{/literal}

View File

@ -107,6 +107,7 @@ class uiBase
$this->SEARCH =& new uiSearch($this);
$this->BROWSE =& new uiBrowse($this);
$this->PLAYLIST =& new uiPlaylist($this);
$this->SCHEDULER =& new uiScheduler($this);
}

View File

@ -6,6 +6,7 @@ class uiBrowse
$this->Base =& $uiBase;
$this->col =& $_SESSION[UI_BROWSE_SESSNAME]['col'];
$this->criteria =& $_SESSION[UI_BROWSE_SESSNAME]['criteria'];
$this->results =& $_SESSION[UI_BROWSE_SESSNAME]['results'];
$this->reloadUrl = UI_BROWSER.'?popup[]=_reload_parent&popup[]=_close';
$this->criteria['limit'] ? NULL : $this->criteria['limit'] = 5;
@ -27,6 +28,17 @@ class uiBrowse
}
function getCriteria()
{
return $this->criteria;
}
function getResult()
{
return $this->results;
}
function browseForm($id, $mask2)
{
@ -79,11 +91,12 @@ class uiBrowse
function setValue($formdata)
{
$this->criteria['offset'] = 0;
$which = $formdata['col'];
$next = $which + 1;
$this->col[$which]['form_value'] = $formdata['value'][0];
if ($formdata['value'][0] == '%%all%%') {
$this->col[$next]['criteria'] = NULL;
$this->col[$next]['criteria'] = array('operator' => 'and');
} else {
$this->col[$next]['criteria'] = array(
'operator' => 'and',
@ -105,6 +118,7 @@ class uiBrowse
#echo "\nvalues: "; print_r($this->col[$next]['values']);
$this->clearHierarchy($next);
$this->searchDB();
$this->Base->redirUrl = UI_BROWSER.'?act=BROWSE';
}
@ -131,9 +145,10 @@ class uiBrowse
}
function getResult()
function searchDB()
{
$this->results = NULL;
$this->results = array('page' => $this->criteria['offset']/$this->criteria['limit']);
$this->criteria['conditions'] = array();
for($col=4; $col>=1; $col--) {
if (is_array($this->col[$col]['criteria'])) {
$this->criteria = array_merge ($this->criteria, $this->col[$col]['criteria']);
@ -141,33 +156,36 @@ class uiBrowse
}
}
$results = $this->Base->gb->localSearch($this->criteria, $this->Base->sessid);
#$this->results['count'] = $results['cnt'];
$this->results['cnt'] = $results['cnt'];
foreach ($results['results'] as $rec) {
$this->results['items'][] = $this->Base->_getMetaInfo($this->Base->gb->_idFromGunid($rec));
}
$this->pagination($results);
#print_r($this->criteria);
#print_r($this->results);
return $this->results;
return TRUE;
}
function pagination(&$results)
{
if (sizeof($this->results) == 0) {
if (sizeof($this->results['items']) == 0) {
return FALSE;
}
$this->results['count'] = $results['cnt'];
$this->results['next'] = $results['cnt'] > $this->criteria['offset'] + $this->criteria['limit'] ? TRUE : FALSE;
$this->results['prev'] = $this->criteria['offset'] > 0 ? TRUE : FALSE;
$currp = ($this->criteria['offset']/$this->criteria['limit']) + 1; # current page
$maxp = ceil($results['cnt'] / $this->criteria['limit']); # maximum page
$p = 1;
for ($n = 1; $n <= ceil($results['cnt'] / $this->criteria['limit']); $n = $n+$p) {
$p = bcpow(10, floor($n/10));
$this->results['pages'][$n-1] = $n;
for ($n = 1; $n <= $maxp; $n = $n+$width) {
$width = pow(10, floor(($n)/10));
$this->results['pagination'][$n] = $n;
}
array_pop($this->results['pages']);
$this->results['pages'][ceil($results['cnt'] / $this->criteria['limit'])-1] = '>>';
#array_pop($this->results['pagination']);
$this->results['pagination'][1] = '|<<';
$this->results['pagination'][$maxp] = '>>|';
$this->results['next'] = $results['cnt'] > $this->criteria['offset'] + $this->criteria['limit'] ? TRUE : FALSE;
$this->results['prev'] = $this->criteria['offset'] > 0 ? TRUE : FALSE;
ksort($this->results['pagination']);
}
@ -182,7 +200,7 @@ class uiBrowse
$this->criteria['orderby'] = $by;
$this->setReload();
#$this->searchDB();
$this->searchDB();
}
@ -196,22 +214,24 @@ class uiBrowse
} elseif ($page == 'prev') {
$o -= $l;
} elseif (is_numeric($page)) {
$o = $l * $page;
$o = $l * ($page-1);
}
$this->setReload();
#$this->searchDB();
$this->searchDB();
}
function setLimit($limit)
{
$this->criteria['limit'] = $limit;
$this->setReload();
$this->searchDB();
}
function setFiletype($filetype)
{
$this->criteria['filetype'] = $filetype;
$this->setReload();
$this->searchDB();
}
}
?>

View File

@ -8,9 +8,11 @@ require_once dirname(__FILE__).'/ui_browser.class.php';
require_once dirname(__FILE__).'/ui_scratchpad.class.php';
require_once dirname(__FILE__).'/ui_playlist.class.php'; #
require_once dirname(__FILE__).'/ui_search.class.php';
require_once dirname(__FILE__).'/ui_browse.class.php';
require_once dirname(__FILE__).'/ui_browse.class.php';
require_once dirname(__FILE__).'/../../storageServer/var/GreenBox.php';
require_once dirname(__FILE__).'/formmask/general.inc.php';
require_once dirname(__FILE__).'/ui_calendar.class.php';
require_once dirname(__FILE__).'/ui_scheduler.class.php';
## well known classes ###############################################
require_once dirname(__FILE__).'/Smarty/libs/Smarty.class.php';

View File

@ -0,0 +1,92 @@
<?php
class uiCalendar
{
function uiCalendar()
{
$this->firstDayOfWeek = 1;
}
function buildMonth()
{
if (is_array($this->Month)) return FALSE;
require_once 'Calendar/Calendar.php';
require_once 'Calendar/Month/Weekdays.php';
require_once 'Calendar/Day.php';
$Month = new Calendar_Month_Weekdays($this->curr['year'], $this->curr['month'], $this->firstDayOfWeek);
# mark today #
$sel = new Calendar_Day($this->curr['year'], $this->curr['month'], $this->curr['day']);
$selection = array($sel);
$Month->build($selection);
while ($Day = $Month->fetch()) {
$this->Month[] = array(
'day' => $this->Base->_twoDigits($Day->thisDay()),
'week' => $this->_getWeekNr($Day),
'isEmpty' => $Day->isEmpty(),
'isFirst' => $Day->isFirst(),
'isLast' => $Day->isLast(),
'isSelected' => $Day->isSelected()
);
}
}
function buildWeek()
{
if (is_array($this->Week)) return FALSE;
require_once 'Calendar/Week.php';
$Week = new Calendar_Week ($this->curr['year'], $this->curr['month'], $this->curr['day'], $this->firstDayOfWeek);
$Week->build();
while ($Day = $Week->fetch()) {
$this->Week[] = array(
'day' => $this->Base->_twoDigits($Day->thisDay()),
'label' => $this->_getDayName($Day),
);
}
}
function buildDay()
{
require_once 'Calendar/Day.php';
$Day = new Calendar_Day ($this->curr['year'], $this->curr['month'], $this->curr['day']);
$Day->build();
while ($Hour = $Day->fetch()) {
$this->Day[] = $Hour->thisHour();
}
}
function buildHour()
{
require_once 'Calendar/Hour.php';
$Hour = new Calendar_Hour ($this->curr['year'], $this->curr['month'], $this->curr['day'], $this->curr['hour']);
$Hour->build();
while ($Min = $Hour->fetch()) {
$this->Hour[] = $Min->thisMinute();
}
}
function _getWeekNr(&$date) {
$timestamp = mktime($date->thisHour(), $date->thisMinute(), $date->thisSecond(), $date->thisMonth(), $date->thisDay(), $date->thisYear());
#echo $date->thisHour().$date->thisMinute().$date->thisSecond().$date->thisYear().$date->thisMonth().$date->thisDay().$timestamp."<br>";
return date("W", $timestamp);
}
function _getDayName(&$date) {
$timestamp = mktime($date->thisHour(), $date->thisMinute(), $date->thisSecond(), $date->thisMonth(), $date->thisDay(), $date->thisYear());
#echo $date->thisHour().$date->thisMinute().$date->thisSecond().$date->thisYear().$date->thisMonth().$date->thisDay().$timestamp."<br>";
return array('short' => strftime("%a", $timestamp),
'full' => strftime("%A", $timestamp));
}
}
?>

View File

@ -9,9 +9,11 @@ require_once dirname(__FILE__).'/ui_handler.class.php';
require_once dirname(__FILE__).'/ui_scratchpad.class.php';
require_once dirname(__FILE__).'/ui_playlist.class.php';
require_once dirname(__FILE__).'/ui_search.class.php';
require_once dirname(__FILE__).'/ui_browse.class.php';
require_once dirname(__FILE__).'/ui_browse.class.php';
require_once dirname(__FILE__).'/../../storageServer/var/GreenBox.php';
require_once dirname(__FILE__).'/formmask/general.inc.php';
require_once dirname(__FILE__).'/ui_calendar.class.php';
require_once dirname(__FILE__).'/ui_scheduler.class.php';
## well known classes ###############################################
require_once 'DB.php';

View File

@ -0,0 +1,44 @@
<?php
class uiScheduler extends uiCalendar
{
function uiScheduler(&$uiBase)
{
$this->curr =& $_SESSION[UI_CALENDAR_SESSNAME]['current'];
if (!is_array($this->curr)) {
$this->curr['view'] = 'month';
$this->curr['year'] = date("Y");
$this->curr['month'] = date("m");
$this->curr['day'] = date('d');
}
$this->Base =& $uiBase;
$this->reloadUrl = UI_BROWSER.'?popup[]=_reload_parent&popup[]=_close';
$this->uiCalendar();
}
function setReload()
{
$this->Base->redirUrl = $this->reloadUrl;
}
function set($arr)
{
extract($arr);
if ($view) $this->curr['view'] = $view;
if ($day) $this->curr['day'] = $day;
}
function uploadPL($gunid)
{
require_once dirname(__FILE__).'ui_xmlrpcwrapper.class.php';
}
}
?>

View File

@ -20,6 +20,13 @@ class uiSearch
return $this->results;
}
function getCriteria()
{
return $this->criteria;
}
function searchForm($id, &$mask2)
{
include dirname(__FILE__).'/formmask/metadata.inc.php';
@ -91,12 +98,14 @@ class uiSearch
function searchDB()
{
$this->results = NULL;
$this->results = array('page' => $this->criteria['offset']/$this->criteria['limit']);
$results = $this->Base->gb->localSearch($this->criteria, $this->Base->sessid);
foreach ($results['results'] as $rec) {
$this->results['items'][] = $this->Base->_getMetaInfo($this->Base->gb->_idFromGunid($rec));
}
#print_r($this->criteria); print_r($this->results);
$this->results['cnt'] = $results['cnt'];
#print_r($this->criteria);
#print_r($this->results);
$this->pagination($results);
}
@ -106,18 +115,28 @@ class uiSearch
if (sizeof($this->results) == 0) {
return FALSE;
}
$this->results['count'] = $results['cnt'];
$this->results['next'] = $results['cnt'] > $this->criteria['offset'] + $this->criteria['limit'] ? TRUE : FALSE;
$this->results['prev'] = $this->criteria['offset'] > 0 ? TRUE : FALSE;
$p = 1;
for ($n = 1; $n <= ceil($results['cnt'] / $this->criteria['limit']); $n = $n+$p) {
$p = bcpow(10, floor($n/10));
$this->results['pages'][$n-1] = $n;
$pot = 0; # potence
$lpr = 10; # links pro range
$width = 1; # width bettween pages
$currp = ($this->criteria['offset']/$this->criteria['limit']) +1 ; # current page
$maxp = ceil($results['cnt']/$this->criteria['limit']); # maximum page
for ($n = 1; $n <= $maxp; $n = $n+$width) {
if ($n<$currp)
$width = pow($lpr, floor(log10(abs($n-$currp))));
else
$width = pow($lpr, floor(log10(abs($n-$currp)+1)));
$this->results['pagination'][$n] = $n;
}
array_pop($this->results['pages']);
$this->results['pages'][ceil($results['cnt'] / $this->criteria['limit'])-1] = '>>';
#array_pop($this->results['pagination']);
$this->results['pagination'][$maxp] = '>>|';
$this->results['pagination'][1] = '|<<';
$this->results['next'] = $results['cnt'] > $this->criteria['offset'] + $this->criteria['limit'] ? TRUE : FALSE;
$this->results['prev'] = $this->criteria['offset'] > 0 ? TRUE : FALSE;
ksort($this->results['pagination']);
}
@ -154,7 +173,7 @@ class uiSearch
} elseif ($page == 'prev') {
$o -= $l;
} elseif (is_numeric($page)) {
$o = $l * $page;
$o = $l * ($page-1);
}
$this->setReload();
$this->searchDB();

View File

@ -0,0 +1,489 @@
<?php
/*------------------------------------------------------------------------------
Copyright (c) 2004 Media Development Loan Fund
This file is part of the LiveSupport project.
http://livesupport.campware.org/
To report bugs, send an e-mail to bugs@campware.org
LiveSupport is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
LiveSupport 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with LiveSupport; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: sebastian $
Version : $Revision: 1.1 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/htmlUI/var/Attic/ui_xmlrpcwrapper.class.php,v $
------------------------------------------------------------------------------*/
/* ================================================================= includes */
require_once dirname(__FILE__).'DB.php';
include_once dirname(__FILE__)."../xmlrpc/XML/RPC.php";
include_once dirname(__FILE__)."../conf.php";
/* ================================================== method definition array */
/**
* Array with methods description
*
* Each element has method name as key and contains four subfields:
* <ul>
* <li>m</li> full method name (include optional prefix)
* <li>p</li> array of input parameter names
* <li>r</li> array of result element names (not used there at present)
* <li>e</li> array of error codes/messages (not used there at present)
* </ul>
*/
$mdefs = array(
"AddAudioClipToPlaylistMethod" => array(
'm'=>'AddAudioClipToPlaylistMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/, 'audioClipId'/*string*/, 'relativeOffset'/*int*/),
'r'=>array('playlistElementId'/*string*/),
'e'=>array(
'301'=>'invalid argument format',
'302'=>'missing playlist ID argument',
'303'=>'missing audio clip ID argument',
'304'=>'missing relative offset argument',
'305'=>'playlist not found',
'306'=>'playlist has not been opened for editing',
'307'=>'audio clip does not exist',
'308'=>'two audio clips at the same relative offset',
'320'=>'missing session ID argument',
)
),
"CreatePlaylistMethod" => array(
'm'=>'CreatePlaylistMethod',
'p'=>array('sessionId'/*string*/),
'r'=>array('playlist'/*string*/),
'e'=>array(
'201'=>'invalid argument format',
'202'=>'could not create playlist',
'220'=>'missing session ID argument',
)
),
"DeletePlaylistMethod" => array(
'm'=>'DeletePlaylistMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/),
'r'=>array(),
'e'=>array(
'901'=>'invalid argument format',
'902'=>'missing playlist ID argument',
'903'=>'playlist not found',
'904'=>'playlist is locked',
'905'=>'playlist could not be deleted',
'920'=>'missing session ID argument',
)
),
"DisplayAudioClipMethod" => array(
'm'=>'DisplayAudioClipMethod',
'p'=>array('sessionId'/*string*/, 'audioClipId'/*string*/),
'r'=>array('audioClip'/*string*/),
'e'=>array(
'601'=>'invalid argument format',
'602'=>'argument is not an audio clip ID',
'603'=>'audio clip not found',
'620'=>'missing session ID argument',
)
),
"DisplayAudioClipsMethod" => array(
'm'=>'DisplayAudioClipsMethod',
'p'=>array('sessionId'/*string*/),
'r'=>array(array('audioClip'/*string*/)),
'e'=>array(
'1801'=>'invalid argument format',
'1802'=>'XML-RPC error',
'1820'=>'missing session ID argument',
)
),
"DisplayPlaylistMethod" => array(
'm'=>'DisplayPlaylistMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/),
'r'=>array('playlist'/*string*/),
'e'=>array(
'1001'=>'invalid argument format',
'1002'=>'argument is not a playlist ID',
'1003'=>'playlist not found',
'1020'=>'missing session ID argument',
)
),
"DisplayPlaylistsMethod" => array(
'm'=>'DisplayPlaylistsMethod',
'p'=>array('sessionId'/*string*/),
'r'=>array(array('playlist'/*string*/)),
'e'=>array(
'1701'=>'invalid argument format',
'1702'=>'XML-RPC error',
'1720'=>'missing session ID argument',
)
),
"DisplayScheduleMethod" => array(
'm'=>'DisplayScheduleMethod',
'p'=>array('sessionId'/*string*/, 'from'/*datetime*/, 'to'/*datetime*/),
'r'=>array(array('id'/*int*/, 'playlistId'/*string*/, 'start'/*datetime*/, 'end'/*datetime*/)),
'e'=>array(
'1101'=>'invalid argument format',
'1102'=>"missing or invalid 'from' argument",
'1103'=>"missing or invalid 'to' argument",
'1120'=>'missing session ID argument',
)
),
"GeneratePlayReportMethod" => array(
'm'=>'GeneratePlayReportMethod',
'p'=>array('sessionId'/*string*/, 'from'/*datetime*/, 'to'/*datetime*/),
'r'=>array(array('audioClipId'/*string*/, 'timestamp'/*datetime*/)),
'e'=>array(
'1501'=>'invalid argument format',
'1502'=>"missing or invalid 'from' argument",
'1503'=>"missing or invalid 'to' argument",
'1520'=>'missing session ID argument',
)
),
"GetSchedulerTimeMethod" => array(
'm'=>'GetSchedulerTimeMethod',
'p'=>array(),
'r'=>array('schedulerTime'/*datetime*/),
'e'=>array(
)
),
"GetVersionMethod" => array(
'm'=>'GetVersionMethod',
'p'=>array(),
'r'=>array('version'/*string*/),
'e'=>array()
),
"LoginMethod" => array(
'm'=>'LoginMethod',
'p'=>array('login'/*string*/, 'password'/*string*/),
'r'=>array('sessionId'/*string*/),
'e'=>array(
'2001'=>'invalid argument format',
'2002'=>'missing login argument',
'2003'=>'missing password argument',
'2004'=>'the authentication server reported an error',
)
),
"LogoutMethod" => array(
'm'=>'LogoutMethod',
'p'=>array('sessionId'/*string*/),
'r'=>array(),
'e'=>array(
'2101'=>'invalid argument format',
'2120'=>'missing session ID argument',
'2104'=>'the authentication server reported an error',
)
),
"OpenPlaylistForEditingMethod" => array(
'm'=>'OpenPlaylistForEditingMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/),
'r'=>array('playlist'/*string*/),
'e'=>array(
'101'=>'invalid argument format',
'102'=>'argument is not a playlist ID',
'104'=>'could not open playlist for editing',
'120'=>'missing session ID argument',
)
),
"RemoveAudioClipFromPlaylistMethod" => array(
'm'=>'RemoveAudioClipFromPlaylistMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/, 'playlistElementId'/*string*/),
'r'=>array(),
'e'=>array(
'401'=>'invalid argument format',
'402'=>'missing playlist ID argument',
'403'=>'missing relative offset argument',
'404'=>'playlist does not exist',
'405'=>'playlist has not been opened for editing',
'406'=>'no audio clip at the specified relative offset',
'420'=>'missing session ID argument',
)
),
"RemoveFromScheduleMethod" => array(
'm'=>'RemoveFromScheduleMethod',
'p'=>array('sessionId'/*string*/, 'scheduleEntryId'/*string*/),
'r'=>array(),
'e'=>array(
'1201'=>'invalid argument format',
'1202'=>'missing schedule entry ID argument',
'1203'=>'schedule entry not found',
'1220'=>'missing session ID argument',
)
),
"RescheduleMethod" => array(
'm'=>'RescheduleMethod',
'p'=>array('sessionId'/*string*/, 'scheduleEntryId'/*string*/, 'playtime'/*datetime*/),
'r'=>array(),
'e'=>array(
'1301'=>'invalid argument format',
'1302'=>'missing schedule entry ID argument',
'1303'=>'missing playtime argument',
'1304'=>'schedule entry not found',
'1305'=>'could not reschedule entry',
'1320'=>'missing session ID argument',
)
),
"ResetStorageMethod" => array(
'm'=>'ResetStorageMethod',
'p'=>array(),
'r'=>array(),
'e'=>array('3001'=>'storage client reported an error'),
),
"RevertEditedPlaylistMethod" => array(
'm'=>'RevertEditedPlaylistMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/),
'r'=>array(),
'e'=>array(
'801'=>'invalid argument format',
'802'=>'argument is not a playlist ID',
'803'=>'playlist not found',
'804'=>'could not revert playlist',
'820'=>'missing session ID argument',
)
),
"SavePlaylistMethod" => array(
'm'=>'SavePlaylistMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/),
'r'=>array(),
'e'=>array(
'701'=>'invalid argument format',
'702'=>'argument is not a playlist ID',
'703'=>'playlist not found',
'705'=>'could not save playlist',
'720'=>'missing session ID argument',
)
),
"UpdateFadeInFadeOutMethod" => array(
'm'=>'UpdateFadeInFadeOutMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/, 'playlistElementId'/*string*/, 'fadeIn'/*int*/, 'fadeOut'/*int*/),
'r'=>array(),
'e'=>array(
'1601'=>'invalid argument format',
'1602'=>'missing playlist ID argument',
'1603'=>'missing playlist element ID argument',
'1604'=>'missing fade in argument',
'1605'=>'missing fade out argument',
'1606'=>'playlist does not exist',
'1607'=>'playlist has not been opened for editing',
'1608'=>'error executing setFadeInfo() method',
'1620'=>'missing session ID argument',
)
),
"UploadPlaylistMethod" => array(
'm'=>'UploadPlaylistMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/, 'playtime'/*datetime*/),
'r'=>array('scheduleEntryId'/*string*/),
'e'=>array(
'1401'=>'invalid argument format',
'1402'=>'missing playlist ID argument',
'1403'=>'missing playtime argument',
'1404'=>'playlist not found',
'1405'=>'timeframe not available',
'1406'=>'could not schedule playlist',
'1420'=>'missing session ID argument',
)
),
"ValidatePlaylistMethod" => array(
'm'=>'ValidatePlaylistMethod',
'p'=>array('sessionId'/*string*/, 'playlistId'/*string*/),
'r'=>array('valid'/*bool*/),
'e'=>array(
'501'=>'invalid argument format',
'502'=>'missing playlist ID argument',
'503'=>'playlist does not exist',
'504'=>'playlist has not been opened for editing',
'520'=>'missing session ID argument',
)
),
"LoginGB" => array(
'm'=>'locstor.login',
'p'=>array('login'/*string*/, 'pass'/*string*/),
'r'=>array('sessid'/*string*/),
'e'=>array(
'2001'=>'invalid argument format',
'2002'=>'missing login argument',
'2003'=>'missing password argument',
'2004'=>'the authentication server reported an error',
)
),
"LogoutGB" => array(
'm'=>'locstor.logout',
'p'=>array('sessid'/*string*/),
'r'=>array('status'/*boolean*/),
'e'=>array(
'2001'=>'invalid argument format',
'2002'=>'missing login argument',
'2003'=>'missing password argument',
'2004'=>'the authentication server reported an error',
)
),
);
/* ======================================================== class definitions */
class SchedulerPhpClient{
/**
* Databases object reference
*/
var $dbc = NULL;
/**
* Array with methods description
*/
var $mdefs = array();
/**
* Confiduration array from ../conf.php
*/
var $config = array();
/**
* XMLRPC client object reference
*/
var $client = NULL;
/**
* Verbosity flag
*/
var $verbose = FALSE;
/**
* XMLRPC debug flag
*/
var $debug = 0;
/**
* Constructor - pelase DON'T CALL IT, use factory method instead
*
* @param dbc object, database object reference
* @param mdefs array, hash array with methods description
* @param config array, hash array with configuration
* @param debug int, XMLRPC debug flag
* @param verbose boolean, verbosity flag
* @return this
*/
function SchedulerPhpClient(
&$dbc, $mdefs, $config, $debug=0, $verbose=FALSE)
{
$this->dbc = $dbc;
$this->mdefs = $mdefs;
$this->config = $config;
$this->debug = $debug;
$this->verbose = $verbose;
$confPrefix = "scheduler";
// $confPrefix = "storage";
$serverPath =
"http://{$config["{$confPrefix}UrlHost"]}:{$config["{$confPrefix}UrlPort"]}".
"{$config["{$confPrefix}UrlPath"]}/{$config["{$confPrefix}XMLRPC"]}";
#$serverPath = "http://localhost:80/livesupportStorageServerCVS/xmlrpc/xrLocStor.php";
if($this->verbose) echo "serverPath: $serverPath\n";
$url = parse_url($serverPath);
$this->client = new XML_RPC_Client($url['path'], $url['host']);
}
/**
* Factory, create object instance
*
* In fact it doesn't create instance of SchedulerPhpClient, but
* dynamically extend this class with set of methods based on $mdefs array
* (using eval function) and instantiate resulting class
* SchedulerPhpClientCore instead.
* Each new method in this subclass accepts parameters according to $mdefs
* array, call wrapper callMethod(methodname, parameters) and return its
* result.
*
* @param dbc object, database object reference
* @param mdefs array, hash array with methods description
* @param config array, hash array with configuration
* @param debug int, XMLRPC debug flag
* @param verbose boolean, verbosity flag
* @return object, created object instance
*/
function &factory(&$dbc, $mdefs, $config, $debug=0, $verbose=FALSE){
$f = '';
foreach($mdefs as $fn=>$farr){
$f .=
' function '.$fn.'(){'."\n".
' $pars = func_get_args();'."\n".
' $r = $this->callMethod("'.$fn.'", $pars);'."\n".
' return $r;'."\n".
' }'."\n";
}
$e =
"class SchedulerPhpClientCore extends SchedulerPhpClient{\n".
"$f\n".
"}\n";
# echo $e;
if(FALSE === eval($e)) return $dbc->raiseError("Eval failed");
$spc =& new SchedulerPhpClientCore(
$dbc, $mdefs, $config, $debug, $verbose);
return $spc;
}
/**
* XMLRPC methods wrapper
* Encode XMLRPC request message, send it, receive and decode response.
*
* @param method string, method name
* @param gettedPars array, returned by func_get_args() in called method
* @return array, PHP hash with response
*/
function callMethod($method, $gettedPars)
{
$parr = array();
foreach($this->mdefs[$method]['p'] as $i=>$p){
$parr[$p] = $gettedPars[$i];
}
$fullmethod = $this->mdefs[$method]['m'];
$msg = new XML_RPC_Message($fullmethod, array(XML_RPC_encode($parr)));
if($this->verbose){
echo "parr:\n";
var_dump($parr);
echo "message:\n";
echo $msg->serialize()."\n";
}
$this->client->setDebug($this->debug);
$res = $this->client->send($msg);
if($res->faultCode() > 0) {
return $this->dbc->raiseError(
"SchedulerPhpClient::$method:".$res->faultString()." ".
$res->faultCode()."\n", $res->faultCode()
);
}
if($verbose){
echo "result:\n";
echo $res->serialize();
}
$resp = XML_RPC_decode($res->value());
return $resp;
}
}
/* ======================================================== class definitions */
/**
* Example of use:
*
*/
/*
// db object handling:
$dbc = DB::connect($config['dsn'], TRUE);
$dbc->setFetchMode(DB_FETCHMODE_ASSOC);
$dbc->setErrorHandling(PEAR_ERROR_RETURN);
// scheduler client instantiation:
$spc =& SchedulerPhpClient::factory($dbc, $mdefs, $config);
// call of chosen function by name according to key values in $mdefs array:
// (for testing on storageServer XMLRPC I've changes confPrefix in
// SchedulerPhpClient constructor from 'scheduler' to 'storage' value)
$r = $spc->LoginGB('root', 'q'); var_dump($r);
#$r = $spc->LogoutGB(''); var_dump($r);
*/
?>