Commit bf29e627 authored by Frank Bergmann's avatar Frank Bergmann

- OpenACS 5.9

parent 5a085810
<!-- Form elements -->
<multiple name=elements>
<if @elements.section@ not nil>
<fieldset>
<legend>@elements.section@</legend>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><div><formwidget id="@elements.id@"></div></noparse>
</if>
<else>
<br>
<if @elements.widget@ eq "submit">
<span class="form-element">
<group column="widget">
<noparse><formwidget id="@elements.id@"></noparse>
</group>
<br>
<br>
</span>
</if>
<else>
<if @elements.label@ not nil>
<noparse>
<if \@formerror.@elements.id@\@ not nil>
<span class="form-label-error">
</if>
<else>
<span class="form-label">
</else>
</noparse>
<label for="@elements.id@">
@elements.label;noquote@
</label>
<if @form_properties.show_required_p@ true>
<if @elements.optional@ nil and @elements.mode@ ne "display" and @elements.widget@ ne "inform" and @elements.widget@ ne "select"><span class="form-required-mark">*</span></if>
</if>
</span>
</if>
<else>
<span class="form-label">
&nbsp;
</span>
</else>
<noparse>
<if \@formerror.@elements.id@\@ not nil>
<span class="form-widget-error">
</if>
<else>
<span class="form-widget">
</else>
</noparse>
<if @elements.widget@ in radio checkbox>
<noparse>
<formgroup id="@elements.id@">
\@formgroup.widget;noquote@
<label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">
\@formgroup.label;noquote@
</label>
</formgroup>
</noparse>
</if>
<else>
<noparse>
<formwidget id="@elements.id@">
</noparse>
</else>
<noparse>
<formerror id="@elements.id@">
<br>
\@formerror.@elements.id@;noquote\@
</formerror>
</noparse>
<if @elements.help_text@ not nil>
<p class="form-help-text">
<noparse>
<formhelp id="@elements.id@">
</noparse>
</p>
</if>
</span>
</else>
</else>
</group>
<if @elements.section@ not nil>
</fieldset>
</if>
</multiple>
<!-- Dark blue frame -->
<table bgcolor="#6699CC" cellspacing="0" cellpadding="4" border="0">
<tr><td>
<!-- Light blue pad -->
<table bgcolor="#99CCFF" cellspacing="0" cellpadding="6" border="0" width="100%">
<tr><td>
<!-- Form elements -->
<table bgcolor="#99CCFF" cellspacing="0" cellpadding="2" border="0" width="100%">
<multiple name=elements>
<if @elements.section@ not nil>
<tr><td colspan="2" bgcolor="#eeeeee"><b>@elements.section@</b></td></tr>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><formwidget id=@elements.id@></noparse>
</if>
<else>
<if @elements.widget@ eq "submit">
<tr>
<td align="left" colspan="2">
<group column="widget">
<noparse><formwidget id="@elements.id@"></noparse>
</group>
</td>
</tr>
</if>
<else>
<tr>
<if @elements.label@ not nil>
<td><b>@elements.label;noquote@</b>&nbsp;&nbsp;
<if @elements.help_text@ not nil>
<br>&nbsp;&nbsp;
<font size=-1><noparse><formhelp id=@elements.id@></noparse></font><br>
</if>
</td>
</if>
<if @elements.widget@ eq radio or @elements.widget@ eq checkbox>
<if @elements.label@ nil><td colspan="2">></if>
<else><td></else>
<noparse>
<table cellpadding="4" cellspacing="0" border="0">
<formgroup id=@elements.id@>
<tr>
<td>\@formgroup.widget;noquote@</td>
<td>
<label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">\@formgroup.label@</label>
</td>
</tr>
</formgroup>
</table>
<formerror id=@elements.id@><br>
<font color="red"><b>\@formerror.@elements.id@;noquote\@</b></font>
</formerror>
</noparse>
</td>
</if>
<else>
<if @elements.widget@ eq inform>
<td bgcolor="#EEEEEE">
<noparse><formwidget id=@elements.id@></noparse>
</td>
</if>
<else>
<if @elements.label@ nil><td nowrap colspan="2"></if>
<else><td nowrap></else>
<noparse><formwidget id=@elements.id@>
<formerror id=@elements.id@><br><font
color="red"><b>\@formerror.@elements.id@;noquote\@<b></font>
</formerror></noparse>
</td>
</else>
</else>
</tr>
</else>
</else>
</group>
</multiple>
</table>
</td></tr>
<!-- End of light blue pad -->
</table>
<!-- Dark blue frame -->
</td></tr>
</table>
<table bgcolor="#CACACA" width="70%" border="0" cellspacing="0" cellpadding="0">
<tr width="100%">
<td width="100%">
<table width="100%" border="0" cellspacing="1" cellpadding="1" bgcolor="#000000">
<multiple name=elements>
<if @elements.section@ not nil>
<tr bgcolor="#5F6090">
<td colspan="3" align="center" class="textstyle1">
<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFCC">
<b>@elements.section@</font></b>
</font>
</td>
</tr>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><formwidget id=@elements.id@></noparse>
</if>
<else>
<if @elements.widget@ eq "submit">
<tr bgcolor="#5F6090">
<td align="center" colspan="3">
<group column="widget">
<noparse><formwidget id=@elements.id@></noparse>
</group>
</td>
</tr>
</if>
<else>
<tr bgcolor="#5F6090">
<if @elements.label@ not nil>
<td width="40%" align="right" valign="middle" class="textstyle1">
@elements.label;noquote@
<if @elements.help_text@ not nil>
<br>&nbsp;&nbsp;
<span style="font-size: 90%"><noparse><formhelp id=@elements.id@></noparse></span><br>
</if>
</td>
</if>
<if @elements.widget@ eq radio or @elements.widget@ eq checkbox>
<if @elements.label@ nil><td colspan="3" align="center" class="textstyle1"></if>
<else>
<td width="2%" align="center" valign="middle" class="textstyle1">: </td>
<td width="40%" align="left" valign="middle" class="textstyle1">
</else>
<noparse>
<table cellpadding="4" cellspacing="0" border="0">
<formgroup id=@elements.id@>
<tr bgcolor="#5F6090">
<td>\@formgroup.widget@</td>
<td class="textstyls1"><label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">\@formgroup.label@</label></td>
</tr>
</formgroup>
</table>
<formerror id=@elements.id@><br>
<span style="color: Red; font-weight: bold">\@formerror.@elements.id@;noquote\@</span>
</formerror>
</noparse>
</td>
</if>
<else>
<if @elements.widget@ eq inform>
<if @elements.label@ nil>
<td colspan="3" align="center" class="textstyle1">
</if>
<else>
<td width="2%" align="center" valign="middle" class="textstyle1">: </td>
<td width="40%" class="textstyle1" align="center">
</else>
<font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#FFFFCC">
<b><noparse><formwidget id=@elements.id@></noparse><b>
</font>
</td>
</if>
<else>
<if @elements.label@ nil><td nowrap="nowrap" colspan="3" align="center" class="textstyle1"></if>
<else>
<td width="2%" align="center" valign="middle" class="textstyle1">: </td>
<td bgcolor="#5F6090" width="40%" class="textstyle1" nowrap="nowrap">
</else>
<noparse><formwidget id=@elements.id@>
<formerror id=@elements.id@><br>
<span style="font-weight: bold; color: red">\@formerror.@elements.id@;noquote\@</span>
</formerror>
</noparse>
</td>
</else>
</else>
</tr>
</else>
</else>
</group>
</multiple>
</table>
</td>
</tr>
</table>
<ul>
<multiple name="elements">
<if @elements.section@ not nil>
<li><a href="#@elements.section@">@elements.section@</a></li>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><formwidget id=@elements.id@></noparse>
</if>
</group>
</multiple>
</ul>
<table cellpacing="2" cellpadding="2" border="0">
<multiple name="elements">
<if @elements.section@ not nil>
<tr>
<td colspan="2">
<a name="@elements.section@"><b>@elements.section@</b></a>
<hr>
</td>
</tr>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
</if>
<else>
<if @elements.widget@ eq "submit">
<tr>
<td colspan="2">
<group column="widget">
<noparse><formwidget id=@elements.id@></noparse>
</group>
</td>
</tr>
</if>
<else>
<tr>
<td width="40%">
<if @elements.help_text@ not nil>
<span class="form-configuration-help-text">@elements.help_text@</span>
</if>
</td>
<td width="60%">
<if @elements.label@ not nil>
<span class="form-configuration-label">@elements.label;noquote@:</span>
<br>
</if>
<if @form_properties.show_required_p@ true>
<if @elements.optional@ nil and @elements.mode@ ne "display" and @elements.widget@ ne "inform" and @elements.widget@ ne "select"><font color="red">*</font></if>
</if>
<if @elements.widget@ eq radio or @elements.widget@ eq checkbox>
<noparse>
<table cellpadding="4" cellspacing="0" border="0">
<formgroup id="@elements.id@">
<tr>
<td>\@formgroup.widget@</td>
<td>
<font face="tahoma,verdana,arial,helvetica,sans-serif" size="-1">
<label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">
\@formgroup.label@
</label>
</font>
</td>
</tr>
</formgroup>
</table>
</noparse>
</if>
<else>
<noparse>
<formwidget id="@elements.id@">
</noparse>
</else>
<noparse>
<formerror id="@elements.id@">
<br>
\@formerror.@elements.id@\@
</formerror>
</noparse>
</td>
</tr>
</else>
<tr>
<td colspan="2">
<hr>
</td>
</tr>
</else>
</group>
</multiple>
</table>
<form action="@__return_url__@" method="post">
<multiple name="__form_contents__">
<input type="hidden" name="@__form_contents__.__key__@" value="@__form_contents__.__value__@">
</multiple>
<input type="button" value="#acs-kernel.common_Edit#" onclick="javascript:history.back()" onkeypress="javascript:acs_KeypressGoto(document.referrer,event);">
<input type="submit" value="#acs-subsite.Confirm#">
</form>
ad_page_contract {
} -properties {
__form_contents__:multirow
}
set __return_url__ [ad_conn url]
# The basic idea here is to build a multirow holding the form contents, which then get
# passed back to the form handler transparently as a submission, as though the confirm
# step never happened.
# There's one exception - we set the special form element "__confirmed_p" true. This
# informs ad_form that the user has indeed confirmed the submission.
multirow create __form_contents__ __key__ __value__
if { [set __form__ [ns_getform]] ne "" } {
set __form_size__ [ns_set size $__form__]
set __form_counter__ 0
while { $__form_counter__ < $__form_size__ } {
if { [ns_set key $__form__ $__form_counter__] eq "__confirmed_p" } {
multirow append __form_contents__ __confirmed_p 1
} else {
set __key__ [ns_set key $__form__ $__form_counter__]
set __values__ [ns_querygetall $__key__]
foreach __value__ $__values__ {
multirow append __form_contents__ $__key__ $__value__
}
}
incr __form_counter__
}
}
# Local variables:
# mode: tcl
# tcl-indent-level: 4
# indent-tabs-mode: nil
# End:
<table bgcolor="#6699CC" cellspacing="0" cellpadding="4" border="0" width="95%">
<tr bgcolor="#FFFFFF">
<td align="left"><b>@form_properties.title@</b></td>
<td align="right">&nbsp;</td>
</tr>
<if @elements:rowcount@ le 0>
<tr><td colspan="2"><i>No items</i></td></tr>
</if>
<else>
<tr>
<td colspan="2">
<table bgcolor="#99CCFF" cellspacing="0" cellpadding="2" border="0" width="100%">
<tr bgcolor="#99CCFF">
<% set list_tag $form_properties(headers) %>
<list name="list_tag">
<th align="left">@list_tag:item@</th>
</list>
</tr>
<grid name=elements cols="@form_properties.cols@" orientation=horizontal>
<if @elements.rownum@ le @elements:rowcount@>
<if @elements.col@ eq 1>
<if @elements.row@ odd><tr bgcolor="#ffffff"></if>
<else><tr bgcolor="#dddddd"></else>
</if>
<if @elements.widget@ not in "hidden" "submit">
<td nowrap>
<if @elements.widget@ eq radio or @elements.widget@ eq checkbox>
<table cellpadding="4" cellspacing="0" border="0">
<tr>
<noparse>
<formgroup id="@elements.id@">
<td>\@formgroup.widget;noquote\@</td><td><label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option\@">\@formgroup.label\@</label></td>
</formgroup>
</noparse>
</tr>
</table>
<noparse><formerror id="@elements.id@"><br><font color="red"><b>\@formerror.@elements.id@\@<b></font></formerror></noparse>
</if>
<else>
<if @elements.widget@ eq inform>
<noparse><formwidget id="@elements.id@"></noparse>
</if>
<else>
<noparse>
<formwidget id="@elements.id@">
<formerror id="@elements.id@"><br><font color="red"><b>
\@formerror.@elements.id@\@<b></font></formerror>
</noparse>
</else>
</else>
</td>
</if>
</if>
<else>
</else>
<if @elements.col@ eq @form_properties.cols@>
</tr>
</if>
</grid>
</table>
<multiple name=elements>
<if @elements.widget@ eq "submit">
<tr bgcolor="#FFFFFF">
<td align="right" colspan="2"><input type="submit" name="@elements.id@" value="@elements.label@"></td>
</tr>
</if>
</multiple>
</else>
</td></tr>
</table>
<multiple name=elements>
<if @elements.widget@ eq "hidden">
<noparse><formwidget id="@elements.id@"></noparse>
</if>
</multiple>
<!-- Form elements -->
<multiple name=elements>
<if @elements.section@ not nil>
<span class="form-section">@elements.section@</span>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><div><formwidget id=@elements.id@></div></noparse>
</if>
<else>
<if @elements.widget@ eq "submit">
<span class="form-element">
<group column="widget">
<noparse><formwidget id="@elements.id@"></noparse>
</group>
</span>
</if>
<else>
<if @elements.label@ not nil>
<noparse>
<if \@formerror.@elements.id@\@ not nil>
<span class="form-label-error">
</if>
<else>
<span class="form-label">
</else>
</noparse>
@elements.label;noquote@
<if @form_properties.show_required_p@ true>
<if @elements.optional@ nil and @elements.mode@ ne "display" and @elements.widget@ ne "inform" and @elements.widget@ ne "select"><span class="form-required-mark">*</span></if>
</if>
</span>
</if>
<else>
<span class="form-label">
&nbsp;
</span>
</else>
<noparse>
<if \@formerror.@elements.id@\@ not nil>
<span class="form-widget-error">
</if>
<else>
<span class="form-widget">
</else>
</noparse>
<if @elements.widget@ in radio checkbox>
<noparse>
<formgroup id="@elements.id@">
\@formgroup.widget;noquote@
<font face="tahoma,verdana,arial,helvetica,sans-serif">
<label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">
\@formgroup.label@
</label>
</font>
</tr>
</formgroup>
</noparse>
</if>
<else>
<font face="tahoma,verdana,arial,helvetica,sans-serif">
<noparse>
<formwidget id="@elements.id@">
</noparse>
</font>
</else>
<noparse>
<formerror id="@elements.id@">
<br>
<font face="tahoma,verdana,arial,helvetica,sans-serif" color="red">
<b>\@formerror.@elements.id@;noquote\@<b>
</font>
</formerror>
</noparse>
<if @elements.help_text@ not nil>
<p style="margin-top: 4px; margin-bottom: 2px;">
<font face="tahoma,verdana,arial,helvetica,sans-serif">
<noparse>
<i><formhelp id="@elements.id@"></i>
</noparse>
</font>
</p>
</if>
</else>
</else>
</group>
</multiple>
<table bgcolor="#FFFFFF" cellspacing="0" cellpadding="6" border="0">
<tr><td>
<!-- Form elements -->
<table bgcolor="#FFFFFF" cellspacing="0" cellpadding="2" border="0" width="100%">
<multiple name=elements>
<if @elements.section@ not nil>
<tr><td colspan="2"><span style="font-weight: bold">@elements.section@</span></td></tr>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><formwidget id=@elements.id@></noparse>
</if>
<else>
<if @elements.widget@ eq "submit">
<tr><td align="center" colspan="2">
<group column="widget">
<noparse><formwidget id=@elements.id@></noparse>
</group>
</td></tr>
</if>
<else>
<tr>
<if @elements.label@ not nil>
<td><span style="font-weight: bold">@elements.label;noquote@</span>&nbsp;&nbsp;
<if @elements.help_text@ not nil>
<br>&nbsp;&nbsp;
<span style="font-size: 90%"><noparse><formhelp id=@elements.id@></noparse></span><br>
</if>
</td>
</if>
<if @elements.widget@ eq radio or @elements.widget@ eq checkbox>
<if @elements.label@ nil><td colspan="2"></if>
<else><td></else>
<noparse>
<table cellpadding="4" cellspacing="0" border="0">
<formgroup id=@elements.id@>
<tr><td>\@formgroup.widget;noquote@</td>
<td><label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">\@formgroup.label;noquote@</label></td></tr>
</formgroup>
</table>
<formerror id=@elements.id@><br>
<span style="color: Red; font-weight: bold">\@formerror.@elements.id@;noquote\@</span>
</formerror>
</noparse>
</td>
</if>
<else>
<if @elements.widget@ eq inform>
<if @elements.label@ nil><td colspan="2"></if>
<else><td></else>
<noparse><formwidget id=@elements.id@></noparse>
</td>
</if>
<else>
<if @elements.label@ nil><td nowrap="nowrap" colspan="2"></if>
<else><td nowrap="nowrap"></else>
<noparse><formwidget id=@elements.id@>
<formerror id=@elements.id@><br>
<span style="font-weight: bold; color: red">\@formerror.@elements.id@;noquote\@</span>
</formerror></noparse>
</td>
</else>
</else>
</tr>
</else>
</else>
</group>
</multiple>
</table>
</td></tr>
</table>
<!-- Dark blue frame -->
<table bgcolor="#FFFFFF" cellspacing="0" cellpadding="4" border="0">
<tr><td>
<!-- Light blue pad -->
<table bgcolor="#FFFFFF" cellspacing="0" cellpadding="6" border="0" width="100%">
<tr><td>
<!-- Form elements -->
<table bgcolor="#FFFFFF" cellspacing="0" cellpadding="2" border="0" width="100%">
<multiple name=elements>
<if @elements.section@ not nil>
<tr><td colspan="2" bgcolor="#FFFFFF"><b>@elements.section@</b></td></tr>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><formwidget id=@elements.id@></noparse>
</if>
<else>
<if @elements.widget@ eq "submit">
<tr><td align="center" colspan="2">
<group column="widget">
<noparse><formwidget id=@elements.id@></noparse>
</group>
</td></tr>
</if>
<else>
<tr>
<if @elements.label@ not nil>
<td><b>@elements.label;noquote@</b>&nbsp;&nbsp;
<if @elements.help_text@ not nil>
<br>&nbsp;&nbsp;
<font size="-1"><noparse><formhelp id=@elements.id@></noparse></font><br>
</if>
</td>
</if>
<if @elements.widget@ eq radio or @elements.widget@ eq checkbox>
<if @elements.label@ nil><td colspan="2">></if>
<else><td></else>
<noparse>
<table cellpadding="4" cellspacing="0" border="0">
<formgroup id=@elements.id@>
<tr><td>\@formgroup.widget@</td>
<td><label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">\@formgroup.label@</label></td></tr>
</formgroup>
</table>
<formerror id=@elements.id@><br>
<font color="red"><b>\@formerror.@elements.id@;noquote\@</b></font>
</formerror>
</noparse>
</td>
</if>
<else>
<if @elements.widget@ eq inform>
<td bgcolor="#FFFFFF">
<noparse><formwidget id=@elements.id@></noparse>
</td>
</if>
<else>
<if @elements.label@ nil><td nowrap colspan="2"></if>
<else><td nowrap></else>
<noparse><formwidget id=@elements.id@>
<formerror id=@elements.id@><br><font
color="red"><b>\@formerror.@elements.id@;noquote\@<b></font>
</formerror></noparse>
</td>
</else>
</else>
</tr>
</else>
</else>
</group>
</multiple>
</table>
</td></tr>
<!-- End of light blue pad -->
</table>
<!-- Dark blue frame -->
</td></tr>
</table>
<multiple name=elements>
<if @elements.section@ not nil>
<fieldset id="@elements.form_id;noi18n@:@elements.section;noi18n@" @elements.sec_fieldset;noquote@><!-- section fieldset -->
<legend @elements.sec_legend;noquote@><span>@elements.sec_legendtext@</span></legend>
</if>
<group column="section">
<if @elements.widget;literal@ eq "hidden">
<noparse><div><formwidget id="@elements.id@"></div></noparse>
</if>
<else>
<if @elements.widget;literal@ eq "submit"><!-- if form submit button wrap it in the form-button class -->
<div class="form-button">
<group column="widget">
<noparse><formwidget id="@elements.id@">&nbsp;</noparse>
</group>
</div>
</if>
<else> <!-- wrap the form item in the form-item-wrapper class -->
<div class="form-item-wrapper">
<noparse>
<formerror id="@elements.id@">
<span class="form-error">
\@formerror.@elements.id@;noquote\@
</span> <!-- /form-error -->
</formerror>
</noparse>
<if @elements.widget;literal@ in radio checkbox>
<if @elements.legendtext@ defined>
<fieldset @elements.fieldset;noi18n@>
<!-- radio button groups and checkbox groups get their own fieldsets -->
<legend @elements.legend;oni18n@><span>@elements.legendtext@</span></legend>
</if>
</if>
<if @elements.label@ not nil>
<noparse>
<if @form_properties.mode;literal@ eq display or @elements.widget;literal@ in radio checkbox date inform>
<!-- no label tag -->
</if>
<else>
<label for="@elements.id@">
</else>
<if \@formerror.@elements.id@\@ not nil>
<span class="form-label form-label-error">
</if>
<else>
<span class="form-label">
</else>
</noparse>
@elements.label;noquote@
<if @form_properties.show_required_p;literal@ true>
<if @elements.optional@ nil and @elements.mode;literal@ ne "display" and @elements.widget;literal@ ne "inform">
<strong class="form-required-mark">(#acs-templating.required#)</strong>
</if>
</if>
</span><!-- form-label -->
<if @form_properties.mode;literal@ eq display or @elements.widget;literal@ in radio checkbox date inform>
<!-- no label tag -->
</if>
<else>
</label>
</else>
</if>
<else>
<if @form_properties.show_required_p;literal@ true>
<if @elements.optional@ nil and @elements.mode;literal@ ne "display" and @elements.widget;literal@ ne "inform">
<span class="form-label form-required-mark">
#acs-templating.required#
</span>
</if>
</if>
</else>
<if @elements.widget;literal@ in radio checkbox>
<noparse>
<span class="form-widget">
<formgroup id="@elements.id@">
<label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">
\@formgroup.widget;noquote@
\@formgroup.label;noquote@
</label><br>
</formgroup>
</span>
</noparse>
</if>
<else>
<noparse>
<span class="form-widget">
<formwidget id="@elements.id@">
</span>
</noparse>
</else>
<if @elements.help_text@ not nil>
<span class="form-help-text">
<img src="/shared/images/info.gif" width="12" height="9" alt="Help" title="Help text" style="border:0">
<noparse><formhelp id="@elements.id@"></noparse>
</span> <!-- /form-help-text -->
</if>
<if @elements.widget;literal@ in radio checkbox>
<if @elements.legendtext@ defined>
<!-- radio button groups and checkbox groups get their own fieldsets -->
</fieldset>
</if>
</if>
</div> <!-- form-item-wrapper -->
</else>
</else>
</group>
<if @elements.section@ not nil>
</fieldset> <!-- section fieldset -->
</if>
</multiple>
<table cellpadding="0" cellspacing="0" border="0" bgcolor="#999999" width="100%" height="0">
<tr bgcolor="#999999">
<td>
<table cellpadding="0" cellspacing="0" border="0" bgcolor="#DDDDDD" width="100%">
<tr align="center">
<multiple name=elements>
<if @elements.current@ eq 1><td bgcolor="#FFFFFF"></if>
<else>
<td bgcolor="#99CCFF">
<table border="0" cellpadding="2" cellspacing="1" width="100%"
bgcolor="#6699cc">
<tr align="center" bgcolor="#99ccff"><td>
</else>
&nbsp;<font size="-1"><noparse><formwidget id="@elements.id@"></noparse></font>
&nbsp;
</td>
<if @elements.current@ ne 1></tr></table></td></if>
</multiple>
</tr>
</table>
</td>
</tr>
</table>
<!-- Form elements -->
<table cellspacing="2" cellpadding="2" border="0">
<multiple name=elements>
<if @elements.section@ not nil>
<tr bgcolor="#ccccff"><th colspan="2">@elements.section@</th></tr>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><formwidget id=@elements.id@></noparse>
</if>
<else>
<if @elements.widget@ eq "submit">
<tr>
<td align="center" colspan="2">
<group column="widget">
<noparse>
<formwidget id="@elements.id@">
</noparse>
</group>
</td>
</tr>
</if>
<else>
<tr>
<if @elements.label@ not nil>
<noparse>
<if \@formerror.@elements.id@\@ not nil>
<td bgcolor="#ffaaaa">
</if>
<else>
<td bgcolor="#ddddff">
</else>
</noparse>
<b>
<font face="tahoma,verdana,arial,helvetica,sans-serif">
@elements.label;noquote@
</font>
</b>
&nbsp;&nbsp;
</td>
</if>
<else>
<td bgcolor="#ddddff">
&nbsp;
</td>
</else>
<noparse>
<if \@formerror.@elements.id@\@ not nil>
<td style="border: 2px solid red;">
</if>
<else>
<td>
</else>
</noparse>
<if @elements.widget@ eq radio or @elements.widget@ eq checkbox>
<noparse>
<table cellpadding="4" cellspacing="0" border="0">
<formgroup id="@elements.id@">
<tr>
<td>\@formgroup.widget;noquote@</td>
<td>
<font face="tahoma,verdana,arial,helvetica,sans-serif">
<label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">
\@formgroup.label@
</label>
</font>
</td>
</tr>
</formgroup>
</table>
</noparse>
</if>
<else>
<font face="tahoma,verdana,arial,helvetica,sans-serif">
<noparse>
<formwidget id="@elements.id@">
</noparse>
</font>
</else>
<noparse>
<formerror id="@elements.id@">
<br>
<font face="tahoma,verdana,arial,helvetica,sans-serif" color="red">
<b>\@formerror.@elements.id@;noquote\@<b>
</font>
</formerror>
</noparse>
<if @elements.help_text@ not nil>
<p style="margin-top: 4px; margin-bottom: 2px;">
<font face="tahoma,verdana,arial,helvetica,sans-serif">
<noparse>
<i><formhelp id="@elements.id@"></i>
</noparse>
</font>
</p>
</if>
</td>
</tr>
</else>
</else>
</group>
</multiple>
</table>
<!-- Dark blue frame -->
<table bgcolor="#6699CC" cellspacing="0" cellpadding="4" border="0">
<tr><td>
<!-- Light blue pad -->
<table bgcolor="#99CCFF" cellspacing="0" cellpadding="6" border="0" width="100%">
<tr><td>
<table bgcolor="#99CCFF" cellspacing="0" cellpadding="2" border="0" width="100%">
<multiple name=elements>
<if @elements.section@ not nil>
<tr><td colspan="2" bgcolor="#eeeeee"><b>@elements.section;noquote@</b></td></tr>
</if>
<group column="section">
<if @elements.widget@ eq "hidden">
<noparse><formwidget id=@elements.id@></noparse>
</if>
<else>
<if @elements.widget@ in "submit" "button">
<!-- put it at the bottom -->
</if>
<else>
<!-- If the widget is wide, display it in its own section -->
<if @elements.wide@ not nil>
<tr><td colspan="2" bgcolor="#eeeeee"><b>@elements.label;noquote@</b></td></tr>
<tr><td colspan="2">
</if>
<else>
<tr><td><b>@elements.label@</b>&nbsp;&nbsp;
<if @elements.help_text@ not nil>
<br>&nbsp;&nbsp;
<font size=-1><noparse><formhelp id=@elements.id;noquote@></noparse></font><br>
</if></td>
</else>
<if @elements.widget@ eq radio or @elements.widget@ eq checkbox>
<if @elements.wide@ not nil>
<if @elements.help_text@ not nil>
&nbsp;&nbsp;
<font size=-1><noparse><formhelp id=@elements.id;noquote@></noparse></font><br>
</if>
</if><else><td></else>
<noparse>
<table cellpadding="4" cellspacing="0" border="0">
<formgroup id="@elements.id@" cols="4">
<if \@formgroup.col@ eq 1><tr></if>
<if \@formgroup.rownum@ le \@formgroup:rowcount@>
<td align="right">&nbsp;\@formgroup.widget;noquote@</td>
<td align="left"><label for="@elements.form_id@:elements:@elements.id@:\@formgroup.option@">\@formgroup.label@</label></td>
</if><else><td>&nbsp;</td><td>&nbsp;</td></else>
<if \@formgroup.col@ eq 4></tr></if>
</formgroup>
</table>
<formerror id=@elements.id;noquote@><br>
<font color="red"><b>\@formerror.@elements.id@;noquote\@</b></font>
</formerror>
</noparse>
</td>
</if>
<else>
<if @elements.widget@ eq inform>
<if @elements.wide@ not nil>
<noparse>
<formerror id=@elements.id;noquote@><br>
<font color="red"><b>\@formerror.@elements.id@;noquote\@</b></font><br>
</formerror>
</noparse>
</if><else><td bgcolor="#EEEEEE"></else>
<noparse><formwidget id="@elements.id;noquote@"></noparse>
</td>
</if>
<else>
<if @elements.wide@ not nil></if><else><td nowrap></else>
<noparse><formwidget id="@elements.id@">
<formerror id="@elements.id@"><br><font
color="red"><b>\@formerror.@elements.id@;noquote\@<b></font>
</formerror></noparse>
</td>
</else>
</else>
</tr>
</else>
</else>
</group>
</multiple>
</td></tr>
<tr>
<td align="right" colspan="2">
<multiple name="elements">
<if @elements.widget@ in "submit" "button">
<noparse><formwidget id=@elements.id;noquote@></noparse>
</if>
</multiple>
</td>
</tr>
</table>
<!-- Light blue pad -->
</td></tr>
</table>
<!-- Dark blue frame -->
</td></tr>
</table>
<multiple name="filters">
<if @filters.filter_name@ ne "groupby" and @filters.filter_name@ ne
"orderby">
<p style="margin-top: 0px; margin-bottom: 12px;">
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr>
<td colspan="3" class="list-filter-header">
@filters.filter_label@
<if @filters.filter_clear_url@ not nil>
(<a href="@filters.filter_clear_url@" title="Clear the currently selected @filters.filter_label@">clear</a>)
</if>
</td>
</tr>
<group column="filter_name">
<if @filters.selected_p@ true>
<tr class="list-filter-selected">
</if>
<else>
<tr>
</else>
<td class="list-filter">
<if @filters.selected_p@ true><span class="list-filter-selected">@filters.label@</span></if>
<else><a href="@filters.url@" title="@filters.url_html_title@">@filters.label@</a></else>
</td>
<td align="right" class="list-filter">
<if @filters.count@ ne "0">@filters.count@</if>
</td>
<td align="right" class="list-filter">
<if @filters.add_url@ not nil>
<a href="@filters.add_url@">+</a>
</if>
</td>
</tr>
</group>
</table>
</p>
</if>
</multiple>
This diff is collapsed.
<multiple name="filters">
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr>
<td colspan="3" class="list-filter-header">
@filters.filter_label@
<if @filters.filter_clear_url@ not nil>
(<a href="@filters.filter_clear_url@" title="Clear the currently selected @filters.filter_label@">clear</a>)
</if>
</td>
</tr>
<group column="filter_name">
<if @filters.selected_p@ true>
<tr class="list-filter-selected">
</if>
<else>
<tr>
</else>
<td class="list-filter">
<if @filters.selected_p@ true><strong><span class="list-filter-selected">@filters.label@</span></strong></if>
<else><a href="@filters.url@" title="@filters.url_html_title@">@filters.label@</a></else>
</td>
<td align="right" class="list-filter">
<if @filters.count@ ne "0">@filters.count@</if>
</td>
<td align="right" class="list-filter">
<if @filters.add_url@ not nil>
<a href="@filters.add_url@">+</a>
</if>
</td>
</tr>
</group>
</table>
</multiple>
<formtemplate id="list-filters-@name@">
<p><formwidget id="submit"></p>
<multiple name="filters">
<if @filters.selected_p@ eq "t">
<if @filters.widget@ not nil and @filters.widget@ ne "hidden">
<p>
@filters.filter_label@
[ <a href="@filters.clear_one_url@">x</a> ]
<br>
</if>
<formwidget id="@filters.filter_name@">
<if @filters.widget@ not nil and @filters.widget@ ne "hidden">
</p>
</if>
</if>
</multiple>
<p><formwidget id="submit"></p>
</formtemplate>
<if 0><formtemplate id="list-filter-add-@name@" style="inline"></formtemplate></if>
<div class="list-inline-filters">
<multiple name="filters">
<p>
<span class="list-inline-filter-label">@filters.filter_label@</span>
<if @filters.filter_clear_url@ not nil>
(<a href="@filters.filter_clear_url@" title="Clear the currently selected @filters.filter_label@">clear</a>)
</if>
<span class="list-inline-filter">[</span>
<group column="filter_name">
<if @filters.selected_p@ true>
<span class="list-inline-filter-selected">@filters.label@</span>
</if>
<else>
<a href="@filters.url@" title="@filters.url_html_title@" class="list-inline-filter">@filters.label@</a>
</else>
<if @filters.count@ not nil and @filters.count@ ne "0">(@filters.count@)</if>
<if @filters.add_url@ not nil>
<a href="@filters.add_url@" class="list-inline-filter">+</a>
</if>
<if @filters.groupnum_last_p@ false> | </if>
</group>
<span class="list-inline-filter">]</span>
</p>
</multiple>
</div>
<div class="@list_properties.class@">
<noparse>
<if \@@list_properties.multirow@:rowcount@ eq 0>
</noparse>
@list_properties.no_data@
<noparse>
</if>
<else>
</noparse>
<if @bulk_actions:rowcount@ gt 0>
<if @list_properties.bulk_action_method@ not nil>
<form name="@list_properties.name@" method="@list_properties.bulk_action_method@">
</if>
<else>
<form name="@list_properties.name@" method="GET">
</else>
<noparse>
@list_properties.bulk_action_export_chunk;noquote@
</noparse>
</if>
<if @actions:rowcount@ gt 0>
<div class="list-button-bar">
<multiple name="actions">
<span class="list-button-header"><a href="@actions.url@" class="list-button" title="@actions.title@">@actions.label@</a></span>
</multiple>
</div>
</if>
<noparse>
<multiple name="@list_properties.multirow@">
<if \@@list_properties.multirow@.rownum@ odd>
<div class="list-row odd">
</if><else>
<div class="list-row even">
</else>
</noparse>
<listrow>
</div>
<noparse>
</multiple>
</noparse>
<if @bulk_actions:rowcount@ gt 0>
<div class="list-button-bar">
<multiple name="bulk_actions">
<span class="list-button-header"><a href="#" class="list-button" title="@bulk_actions.title@"
onclick="ListBulkActionClick('@list_properties.name@', '@bulk_actions.url@'); return false;">@bulk_actions.label@</a></span>
</multiple>
</div>
</form>
</if>
<noparse>
</else>
</noparse>
</div>
<% set selected_rownum 1 %>
<multiple name="filters">
<group column="filter_name">
<if @filters.selected_p@ and @filters.filter_name@ ne "groupby">
<if @selected_rownum@ eq 1><b>Filtered by:</b> </if>
<elseif @selected_rownum@ gt 1>, </elseif>
@filters.filter_label@: @filters.label@
<if @filters.filter_clear_url@ not nil>
<super>[<a href="@filters.filter_clear_url@" title="Clear the currently selected @filters.filter_label@">x</a>]</super>
</if>
<% incr selected_rownum %>
</if>
</group>
</multiple>
<%
# @author Miguel Marin (miguelmarin@viaro.net)
# @author Viaro Networks www.viaro.net
# @creation-date 2005-08-16
#
# Displays all filters as a select box to save space, also
# has a javascript to manage filters that are of type multival
#
# USAGE:
# <listfilters name="list_name" style="select-menu"></listfilters>
# <listtemplate name="list_name"></listtemplate>
#
#
# NOTE: to use the multival filter you need to specify it in the
# template::list::create in the filters section like this:
#
# -filters {
# filter_name {
# label "Filter Label"
# type multival
# values { {first_value 1 } {second_value 2} }
# where_clause { filter_where_cluse }
# }
# }
# - The recieving page variable must be of the type :multiple
# since the filter sends the values in the following way:
# filter_name=filter_value&amp;filter_name=filter_value&....&amp;extra_variables=extra_values
%>
<SCRIPT>
function getSelectedValues (select_name, filter_url, filter_name) {
var r = new Array();
url = getPageURL(filter_url);
extra_vars = getExtraVars( filter_name, filter_url);
// We get all the values of the selected options for the filter
// using the filter name.
for (var i = 0; i < select_name.options.length; i++)
if (select_name.options[i].selected) {
// Since the filter values is the whole url then we need to split it
var value_array = (select_name.options[i].value).split(filter_name+'=');
if ( (value_array[1]).search('&') == -1 )
{
// The variables part has only the filter value
r[r.length] = value_array[1];
}
else
{
// The variables part has more variables so we
// split to get only the filter value
filter_array = (value_array[1]).split('&');
r[r.length] = filter_array[0];
}
}
if (extra_vars.length > 0 ) {
// There are extra variables, so we send then using along wiht the filter value
return (url+'?'+filter_name+'='+r.join('&'+filter_name+'=')+'&'+extra_vars);
}
else
{
// Just send the filter value
return (url+'?'+filter_name+'='+r.join('&'+filter_name+'='));
}
}
function getExtraVars (filter_name, filter_url) {
var r = new Array();
// Take the variables of the url only
url_array = filter_url.split("?");
variables = url_array[1];
// Split all variables by "&"
var_array = variables.split("&");
// We store only the varaibles that are not equal to
// the filter name
for ( var i = 0; i < var_array.length; i++)
if ( var_array[i].search(filter_name) == -1)
r[r.length] = var_array[i];
// We return the variables joined by "&"
return r.join("&");
}
function getPageURL (filter_url) {
// Get the part of the location of the url
var filter_array = filter_url.split("?");
var url = filter_array[0];
return url;
}
</SCRIPT>
<table border="0">
<tr>
<multiple name="filters">
<td valign="top">
<table border="0" cellspacing="0" cellpadding="2" width="100%">
<tr>
<td colspan="3" class="list-filter-header">
@filters.filter_label@
<if @filters.filter_clear_url@ not nil>
(<a href="@filters.filter_clear_url@" title="Clear the currently selected @filters.filter_label@">clear</a>)
</if>
</td>
</tr>
<tr>
<td>
<if @filters.type@ eq "multival">
<select name="@filters.filter_label@" onchange="window.location = getSelectedValues(this,'@filters.url@','@filters.filter_name@')" multiple size="3">
</if>
<else>
<select name="@filters.filter_label@" onchange="window.location = this.options[this.selectedIndex].value">
</else>
<if @filters.filter_clear_url@ nil>
<option value="#">- - - - -</option>
</if>
<group column="filter_name">
<if @filters.selected_p@ true>
<option value="@filters.url@" selected>
@filters.label@
</option>
</if>
<else>
<option value="@filters.url@">
@filters.label@
</option>
</else>
</group>
</select>
</td>
</tr>
</table>
</td>
</multiple>
</tr>
</table>
This diff is collapsed.
This diff is collapsed.
<?php
// +----------------------------------------------------------------------+
// | PHP version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2 of the GPL license, |
// | that is bundled with this package in the file license.txt and is |
// | available through the world-wide-web at the following url: |
// | http://www.gnu.org/copyleft/gpl.html |
// +----------------------------------------------------------------------+
// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org |
// +----------------------------------------------------------------------+
// | Authors: James Heinrich <infogetid3*org> |
// | Allan Hansen <ahartemis*dk> |
// +----------------------------------------------------------------------+
// | module.archive.szip.php |
// | module for analyzing SZIP compressed files |
// | dependencies: NONE |
// +----------------------------------------------------------------------+
//
// $Id$
class getid3_szip extends getid3_handler
{
public function Analyze() {
$getid3 = $this->getid3;
fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
$szip_rkau = fread($getid3->fp, 6);
// Magic bytes: 'SZ'."\x0A\x04"
$getid3->info['fileformat'] = 'szip';
$getid3->info['szip']['major_version'] = getid3_lib::BigEndian2Int(substr($szip_rkau, 4, 1));
$getid3->info['szip']['minor_version'] = getid3_lib::BigEndian2Int(substr($szip_rkau, 5, 1));
while (!feof($getid3->fp)) {
$next_block_id = fread($getid3->fp, 2);
switch ($next_block_id) {
case 'SZ':
// Note that szip files can be concatenated, this has the same effect as
// concatenating the files. this also means that global header blocks
// might be present between directory/data blocks.
fseek($getid3->fp, 4, SEEK_CUR);
break;
case 'BH':
$bh_header_bytes = getid3_lib::BigEndian2Int(fread($getid3->fp, 3));
$bh_header_data = fread($getid3->fp, $bh_header_bytes);
$bh_header_offset = 0;
while (strpos($bh_header_data, "\x00", $bh_header_offset) > 0) {
//filename as \0 terminated string (empty string indicates end)
//owner as \0 terminated string (empty is same as last file)
//group as \0 terminated string (empty is same as last file)
//3 byte filelength in this block
//2 byte access flags
//4 byte creation time (like in unix)
//4 byte modification time (like in unix)
//4 byte access time (like in unix)
$bh_data_array['filename'] = substr($bh_header_data, $bh_header_offset, strcspn($bh_header_data, "\x00"));
$bh_header_offset += (strlen($bh_data_array['filename']) + 1);
$bh_data_array['owner'] = substr($bh_header_data, $bh_header_offset, strcspn($bh_header_data, "\x00"));
$bh_header_offset += (strlen($bh_data_array['owner']) + 1);
$bh_data_array['group'] = substr($bh_header_data, $bh_header_offset, strcspn($bh_header_data, "\x00"));
$bh_header_offset += (strlen($bh_data_array['group']) + 1);
$bh_data_array['filelength'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 3));
$bh_header_offset += 3;
$bh_data_array['access_flags'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 2));
$bh_header_offset += 2;
$bh_data_array['creation_time'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 4));
$bh_header_offset += 4;
$bh_data_array['modification_time'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 4));
$bh_header_offset += 4;
$bh_data_array['access_time'] = getid3_lib::BigEndian2Int(substr($bh_header_data, $bh_header_offset, 4));
$bh_header_offset += 4;
$getid3->info['szip']['BH'][] = $bh_data_array;
}
break;
default:
break 2;
}
}
return true;
}
}
?>
\ No newline at end of file
<?php
// +----------------------------------------------------------------------+
// | PHP version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2 of the GPL license, |
// | that is bundled with this package in the file license.txt and is |
// | available through the world-wide-web at the following url: |
// | http://www.gnu.org/copyleft/gpl.html |
// +----------------------------------------------------------------------+
// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org |
// +----------------------------------------------------------------------+
// | Authors: James Heinrich <infogetid3*org> |
// | Allan Hansen <ahartemis*dk> |
// +----------------------------------------------------------------------+
// | module.archive.tar.php |
// | module for analyzing TAR files |
// | dependencies: NONE |
// +----------------------------------------------------------------------+
// | Module originally written by Mike Mozolin <teddybearmail*ru> |
// +----------------------------------------------------------------------+
//
// $Id$
class getid3_tar extends getid3_handler
{
function Analyze() {
$info = &$this->getid3->info;
$info['fileformat'] = 'tar';
$fp = $this->getid3->fp;
fseek($fp, 0);
$unpack_header = 'a100fname/a8mode/a8uid/a8gid/a12size/a12mtime/a8chksum/a1typflag/a100lnkname/a6magic/a2ver/a32uname/a32gname/a8devmaj/a8devmin/a155/prefix';
$null_512k = str_repeat("\0", 512); // end-of-file marker
$already_warned = false;
while (!feof($fp)) {
$buffer = fread($fp, 512);
// check the block
$checksum = 0;
for ($i = 0; $i < 148; $i++) {
$checksum += ord(substr($buffer, $i, 1));
}
for ($i = 148; $i < 156; $i++) {
$checksum += ord(' ');
}
for ($i = 156; $i < 512; $i++) {
$checksum += ord(substr($buffer, $i, 1));
}
$attr = unpack($unpack_header, $buffer);
$name = trim(@$attr['fname']);
$mode = octdec(trim(@$attr['mode']));
$uid = octdec(trim(@$attr['uid']));
$gid = octdec(trim(@$attr['gid']));
$size = octdec(trim(@$attr['size']));
$mtime = octdec(trim(@$attr['mtime']));
$chksum = octdec(trim(@$attr['chksum']));
$typflag = trim(@$attr['typflag']);
$lnkname = trim(@$attr['lnkname']);
$magic = trim(@$attr['magic']);
$ver = trim(@$attr['ver']);
$uname = trim(@$attr['uname']);
$gname = trim(@$attr['gname']);
$devmaj = octdec(trim(@$attr['devmaj']));
$devmin = octdec(trim(@$attr['devmin']));
$prefix = trim(@$attr['prefix']);
// EOF Found
if (($checksum == 256) && ($chksum == 0)) {
break;
}
// Check if filename if 7bit as spec requires
if (!$already_warned) {
for ($i = 0; $i < strlen($name); $i++) {
if ($name{$i} < chr(32) || $name{$i} > chr(127)) {
$this->getid3->warning('Some filenames contains extended characters, which breaks the tar specifation. This is not uncommon, but you will have to handle the character encoding for filenames yourself.');
$already_warned = true;
break;
}
}
}
if ($prefix) {
$name = $prefix.'/'.$name;
}
if ((preg_match('#/$#', $name)) && !$name) {
$typeflag = 5;
}
// If it's the end of the tar-file...
if ($buffer == $null_512k) {
break;
}
// Protect against tar-files with garbage at the end
if ($name == '') {
break;
}
$info['tar']['file_details'][$name] = array (
'name' => $name,
'mode_raw' => $mode,
'mode' => getid3_tar::display_perms($mode),
'uid' => $uid,
'gid' => $gid,
'size' => $size,
'mtime' => $mtime,
'chksum' => $chksum,
'typeflag' => getid3_tar::get_flag_type($typflag),
'linkname' => $lnkname,
'magic' => $magic,
'version' => $ver,
'uname' => $uname,
'gname' => $gname,
'devmajor' => $devmaj,
'devminor' => $devmin
);
// Skip the next chunk
fseek($fp, $size, SEEK_CUR);
// Throw away padding
if ($size % 512) {
fseek($fp, 512 - $diff, SEEK_CUR);
}
}
return true;
}
// Parses the file mode to file permissions
public static function display_perms($mode) {
// Determine Type
if ($mode & 0x1000) {
$type='p'; // FIFO pipe
}
elseif ($mode & 0x2000) {
$type='c'; // Character special
}
elseif ($mode & 0x4000) {
$type='d'; // Directory
}
elseif ($mode & 0x6000) {
$type='b'; // Block special
}
elseif ($mode & 0x8000) {
$type='-'; // Regular
}
elseif ($mode & 0xA000) {
$type='l'; // Symbolic Link
}
elseif ($mode & 0xC000) {
$type='s'; // Socket
}
else {
$type='u'; // UNKNOWN
}
// Determine permissions
$owner['read'] = (($mode & 00400) ? 'r' : '-');
$owner['write'] = (($mode & 00200) ? 'w' : '-');
$owner['execute'] = (($mode & 00100) ? 'x' : '-');
$group['read'] = (($mode & 00040) ? 'r' : '-');
$group['write'] = (($mode & 00020) ? 'w' : '-');
$group['execute'] = (($mode & 00010) ? 'x' : '-');
$world['read'] = (($mode & 00004) ? 'r' : '-');
$world['write'] = (($mode & 00002) ? 'w' : '-');
$world['execute'] = (($mode & 00001) ? 'x' : '-');
// Adjust for SUID, SGID and sticky bit
if ($mode & 0x800) {
$owner['execute'] = ($owner['execute'] == 'x') ? 's' : 'S';
}
if ($mode & 0x400) {
$group['execute'] = ($group['execute'] == 'x') ? 's' : 'S';
}
if ($mode & 0x200) {
$world['execute'] = ($world['execute'] == 'x') ? 't' : 'T';
}
$s = sprintf('%1s', $type);
$s .= sprintf('%1s%1s%1s', $owner['read'], $owner['write'], $owner['execute']);
$s .= sprintf('%1s%1s%1s', $group['read'], $group['write'], $group['execute']);
$s .= sprintf('%1s%1s%1s'."\n", $world['read'], $world['write'], $world['execute']);
return $s;
}
// Converts the file type
public static function get_flag_type($typflag) {
static $flag_types = array (
'0' => 'LF_NORMAL',
'1' => 'LF_LINK',
'2' => 'LF_SYNLINK',
'3' => 'LF_CHR',
'4' => 'LF_BLK',
'5' => 'LF_DIR',
'6' => 'LF_FIFO',
'7' => 'LF_CONFIG',
'D' => 'LF_DUMPDIR',
'K' => 'LF_LONGLINK',
'L' => 'LF_LONGNAME',
'M' => 'LF_MULTIVOL',
'N' => 'LF_NAMES',
'S' => 'LF_SPARSE',
'V' => 'LF_VOLHDR'
);
return @$flag_types[$typflag];
}
}
?>
\ No newline at end of file
<?php
// +----------------------------------------------------------------------+
// | PHP version 5 |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2006 James Heinrich, Allan Hansen |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2 of the GPL license, |
// | that is bundled with this package in the file license.txt and is |
// | available through the world-wide-web at the following url: |
// | http://www.gnu.org/copyleft/gpl.html |
// +----------------------------------------------------------------------+
// | getID3() - http://getid3.sourceforge.net or http://www.getid3.org |
// +----------------------------------------------------------------------+
// | Authors: James Heinrich <infogetid3*org> |
// | Allan Hansen <ahartemis*dk> |
// +----------------------------------------------------------------------+
// | module.audio-video.nsv.php |
// | module for analyzing Nullsoft NSV files |
// | dependencies: NONE |
// +----------------------------------------------------------------------+
//
// $Id$
class getid3_nsv extends getid3_handler
{
public function Analyze() {
$getid3 = $this->getid3;
$getid3->info['fileformat'] = 'nsv';
$getid3->info['audio']['dataformat'] = 'nsv';
$getid3->info['video']['dataformat'] = 'nsv';
$getid3->info['audio']['lossless'] = false;
$getid3->info['video']['lossless'] = false;
fseek($getid3->fp, $getid3->info['avdataoffset'], SEEK_SET);
$nsv_header = fread($getid3->fp, 4);
switch ($nsv_header) {
case 'NSVs':
$this->getNSVsHeader();
break;
case 'NSVf':
if ($this->getNSVfHeader()) {
$this->getNSVsHeader($getid3->info['nsv']['NSVf']['header_length']);
}
break;
default:
throw new getid3_exception('Expecting "NSVs" or "NSVf" at offset '.$getid3->info['avdataoffset'].', found "'.$nsv_header.'"');
break;
}
if (!isset($getid3->info['nsv']['NSVf'])) {
$getid3->warning('NSVf header not present - cannot calculate playtime or bitrate');
}
return true;
}
private function getNSVsHeader($file_offset = 0) {
$getid3 = $this->getid3;
fseek($getid3->fp, $file_offset, SEEK_SET);
$nsvs_header = fread($getid3->fp, 28);
$getid3->info['nsv']['NSVs'] = array ();
$info_nsv_NSVs = &$getid3->info['nsv']['NSVs'];
$info_nsv_NSVs['identifier'] = substr($nsvs_header, 0, 4);
if ($info_nsv_NSVs['identifier'] != 'NSVs') {
throw new getid3_exception('expected "NSVs" at offset ('.$file_offset.'), found "'.$info_nsv_NSVs['identifier'].'" instead');
}
$info_nsv_NSVs['offset'] = $file_offset;
getid3_lib::ReadSequence('LittleEndian2Int', $info_nsv_NSVs, $nsvs_header, 4,
array (
'video_codec' => -4, // string
'audio_codec' => -4, // string
'resolution_x' => 2,
'resolution_y' => 2,
'framerate_index' => 1,
)
);
if ($info_nsv_NSVs['audio_codec'] == 'PCM ') {
getid3_lib::ReadSequence('LittleEndian2Int', $info_nsv_NSVs, $nsvs_header, 24,
array (
'bits_channel' => 1,
'channels' => 1,
'sample_rate' => 2
)
);
$getid3->info['audio']['sample_rate'] = $info_nsv_NSVs['sample_rate'];
}
$getid3->info['video']['resolution_x'] = $info_nsv_NSVs['resolution_x'];
$getid3->info['video']['resolution_y'] = $info_nsv_NSVs['resolution_y'];
$info_nsv_NSVs['frame_rate'] = getid3_nsv::NSVframerateLookup($info_nsv_NSVs['framerate_index']);
$getid3->info['video']['frame_rate'] = $info_nsv_NSVs['frame_rate'];
$getid3->info['video']['bits_per_sample'] = 24;
$getid3->info['video']['pixel_aspect_ratio'] = (float)1;
return true;
}
private function getNSVfHeader($file_offset = 0, $get_toc_offsets=false) {
$getid3 = $this->getid3;
fseek($getid3->fp, $file_offset, SEEK_SET);
$nsvf_header = fread($getid3->fp, 28);
$getid3->info['nsv']['NSVf'] = array ();
$info_nsv_NSVf = &$getid3->info['nsv']['NSVf'];
$info_nsv_NSVf['identifier'] = substr($nsvf_header, 0, 4);
if ($info_nsv_NSVf['identifier'] != 'NSVf') {
throw new getid3_exception('expected "NSVf" at offset ('.$file_offset.'), found "'.$info_nsv_NSVf['identifier'].'" instead');
}
$getid3->info['nsv']['NSVs']['offset'] = $file_offset;
getid3_lib::ReadSequence('LittleEndian2Int', $info_nsv_NSVf, $nsvf_header, 4,
array (
'header_length' => 4,
'file_size' => 4,
'playtime_ms' => 4,
'meta_size' => 4,
'TOC_entries_1' => 4,
'TOC_entries_2' => 4
)
);
if ($info_nsv_NSVf['playtime_ms'] == 0) {
throw new getid3_exception('Corrupt NSV file: NSVf.playtime_ms == zero');
}
if ($info_nsv_NSVf['file_size'] > $getid3->info['avdataend']) {
$getid3->warning('truncated file - NSVf header indicates '.$info_nsv_NSVf['file_size'].' bytes, file actually '.$getid3->info['avdataend'].' bytes');
}
$nsvf_header .= fread($getid3->fp, $info_nsv_NSVf['meta_size'] + (4 * $info_nsv_NSVf['TOC_entries_1']) + (4 * $info_nsv_NSVf['TOC_entries_2']));
$nsvf_headerlength = strlen($nsvf_header);
$info_nsv_NSVf['metadata'] = substr($nsvf_header, 28, $info_nsv_NSVf['meta_size']);
$offset = 28 + $info_nsv_NSVf['meta_size'];
if ($get_toc_offsets) {
$toc_counter = 0;
while ($toc_counter < $info_nsv_NSVf['TOC_entries_1']) {
if ($toc_counter < $info_nsv_NSVf['TOC_entries_1']) {
$info_nsv_NSVf['TOC_1'][$toc_counter] = getid3_lib::LittleEndian2Int(substr($nsvf_header, $offset, 4));
$offset += 4;
$toc_counter++;
}
}
}
if (trim($info_nsv_NSVf['metadata']) != '') {
$info_nsv_NSVf['metadata'] = str_replace('`', "\x01", $info_nsv_NSVf['metadata']);
$comment_pair_array = explode("\x01".' ', $info_nsv_NSVf['metadata']);
foreach ($comment_pair_array as $comment_pair) {
if (strstr($comment_pair, '='."\x01")) {
list($key, $value) = explode('='."\x01", $comment_pair, 2);
$getid3->info['nsv']['comments'][strtolower($key)][] = trim(str_replace("\x01", '', $value));
}
}
}
$getid3->info['playtime_seconds'] = $info_nsv_NSVf['playtime_ms'] / 1000;
$getid3->info['bitrate'] = ($info_nsv_NSVf['file_size'] * 8) / $getid3->info['playtime_seconds'];
return true;
}
public static function NSVframerateLookup($frame_rate_index) {
if ($frame_rate_index <= 127) {
return (float)$frame_rate_index;
}
static $lookup = array (
129 => 29.970,
131 => 23.976,
133 => 14.985,
197 => 59.940,
199 => 47.952
);
return (isset($lookup[$frame_rate_index]) ? $lookup[$frame_rate_index] : false);
}
}
?>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment