Merge branch 'devel' of dev.sourcefabric.org:airtime into devel

This commit is contained in:
Martin Konecny 2012-08-01 14:52:29 -04:00
commit e6a3877c1e
7 changed files with 244 additions and 78 deletions

View File

@ -311,6 +311,22 @@ class LibraryController extends Zend_Controller_Action
$this->view->md = $md;
$this->view->contents = $file->getContents();
} else if ($type == "block") {
$file = new Application_Model_Block($id);
$this->view->type = $type;
$md = $file->getAllPLMetaData();
$formatter = new LengthFormatter($md["dcterms:extent"]);
$md["dcterms:extent"] = $formatter->format();
$this->view->md = $md;
if ($file->isStatic()) {
$this->view->blType = 'Static';
$this->view->contents = $file->getContents();
} else {
$this->view->blType = 'Dynamic';
$this->view->contents = $file->getCriteria();
}
} else if ($type == "stream") {
$file = new Application_Model_Webstream($id);

View File

@ -965,59 +965,61 @@ EOT;
}
}// foreach
$modKeys = array_keys($data['modrow']);
for ($i = 0; $i < count($modKeys); $i++) {
foreach ($data['modrow'][$modKeys[$i]] as $key=>$d){
$error = array();
// check for not selected select box
if ($d['sp_criteria_field'] == "0" || $d['sp_criteria_modifier'] == "0"){
$error[] = "You must select Criteria and Modifier";
} else {
$column = CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$d['sp_criteria_field']]);
// validation on type of column
if ($d['sp_criteria_field'] == 'length') {
if (!preg_match("/(\d{2}):(\d{2}):(\d{2})/", $d['sp_criteria_value'])) {
$error[] = "'Length' should be in '00:00:00' format";
}
} else if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_value'])) {
$error[] = "The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00";
} else if (!Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_value'])) {
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
$error[] = "$d[sp_criteria_value] is not a valid date/time string";
}
if (isset($d['sp_criteria_extra'])) {
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_extra'])) {
if (isset($data['modrow'])) {
$modKeys = array_keys($data['modrow']);
for ($i = 0; $i < count($modKeys); $i++) {
foreach ($data['modrow'][$modKeys[$i]] as $key=>$d){
$error = array();
// check for not selected select box
if ($d['sp_criteria_field'] == "0" || $d['sp_criteria_modifier'] == "0"){
$error[] = "You must select Criteria and Modifier";
} else {
$column = CcFilesPeer::getTableMap()->getColumnByPhpName(self::$criteria2PeerMap[$d['sp_criteria_field']]);
// validation on type of column
if ($d['sp_criteria_field'] == 'length') {
if (!preg_match("/(\d{2}):(\d{2}):(\d{2})/", $d['sp_criteria_value'])) {
$error[] = "'Length' should be in '00:00:00' format";
}
} else if ($column->getType() == PropelColumnTypes::TIMESTAMP) {
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_value'])) {
$error[] = "The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00";
} else if (!Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_extra'])) {
} else if (!Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_value'])) {
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
$error[] = "$d[sp_criteria_extra] is not a valid date/time string";
$error[] = "$d[sp_criteria_value] is not a valid date/time string";
}
if (isset($d['sp_criteria_extra'])) {
if (!preg_match("/(\d{4})-(\d{2})-(\d{2})/", $d['sp_criteria_extra'])) {
$error[] = "The value should be in timestamp format(eg. 0000-00-00 or 00-00-00 00:00:00";
} else if (!Application_Common_DateHelper::checkDateTimeRangeForSQL($d['sp_criteria_extra'])) {
// check for if it is in valid range( 1753-01-01 ~ 12/31/9999 )
$error[] = "$d[sp_criteria_extra] is not a valid date/time string";
}
}
} else if ($column->getType() == PropelColumnTypes::INTEGER) {
if (!is_numeric($d['sp_criteria_value'])) {
$error[] = "The value has to be numeric";
}
// length check
if (intval($d['sp_criteria_value']) >= pow(2,31)) {
$error[] = "The value should be less then 2147483648";
}
} else if ($column->getType() == PropelColumnTypes::VARCHAR) {
if (strlen($d['sp_criteria_value']) > $column->getSize()) {
$error[] = "The value should be less ".$column->getSize()." characters";
}
}
} else if ($column->getType() == PropelColumnTypes::INTEGER) {
if (!is_numeric($d['sp_criteria_value'])) {
$error[] = "The value has to be numeric";
}
// length check
if (intval($d['sp_criteria_value']) >= pow(2,31)) {
$error[] = "The value should be less then 2147483648";
}
} else if ($column->getType() == PropelColumnTypes::VARCHAR) {
if (strlen($d['sp_criteria_value']) > $column->getSize()) {
$error[] = "The value should be less ".$column->getSize()." characters";
}
}
}
if ($d['sp_criteria_value'] == "") {
$error[] = "Value cannot be empty";
}
if(count($error) > 0){
$errors[] = array("element"=>"sp_criteria_field_".$modKeys[$i]."_".$key, "msg"=>$error);
}
}//end mod foreach
}//for loop
if ($d['sp_criteria_value'] == "") {
$error[] = "Value cannot be empty";
}
if(count($error) > 0){
$errors[] = array("element"=>"sp_criteria_field_".$modKeys[$i]."_".$key, "msg"=>$error);
}
}//end mod foreach
}//for loop
}//if
$result = count($errors) > 0 ? 1 :0;
$files["count"] = 0;
@ -1060,19 +1062,21 @@ EOT;
}
//insert modifier rows
$modKeys = array_keys($p_criteriaData['modrow']);
for ($i = 0; $i < count($modKeys); $i++) {
foreach( $p_criteriaData['modrow'][$modKeys[$i]] as $d){
$qry = new CcBlockcriteria();
$qry->setDbCriteria($d['sp_criteria_field'])
->setDbModifier($d['sp_criteria_modifier'])
->setDbValue($d['sp_criteria_value'])
->setDbBlockId($this->id);
if (isset($d['sp_criteria_extra'])) {
$qry->setDbExtra($d['sp_criteria_extra']);
if (isset($p_criteriaData['modrow'])) {
$modKeys = array_keys($p_criteriaData['modrow']);
for ($i = 0; $i < count($modKeys); $i++) {
foreach( $p_criteriaData['modrow'][$modKeys[$i]] as $d){
$qry = new CcBlockcriteria();
$qry->setDbCriteria($d['sp_criteria_field'])
->setDbModifier($d['sp_criteria_modifier'])
->setDbValue($d['sp_criteria_value'])
->setDbBlockId($this->id);
if (isset($d['sp_criteria_extra'])) {
$qry->setDbExtra($d['sp_criteria_extra']);
}
$qry->save();
}
$qry->save();
}
}
@ -1264,8 +1268,10 @@ EOT;
*/
$tempName = $ele['name'];
preg_match('/^\D*(?=\d)/', $tempName, $r);
$critIndexPos = strlen($r[0]);
$critIndex = $tempName[$critIndexPos];
if (isset($r[0])) {
$critIndexPos = strlen($r[0]);
$critIndex = $tempName[$critIndexPos];
}
$fieldName = substr($ele['name'], 0, $index);

View File

@ -21,21 +21,103 @@
<?php endif; ?>
<?php if($this->type == "playlist") : ?>
<?php if($this->type == "playlist" || $this->type == "block") : ?>
<div><span>Name:</span><span><?php echo ($this->md["dc:title"]);?></span></div>
<div><span>Creator:</span><span><?php echo ($this->md["dc:creator"]);?></span></div>
<?php if ($this->type == "block" && $this->blType == "Dynamic") { ?>
<?php if ($this->contents["limit"]["modifier"] == "items") { ?>
<?php $len = $this->contents["limit"]["value"]." tracks"; ?>
<?php } elseif ($this->contents["limit"]["modifier"] == "minutes") { ?>
<?php
$mins = $this->contents["limit"]["value"];
if ($mins > 59) {
$hours = intval($mins / 60);
$minutes = $mins % 60;
$len = $hours.":".str_pad($minutes, 2, "0", STR_PAD_LEFT).":00.0";
} else {
$len = $this->contents["limit"]["value"].":00.0";
}
?>
<?php } else {?>
<?php $len = $this->contents["limit"]["value"].":00:00.0"; ?>
<?php } ?>
<div><span>Length:</span><span><?php echo $len;?></span></div>
<?php } else { ?>
<div><span>Length:</span><span><?php echo ($this->md["dcterms:extent"]);?></span></div>
<?php } ?>
<div><span>Description:</span><span><?php echo ($this->md["dc:description"]);?></span></div>
<div><span>Contents: </span>
<?php foreach($this->contents as $row) : ?>
<div>
<span><?php echo $row["track_title"] ?></span>
<span><?php echo $row["creator"] ?></span>
<span><?php echo $row["album_title"] ?></span>
<span><?php echo $row["length"] ?></span>
</div>
<?php endforeach; ?>
</div>
<?php if ($this->type == "playlist" || ($this->type == "block" && $this->blType == "Static")) {?>
<?php if ($this->type == "playlist") { ?>
<div><span>Playlist Contents: </span></div>
<?php } else { ?>
<div><span>Static Playlist Contents: </span></div>
<?php } ?>
<table class='library-get-file-md'>
<?php foreach($this->contents as $row) : ?>
<?php
$titleMaxStrLen = 35;
if (strlen($row["track_title"]) > $titleMaxStrLen) {
$row["track_title"] = substr($row["track_title"], 0, 34)."...";
}
$artistMaxStrLen = 22;
if (strlen($row["creator"]) > $artistMaxStrLen) {
$row["creator"] = substr($row["creator"], 0, 21)."...";
}
?>
<?php if ($row["type"] == 2) {
$bl = new Application_Model_Block($row["item_id"]);
$isStatic = $bl->isStatic(); ?>
<tr class='file-md-qtip-playlist <?php if ($isStatic) echo 'static'; else echo 'dynamic';?>'>
<td colspan="3"><?php if ($isStatic) echo 'Static Playlist'; else echo 'Dynamic Playlist';?></td>
</tr>
<tr class='file-md-qtip-playlist <?php if ($isStatic) echo 'static'; else echo 'dynamic';?>'>
<td class='file-md-qtip-row-width-title'><?php echo $row["track_title"] ?></td>
<td class='file-md-qtip-row-width-artist'><?php echo $row["creator"] ?></td>
<?php if (!$isStatic) { ?>
<?php $criteria = $bl->getCriteria();?>
<?php $len = $bl->getLength();?>
<td class='file-md-qtip-row-width-small'><?php echo $len ?></td>
<?php } else { ?>
<td class='file-md-qtip-row-width-small'><?php echo $row["length"] ?></td>
<?php } ?>
</tr>
<?php } else { ?>
<tr>
<td class='file-md-qtip-row-width-title'><?php echo $row["track_title"] ?></td>
<td class='file-md-qtip-row-width-artist'><?php echo $row["creator"] ?></td>
<td class='file-md-qtip-row-width-small'><?php echo $row["length"] ?></td>
</tr>
<?php } ?>
<?php endforeach; ?>
</table>
<?php } elseif ($this->blType == "Dynamic") { ?>
<div><span>Dynamic Playlist Criteria: </span></div>
<table class='library-get-file-md table-small'>
<?php foreach ($this->contents["crit"] as $criterias) : ?>
<?php foreach ($criterias as $crit ) : ?>
<?php
$maxStrLen = 25;
if (strlen($crit["value"]) > $maxStrLen) {
$crit["value"] = substr($crit["value"], 0, 24)."...";
}
?>
<tr>
<td class='file-md-qtip-criteria-width-small'><?php echo $crit["display_name"] ?></td>
<td class='file-md-qtip-criteria-width-small'><?php echo $crit["modifier"] ?></td>
<td class='file-md-qtip-criteria-width'><?php echo $crit["value"] ?>
<?php if (isset($crit["extra"])) { ?>
to <?php echo $crit["extra"] ?></td>
<?php } ?>
</tr>
<?php endforeach; ?>
<tr>
<td>Limit to </td>
<td><?php echo $this->contents["limit"]["value"] ?> <?php echo $this->contents["limit"]["modifier"] ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php } ?>
<?php endif; ?>
<?php if ($this->type == "stream") : ?>

File diff suppressed because one or more lines are too long

View File

@ -417,6 +417,66 @@ input[type="text"]:focus, input[type="password"]:focus, textarea:focus, .input_t
vertical-align: top;
}
/***** LIBRARY QTIP METADATA SPECIFIC STYLES BEGIN *****/
.ui-tooltip-dark.file-md-long{
max-width: 415px !important;
}
.library-get-file-md tr td{
font-size:10px;
padding: 0px;
vertical-align:top;
}
table.library-get-file-md{
margin-left:15px;
margin-right:15px;
width:350px;
}
table.library-get-file-md.table-small{
width:290px !important;
}
.file-md-qtip-criteria-width-small{
width:80px;
}
.file-md-qtip-criteria-width{
width:120px;
}
.file-md-qtip-row-width-title{
width:170px;
padding-right:5px !important;
}
.file-md-qtip-row-width-artist{
width:110px;
}
.file-md-qtip-row-width-small{
width:40x;
text-align:right;
}
.file-md-qtip-playlist td{
font-weight: bold;
font-style: italic;
}
.file-md-qtip-playlist.dynamic td{
color: #63a2f0;
}
.file-md-qtip-playlist.static td{
color: #f09839;
}
/***** LIBRARY QTIP METADATA SPECIFIC STYLES END *****/
/***** SMART PLAYLIST SPECIFIC STYLES BEGIN *****/
.sp-invisible{
visibility: hidden;

View File

@ -484,7 +484,7 @@ var AIRTIME = (function(AIRTIME) {
effect: false // Disable positioning animation
},
style: {
classes: "ui-tooltip-dark"
classes: "ui-tooltip-dark file-md-long"
},
show: 'mousedown',
events: {
@ -495,7 +495,7 @@ var AIRTIME = (function(AIRTIME) {
}
}
},
hide: 'mouseout'
hide: {event:'mouseout', delay: 50, fixed:true}
});
},
//remove any selected nodes before the draw.

View File

@ -429,7 +429,8 @@ function getCriteriaOptionType(e) {
function callback(data, type) {
var form = $('#smart-playlist-form'),
json = $.parseJSON(data);
json = $.parseJSON(data),
dt = $('table[id="library_display"]').dataTable();
form.find('span[class="errors sp-errors"]').remove();
@ -449,7 +450,6 @@ function callback(data, type) {
} else if (type == 'generate') {
form.find('.success').text('Smart playlist generated and saved');
//redraw library table so the length gets updated
var dt = $('table[id="library_display"]').dataTable();
dt.fnStandingRedraw();
}
form.find('.success').show();
@ -457,6 +457,8 @@ function callback(data, type) {
} else {
form.find('.success').text('Criteria saved');
form.find('.success').show();
//redraw library table incase block changed from static to dynamic or vice versa
dt.fnStandingRedraw();
/* Update number of files that meet criteria and change icon to success/warning
* as appropriate. This is also done in the form but we do not pass the form