Всем привет. Подскажите пожалуйста кто уже делал или сталкивался, как добавить в модуль "CDR reports" возможность скачивания записи разговора? У меня пока получилось добавить кнопку для скачивания и отдельный столбик "Download":
Саму кнопку функционалом скачивания наделить не получается, работает как прослушать запись. Дополнительную кнопку сделал путем дублирования в /var/www/html/admin/modules/cdr/functions.inc/php:
function cdr_formatRecordingFile($recordingfile, $basename, $id) {
global $REC_CRYPT_PASSWORD;
if ($recordingfile) {
$crypt = new Crypt();
// Encrypt the complete file
$audio = urlencode($crypt->encrypt($recordingfile, $REC_CRYPT_PASSWORD));
$recurl=$_SERVER['PHP_SELF']."?display=cdr&action=cdr_play&recordingpath=$audio";
$playbackRow = $id +1;
//
echo "<td title=\"$basename\"><a href=\"#\" onClick=\"javascript:cdr_play($playbackRow,'$recurl'); return false;\"><img src=\"assets/cdr/images/cdr_sound.png\" alt=\"Call recording\" /></a></td>";
echo "<td title=\"$basename\"><a href=\"#\" onClick=\"javascript:cdr_play($playbackRow,'$recurl'); return false;\"><img src=\"assets/cdr/images/cdr_download.png\" alt=\"Download\" /></a></td>";
} else {
echo "<td></td>";
echo "<td></td>";
Новый столбик "Download" добавил в /var/www/html/admin/modules/cdr/page.cdr.php:
}
if ( $totcallsraw ) { echo "
".("Call Detail Record - Search Returned")." ".$totcallsraw." ".("Calls")."
"; echo "";$i = $h_step - 1;
$id = -1; // tracker for recording index
foreach($results as $row) {
++$id; // Start at table row 1
++$i;
if ($i == $h_step) {
?>
<tr>
<th class="record_col"><?php echo _("Call Date")?></th>
<th class="record_col"><?php echo _("Recording")?></th>
<th class="record_col"><?php echo _("Download")?></th>
<th class="record_col"><?php echo _("System")?></th>
<th class="record_col"><?php echo _("Src Chan.")?></th>
<th class="record_col"><?php echo _("Source")?></th>
<th class="record_col"><?php echo _("DID")?></th>
<th class="record_col"><?php echo _("App.")?></th>
<th class="record_col"><?php echo _("Dest.")?></th>
<th class="record_col"><?php echo _("Dst. Chan.")?></th>
<th class="record_col"><?php echo _("Disposition")?></th>
<th class="record_col"><?php echo _("Duration")?></th>
<th class="record_col"><?php echo _("Userfield")?></th>
<th class="record_col"><?php echo _("Account")?></th>
<th class="img_col"><a href="#CDR" title="Go to the top of the CDR table"><img src="images/scrollup.gif" alt="CDR Table" /></a></th>
<th class="img_col"><a href="#Graph" title="Go to the top of the CDR graph"><img src="images/scrolldown.gif" alt="CDR Graph" /></a></th>
</tr>
<?php
$i = 0;
++$id;
}
Зайдите в "User Panel" с правами админа, и скачивайте ;)
Пароль посмотрите в Settings>>Advanced Settings
Поля:
User Portal Admin Username
User Portal Admin Password
За ответ спасибо в user panel все работает штатно ;), но речь идет не про "User Panel" а про "CDR report".
burn ( 2013-07-25 16:19:07 +0400 )редактироватьВ версиях 2.10 возможности скачивания записей разговоров из CDR Reports не было. Но сделать это можно и несложно. Необходимо в файле functions.inc.php изменить строку 115
echo "<td title=\"$basename\"><a href=\"#\" onClick=\"javascript:cdr_play($playbackRow,'$recurl'); return false;\"><img src=\"assets/cdr/images/cdr_sound.png\" alt=\"Call recording\" /></a></td>";
чтобы она приняла такой вид:
echo "<td title=\"$basename\"><a href=\"#\" onClick=\"javascript:cdr_play($playbackRow,'$recurl'); return false;\"><img src=\"assets/cdr/images/cdr_sound.png\" alt=\"Call recording\" /></a>
<a href=\"".$PHP_SELF."?getRec=".base64_encode($recordingfile)."\" target=\"_blank\"><img src=\"assets/cdr/images/cdr_download.png\" alt=\"Call recording\" /></a></td>";
затем добавить в конец файла до закрывающего php-тега "?>" следующий код:
function recordfile_uri($path) {
$size = filesize($path);
$name = basename($path);
$extension = strtolower(substr(strrchr($name,"."),1));
// This will set the Content-Type to the appropriate setting for the file
$ctype ='';
switch( $extension ) {
case "WAV":
$ctype="audio/x-wav";
break;
case "wav":
$ctype="audio/x-wav";
break;
case "ulaw":
$ctype="audio/basic";
break;
case "alaw":
$ctype="audio/x-alaw-basic";
break;
case "sln":
$ctype="audio/x-wav";
break;
case "gsm":
$ctype="audio/x-gsm";
break;
case "g729":
$ctype="audio/x-g729";
break;
default: //not downloadable
// echo ("<b>404 File not found! foo</b>");
// TODO: what to do if none of the above work?
break ;
}
$fp=fopen($path, "rb");
if ($size && $ctype && $fp) {
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: audio file");
header("Content-Type: " . $ctype);
header("Content-Disposition: attachment; filename=" . $name);
header("Content-Transfer-Encoding: binary");
header("Content-length: " . $size);
$chunksize = 1*(1024*1024);
while (!feof($fp)) {
$buffer = fread($fp, $chunksize);
echo $buffer;
ob_flush();
flush();
}
fclose($fp);
}
}
if(isset($_GET['getRec'])){
recordfile_uri(base64_decode($_GET['getRec']));
die();
}
В таблице CDR Reports рядом со значком громкоговорителя появится значок диска, при нажатии на который можно скачать файл, аналогично тому, как это сделано в новых версиях CDR Reports начиная с 2.11. Код модифицирован с использованием материалов хабрастатьи "Asternic CDR Reports. Прослушивание звонков в FreePBX с ограничением по доступу"
Задан: 2013-07-25 15:29:31 +0400
Просмотрен: 5,417 раз
Обновлен: Dec 01 '15
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
а о чем вопрос? это ж чистое программирование на php.
meral ( 2013-07-25 16:12:57 +0400 )редактироватьВопрос занятный, мне он тоже интересен.
romariosar ( 2013-07-26 09:07:25 +0400 )редактировать