When I started developing MusicaLliure.cat with ccHost 4.5, we needed a moderation control panel. It’s not used any more, since we coded a «flag it!» system to avoid having someone approving every new uploaded song.
Anyway, here it is the code, in case someone finds it useful. Notice that your moderators should have permission to publish/unpublish content, but not your users, obviously.
The css is *in* the file, but just feel free to put it in a separate file, as I like.
How does it look like? The moderator sees the queue. For each song, the title, author, a player and two buttons are shown. If the moderator clicks on the title or the author, a search is performed (Google).
As usual, you have to place the code below in local_files/viewfile, and the php part in local_files/lib/
License: GPL
<div>
<tal:block define="pendents php:cancons_pendents_de_moderacio()" />
<tal:block define="blocades php:cancons_blocades()" />
<style type="text/css">
.cpm {
margin:15px auto 15px auto;
}
.cpm td{
padding:5px;
border:1px solid silver;
}
.cpm td#cpm_aprovala {
background-color:green;
}
.cpm td#cpm_blocala {
background-color:#cc0000;
}
#cpm_aprovala a, #cpm_blocala a {
color:white;
font-weight:bold;
}
#cpm_aprovala a:hover, #cpm_blocala a:hover {
color:silver;
}
.cpm td#cpm_idfitxer {
text-align:center;
}
.cpm caption {
font-size:1.2em;
font-weight:bold;
}
</style>
<h2>Cançons pendents de moderació</h2>
<p><b>Autors</b>: per motius d'etiqueta i educació, com per exemple evitar enviar els administradors a presó, MusicaLliure.cat disposa d'un equip de moderació que escolta i comprova que les cançons tinguin la llicència adequada. Aquí només podeu veure les vostres, tot i que n'hi pot haver més.</p>
<p><b>Moderadors</b>: cal escoltar total o parcialment la cançó abans d'aprovar-la. Si detecteu que incompleix els requisits de MusicaLliure.cat, bloqueu-la. Si ho dubteu, podeu fer clic al títol o al nom de l'autor per fer-ne una cerca al Google. Només quan estigueu segurs que la cançó pot ser publicada, aproveu-la. Si us equivoqueu, que no us entri el pànic. A la pàgina de la cançó trobareu com blocar-la o despublicar-la.</p>
<table class="cpm">
<caption>Cançons pendents de moderació</caption>
<thead>
<th>ID fitxer</th>
<th>Títol</th>
<th>Autor</th>
<th>Reproductor</th>
<th>Penja-la</th>
<th>Bloca-la</th>
</thead>
<tr tal:repeat="record pendents">
<td id="cpm_idfitxer">
<a href="http://beta.musicalliure.net/media/files/${record/user_name}/${record/upload_id}">${record/files/0/file_id}</a>
</td>
<td>
<a href="http://www.google.com/search?hl=ca&q=%22${record/upload_name}%22">${record/upload_name}</a>
</td>
<td>
<a href="http://www.google.com/search?hl=ca&q=%22${record/user_real_name}%22">${record/user_real_name}</a>
</td>
<td>
<object type="application/x-shockwave-flash" width="200" height="20" data="http://beta.musicalliure.net/cclib/xspf_player/xspf_player_slim.swf?autoload=0&song_url=http://beta.musicalliure.net/media/download/${record/user_name}/${record/files/0/file_id}/${record/files/0/file_name}">
<param name="movie" value="http://beta.musicalliure.net/cclib/xspf_player_slim.swf?autoload=0&song_url=http://beta.musicalliure.net/media/download/${record/user_name}/${record/files/0/file_id}/${record/files/0/file_name}" />
</object>
</td>
<td id="cpm_aprovala">
<a href="http://beta.musicalliure.net/media/files/publish/${record/user_name}/${record/upload_id}">Aprova-la</a>
</td>
<td id="cpm_blocala">
<a href="http://beta.musicalliure.net/media/admin/ban/${record/upload_id}">Bloca-la</a>
</td>
</tr>
</table>
<table class="cpm">
<caption>Cançons blocades</caption>
<thead>
<th>ID fitxer</th>
<th>Títol</th>
<th>Autor</th>
<th>Reproductor</th>
<th>Desbloca-la</th>
</thead>
<tr tal:repeat="record blocades">
<td id="cpm_idfitxer">
<a href="http://beta.musicalliure.net/media/files/${record/user_name}/${record/upload_id}">${record/files/0/file_id}</a>
</td>
<td>
<a href="http://www.google.com/search?hl=ca&q=%22${record/upload_name}%22">${record/upload_name}</a>
</td>
<td>
<a href="http://www.google.com/search?hl=ca&q=%22${record/user_real_name}%22">${record/user_real_name}</a>
</td>
<td>
<object type="application/x-shockwave-flash" width="200" height="20" data="http://beta.musicalliure.net/cclib/xspf_player/xspf_player_slim.swf?autoload=0&song_url=http://beta.musicalliure.net/media/download/${record/user_name}/${record/files/0/file_id}/${record/files/0/file_name}">
<param name="movie" value="http://beta.musicalliure.net/cclib/xspf_player_slim.swf?autoload=0&song_url=http://beta.musicalliure.net/media/download/${record/user_name}/${record/files/0/file_id}/${record/files/0/file_name}" />
</object>
</td>
<td id="cpm_aprovala">
<a href="http://beta.musicalliure.net/media/admin/ban/${record/upload_id}">Desbloca-la</a>
</td>
</tr>
</table>
</div>
And here the cool and easy part:
<?php
function cancons_pendents_de_moderacio() {
//
// retorna les cançons pendents de moderació
//
$c =& CCUploads::GetTable();
$c->AddJoin( new CCFiles(), 'upload_id');
$c->AddJoin( new CCUsers(), 'upload_user');
$c->SetOrder('upload_date','DESC');
return $c->GetRecords('upload_published = 0 and upload_banned = 0');
}
function cancons_blocades() {
//
// Retorna les cançons blocades
//
$c =& CCUploads::GetTable();
$c->AddJoin( new CCFiles(), 'upload_id');
$c->AddJoin( new CCUsers(), 'upload_user');
$c->SetOrder('upload_date','DESC');
return $c->GetRecords('upload_banned = 1');
}
?>