• Welcome to RadioDJ - Free Radio Automation Software Forum. Please log in or sign up.

RadioDJ REST web panel PHP

Started by Valdis, August 05, 2016, 12:21:22 AM

Valdis

Quote from: djdensma on August 26, 2016, 02:39:35 PM
cant connect to anymore using radiodj monitor. i changed ip from 127.0.0.1 to actual ip. i will  restart radiodj when possible.
Changing IP address in REST server plugin setting takes effect after stopping and starting REST server. No need to restart RadioDJ.

Quote from: djdensma on August 26, 2016, 02:39:35 PM
wondering if my REST server plugin is setup correctly.
Stop wondering and show your settings. And also show settings you have entered in config.php of REST panel.

Quote from: djdensma on August 26, 2016, 02:39:35 PM
i  see 2 folders Plugin_RestServerV1.1 and RadioDJ Monitor (sample)
maybe im running two plugins by mistake?
There should not be a folder named "Plugin_RestServerV1.1" in RadioDJ Plugins folder and RadioDJ will not load plugin DLL files from subfolders. REST server plugin is one file - Plugin_RestServer.dll and its version - 4.0.0.0. It is more likely that you have a folder named "Radio DJ Monitor V1.1".
Both "Radio DJ Monitor V1.1" and "RadioDJ Monitor (sample)" contain a sample application for controlling RadioDJ using REST server plugin.
I am, therefore I think.
I design and develop web apps, and have created few RadioDJ plugins - https://axellence.lv/downloads/

djdensma

#16
sample application does not have to be in plugin folder?

header

Key   Value
Response   HTTP/1.1 200 OK
Date   Fri, 26 Aug 2016 20:10:10 GMT
Server   Apache/2.4.6 (Win32) PHP/5.4.17
X-Powered-By   PHP/5.4.17
Content-Length   7644
Keep-Alive   timeout=5, max=100
Connection   Keep-Alive
Content-Type   text/html

body
[sub]
<!DOCTYPE html>
<html>
<!-- For use with RadioDJ 1.7.5+ with REST Server Plugin -->
<head>
<meta charset="utf-8" />
<title>RadioDJ REST Control Panel</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" type="text/css" href="assets/style.css">
<link rel="icon" type="image/png" sizes="32x32" href="assets/images/REST-panel-icon.png">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<!--
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.js"></script>
-->
</head>

<body>
<div id="statusbar" class="noselect">
<div class="notification" style="display:none;">
</div>
<div class="controls">
<button id="play" title="Play or play next"><span>play</span></button>
<button id="stop" title="Stop playback"><span>stop</span></button>
</div>
<div class="nowPlaying">
<h2 class="title" id="nowPlayingTitle">-</h2>
<h3 class="artist" id="nowPlayingArtist">-</h3>
</div>
<div class="npTimes" id="countdownNP">--:--:--</div>
</div>
<div id="optionsRow" class="noselect">
<button class="button activated" id="autodj" title="Enable/Disable Automatic Playlist Generation">AUTODJ</button>
<button class="button activated" id="assisted" title="Enable/Disable Playlist Auto Advance">AUTOMATED</button>
<button class="button normal" id="clear" title="Clear The Current Playlist">CLEAR</button>
</div>
<div class="playlist-container noselect">
<table id="playlistRows">
</table>
</div>
<div class="log" id="thelog"></div>
<div class="overlay"></div>
<script>
(function($){
$(document).ready(function() {
$('#play').click(function(){
playPlaylistTrack(0);
$(this).blur();
});

$('#stop').click(function(){
playerSTOP();
$(this).blur();
});

$('#autodj').click(function(){
toggleAutoDJ();
$(this).blur();
});

$('#assisted').click(function(){
toggleAssisted();
$(this).blur();
});

$('#clear').click(function(){
clearPlaylist();
$(this).blur();
});

$('#playlistRows').on('click', '.playbutton', function(){
$(this).parents('tr.item').remove();
var trackRow = $(this).parents('tr.item')
var index = trackRow.data('index');
playPlaylistTrack(index);
trackRow.remove();
});

$('#playlistRows').on('click', '.clearbutton', function(){
var trackRow = $(this).parents('tr.item')
var index = trackRow.data('index');
dropPlaylistTrack(index);
trackRow.remove();
});

if(window.console != undefined)
console.log( "RadioDJ REST Web Interface Ready!" );

// Prevent IE from caching AJAX requests
$.ajaxSetup({ cache: false });

var xhrFailed = false;
$( document ).ajaxError(function(event, jqxhr, settings, thrownError) {
// Stop all timers if error occurs
stop();
var message = thrownError;

if( jqxhr.status >= 400 || jqxhr.status === 0 ) {
message = jqxhr.responseJSON != undefined ? jqxhr.responseJSON.error : (jqxhr.responseText? jqxhr.responseText : jqxhr.status+" - "+thrownError);
}

$('.notification').html('<p class="error notice">We have encountered an error. See <a href="#thelog">log messages</a>.</p>').slideDown('fast');

$(".log" ).append('<div class="notice error"><b>Error:</b> '+ message +'</div>');

if(window.console != undefined)
console.log(jqxhr, thrownError);
xhrFailed = true;
});

// Check for connection status and init only if connection works
$.ajax({
url: "status-check.php",
method: 'GET',
success: function(){
init();
}
});

});

var montime, nptime, playingTimer, rdjStatusTimeout;
var isplaying = false;
var timeRemaining = 0;
var trackEndsAt = new Date();
var trackID = 0;

function init() {
rdjStatus();
nowPlayingMonitor();
playlistMonitor();
}

function stop(){
clearTimeout(montime);
clearTimeout(nptime);
clearTimeout(playingTimer);
clearTimeout(rdjStatusTimeout);
resetNowPlaying();
}

function nowPlayingMonitor() {
$.get("np-json.php", function(data){
$('#nowPlayingArtist').html(data.artist);
$('#nowPlayingTitle').html(data.title);
timeRemaining = data.secondsRemaining;
trackEndsAt = new Date(new Date().valueOf()+(data.secondsRemaining*1000));
if(data.secondsRemaining > 0) {
nptime = setTimeout(nowPlayingMonitor, data.secondsRemaining*1000);
}
isplaying = data.isplaying;
count();
playlistMonitor();
});
}

function playlistMonitor() {
clearTimeout(montime);
$.get("plmon.php", function(response){
$('#playlistRows').html(response);
montime = setTimeout(playlistMonitor, 5000);

if(trackID != $('#currentTrack').data('id')) {
nowPlayingMonitor();
}

trackID = $('#currentTrack').data('id');
});
}

function toggleAutoDJ() {
$.get("autodj-toggle.php", function(data) {
if(data.autodj == true) {
$('#autodj').text('AUTODJ').removeClass('deactivated').addClass('activated');
} else {
$('#autodj').text('MANUAL').removeClass('activated').addClass('deactivated');
}
nowPlayingMonitor();
});
}

function toggleAssisted() {
$.get("assisted-toggle.php", function(data) {
if(data.assisted == true) {
$('#assisted').text('ASSISTED').removeClass('activated').addClass('deactivated');
} else {
$('#assisted').text('AUTOMATED').removeClass('deactivated').addClass('activated');;
}
nowPlayingMonitor();
});
}

function clearPlaylist() {
$.get("clear.php", function(){
$('#playlistRows .item').remove();
playlistMonitor();
});
}

function rdjStatus() {
$.get("status-check.php", function(status) {

clearTimeout(rdjStatusTimeout);
rdjStatusTimeout = setTimeout(rdjStatus, 5000);

if(status.autodj) {
$('#autodj').text('AUTODJ').removeClass('deactivated').addClass('activated');
} else {
$('#autodj').text('MANUAL').removeClass('activated').addClass('deactivated');
}

if(status.assisted) {
$('#assisted').text('ASSISTED').removeClass('activated').addClass('deactivated');
} else {
$('#assisted').text('AUTOMATED').removeClass('deactivated').addClass('activated');;
}

});
}

function playPlaylistTrack(playlistid) {
clearTimeout(nptime);
$.get("player-start.php?index="+playlistid, function(data){
if(data.changed) {
nowPlayingMonitor();
}
});
}

function dropPlaylistTrack(playlistid) {
$.get("item-remove.php?index="+playlistid, function(data){
if (data.success) {
playlistMonitor();
} else {
alert('Could not remove track');
}
});
}

function playerSTOP() {
$.get("player-stop.php", function(data){
if(data.changed) {
clearTimeout(nptime);
clearTimeout(playingTimer);
setTimeout(nowPlayingMonitor, 5000);
}
});
}

function setTimer(seconds) {
var formated = '00:00:00';
if(seconds >= 0) {
var time = new Date();
time.setHours(0);
time.setMinutes(0);
time.setSeconds(seconds);
formated = time.toTimeString().split(" ")[0];
}
$('#countdownNP').text(formated);
}

function count() {

// Remove duplicate playingTimer
clearTimeout(playingTimer);

var timeRemaining = (trackEndsAt - new Date())/1000;
setTimer(timeRemaining);

if(timeRemaining > 0) {
playingTimer= setTimeout(count, 1000);
}
}

function resetNowPlaying(){
$('#countdownNP').text('--:--:--');
$('#nowPlayingArtist').text('-');
$('#nowPlayingTitle').text('-');
}
})(jQuery);

</script>
</body>
</html>


Valdis

Quote from: djdensma on August 26, 2016, 10:16:33 PM
sample application does not have to be in plugin folder?
No. It doesn't matter where the sample applications are.

Quote from: djdensma on August 26, 2016, 10:16:33 PM
header

Key Value
Response HTTP/1.1 200 OK
Date Fri, 26 Aug 2016 20:10:10 GMT
Server Apache/2.4.6 (Win32) PHP/5.4.17
X-Powered-By PHP/5.4.17
Content-Length 7644
Keep-Alive timeout=5, max=100
Connection Keep-Alive
Content-Type text/html


body

<!DOCTYPE html>
<html>
<!-- For use with RadioDJ 1.7.5+ with REST Server Plugin -->
<head>
<meta charset="utf-8" />
<title>RadioDJ REST Control Panel</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" type="text/css" href="assets/style.css">
<link rel="icon" type="image/png" sizes="32x32" href="assets/images/REST-panel-icon.png">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<!--
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.js"></script>
-->
</head>

<body>
<div id="statusbar" class="noselect">
<div class="notification" style="display:none;">
</div>
<div class="controls">
<button id="play" title="Play or play next"><span>play</span></button>
<button id="stop" title="Stop playback"><span>stop</span></button>
</div>
<div class="nowPlaying">
<h2 class="title" id="nowPlayingTitle">-</h2>
<h3 class="artist" id="nowPlayingArtist">-</h3>
</div>
<div class="npTimes" id="countdownNP">--:--:--</div>
</div>
<div id="optionsRow" class="noselect">
<button class="button activated" id="autodj" title="Enable/Disable Automatic Playlist Generation">AUTODJ</button>
<button class="button activated" id="assisted" title="Enable/Disable Playlist Auto Advance">AUTOMATED</button>
<button class="button normal" id="clear" title="Clear The Current Playlist">CLEAR</button>
</div>
<div class="playlist-container noselect">
<table id="playlistRows">
</table>
</div>
<div class="log" id="thelog"></div>
<div class="overlay"></div>
<script>
(function($){
$(document).ready(function() {
$('#play').click(function(){
playPlaylistTrack(0);
$(this).blur();
});

$('#stop').click(function(){
playerSTOP();
$(this).blur();
});

$('#autodj').click(function(){
toggleAutoDJ();
$(this).blur();
});

$('#assisted').click(function(){
toggleAssisted();
$(this).blur();
});

$('#clear').click(function(){
clearPlaylist();
$(this).blur();
});

$('#playlistRows').on('click', '.playbutton', function(){
$(this).parents('tr.item').remove();
var trackRow = $(this).parents('tr.item')
var index = trackRow.data('index');
playPlaylistTrack(index);
trackRow.remove();
});

$('#playlistRows').on('click', '.clearbutton', function(){
var trackRow = $(this).parents('tr.item')
var index = trackRow.data('index');
dropPlaylistTrack(index);
trackRow.remove();
});

if(window.console != undefined)
console.log( "RadioDJ REST Web Interface Ready!" );

// Prevent IE from caching AJAX requests
$.ajaxSetup({ cache: false });

var xhrFailed = false;
$( document ).ajaxError(function(event, jqxhr, settings, thrownError) {
// Stop all timers if error occurs
stop();
var message = thrownError;

if( jqxhr.status >= 400 || jqxhr.status === 0 ) {
message = jqxhr.responseJSON != undefined ? jqxhr.responseJSON.error : (jqxhr.responseText? jqxhr.responseText : jqxhr.status+" - "+thrownError);
}

$('.notification').html('<p class="error notice">We have encountered an error. See <a href="#thelog">log messages</a>.</p>').slideDown('fast');

$(".log" ).append('<div class="notice error"><b>Error:</b> '+ message +'</div>');

if(window.console != undefined)
console.log(jqxhr, thrownError);
xhrFailed = true;
});

// Check for connection status and init only if connection works
$.ajax({
url: "status-check.php",
method: 'GET',
success: function(){
init();
}
});

});

var montime, nptime, playingTimer, rdjStatusTimeout;
var isplaying = false;
var timeRemaining = 0;
var trackEndsAt = new Date();
var trackID = 0;

function init() {
rdjStatus();
nowPlayingMonitor();
playlistMonitor();
}

function stop(){
clearTimeout(montime);
clearTimeout(nptime);
clearTimeout(playingTimer);
clearTimeout(rdjStatusTimeout);
resetNowPlaying();
}

function nowPlayingMonitor() {
$.get("np-json.php", function(data){
$('#nowPlayingArtist').html(data.artist);
$('#nowPlayingTitle').html(data.title);
timeRemaining = data.secondsRemaining;
trackEndsAt = new Date(new Date().valueOf()+(data.secondsRemaining*1000));
if(data.secondsRemaining > 0) {
nptime = setTimeout(nowPlayingMonitor, data.secondsRemaining*1000);
}
isplaying = data.isplaying;
count();
playlistMonitor();
});
}

function playlistMonitor() {
clearTimeout(montime);
$.get("plmon.php", function(response){
$('#playlistRows').html(response);
montime = setTimeout(playlistMonitor, 5000);

if(trackID != $('#currentTrack').data('id')) {
nowPlayingMonitor();
}

trackID = $('#currentTrack').data('id');
});
}

function toggleAutoDJ() {
$.get("autodj-toggle.php", function(data) {
if(data.autodj == true) {
$('#autodj').text('AUTODJ').removeClass('deactivated').addClass('activated');
} else {
$('#autodj').text('MANUAL').removeClass('activated').addClass('deactivated');
}
nowPlayingMonitor();
});
}

function toggleAssisted() {
$.get("assisted-toggle.php", function(data) {
if(data.assisted == true) {
$('#assisted').text('ASSISTED').removeClass('activated').addClass('deactivated');
} else {
$('#assisted').text('AUTOMATED').removeClass('deactivated').addClass('activated');;
}
nowPlayingMonitor();
});
}

function clearPlaylist() {
$.get("clear.php", function(){
$('#playlistRows .item').remove();
playlistMonitor();
});
}

function rdjStatus() {
$.get("status-check.php", function(status) {

clearTimeout(rdjStatusTimeout);
rdjStatusTimeout = setTimeout(rdjStatus, 5000);

if(status.autodj) {
$('#autodj').text('AUTODJ').removeClass('deactivated').addClass('activated');
} else {
$('#autodj').text('MANUAL').removeClass('activated').addClass('deactivated');
}

if(status.assisted) {
$('#assisted').text('ASSISTED').removeClass('activated').addClass('deactivated');
} else {
$('#assisted').text('AUTOMATED').removeClass('deactivated').addClass('activated');;
}

});
}

function playPlaylistTrack(playlistid) {
clearTimeout(nptime);
$.get("player-start.php?index="+playlistid, function(data){
if(data.changed) {
nowPlayingMonitor();
}
});
}

function dropPlaylistTrack(playlistid) {
$.get("item-remove.php?index="+playlistid, function(data){
if (data.success) {
playlistMonitor();
} else {
alert('Could not remove track');
}
});
}

function playerSTOP() {
$.get("player-stop.php", function(data){
if(data.changed) {
clearTimeout(nptime);
clearTimeout(playingTimer);
setTimeout(nowPlayingMonitor, 5000);
}
});
}

function setTimer(seconds) {
var formated = '00:00:00';
if(seconds >= 0) {
var time = new Date();
time.setHours(0);
time.setMinutes(0);
time.setSeconds(seconds);
formated = time.toTimeString().split(" ")[0];
}
$('#countdownNP').text(formated);
}

function count() {

// Remove duplicate playingTimer
clearTimeout(playingTimer);

var timeRemaining = (trackEndsAt - new Date())/1000;
setTimer(timeRemaining);

if(timeRemaining > 0) {
playingTimer= setTimeout(count, 1000);
}
}

function resetNowPlaying(){
$('#countdownNP').text('--:--:--');
$('#nowPlayingArtist').text('-');
$('#nowPlayingTitle').text('-');
}
})(jQuery);

</script>
</body>
</html>

Please use code tags (# button) when posting long text chunks.

That is a response from index.php file. I need to see response body and response headers from status-check.php and np-json.php.
You have to reload the page after opening IE F12 Developer tools to see all requests.

This is how the request looks in IE developer tools when request to status-check.php fails, because RadioDJ is not running:

I am, therefore I think.
I design and develop web apps, and have created few RadioDJ plugins - https://axellence.lv/downloads/

starm

Hello,

I use jquery ui to a progress bar

[attachment deleted by admin]

djdensma

status-check.php and np-json.php not showing anything. just waiting on broswer

going to re-download the files again

Valdis

Quote from: starm on August 27, 2016, 10:36:03 AM
Hello,

I use jquery ui to a progress bar
Nice. Are you going to share your improvements?
I am, therefore I think.
I design and develop web apps, and have created few RadioDJ plugins - https://axellence.lv/downloads/

starm

#21
Valdis Hello, attached the pieces of code, the web radiodj PHP script is in SQL for us to switch to another radiodj since we have several remote broadcasts animating with skype ...
I'll have to clean the source code after the share  :hihi: :(

so :
in the index file
<div id="myprogressbar" value="0" max="100" style="width: 100%;height: 20px;">
   <span class="DureeTimes" id="countdownDuree" style="float: left;font-size: 11pt;margin: 0px 0px 0px 10px">00:00:00</span>
   <span class="IntroTimes" id="countdownIntro" style="color:#FFA500; float: left;font-size: 11pt;margin: 0px 0px 0px 50px">00:00:00</span>
   
   <span style="float: right;font-size: 11pt;margin: 0px 20px 0px 0px;" style="height: 5px;" class="npTimes" id="countdownNP">00:00:00</span>
   <span style="color:red; float: right;font-size: 11pt;margin: 0px 45px 0px 0px;" style="height: 5px;" class="OutroTimes" id="countdownOutro">00:00:00</span>
   </div>




countdownDuree
countdownIntro
countdownNP
countdownOutro
div which are working np.php


add at the end:
do not forget to call jquery ui

<script>
   $(document).ready(function(){
      $( "#myprogressbar" ).progressbar({value: 0});
      nowPlayingMonitor();
    playlistMonitor();
    rdjStatus();
   });
</script>

in the javascript
$("#myprogressbar").progressbar( "value", Math.ceil(currentSongPosition * 100 / currentSongLength));

molnarb83

I can enable/disable AutoDJ/Assist. I can see the current song for a second, but after that I got this error message:
Error: simplexml_load_file(): http://62.15.23.12:5555/p?auth=password:1: parser error : xmlParseCharRef: invalid xmlChar value 0

Valdis

Quote from: molnarb83 on August 30, 2016, 12:17:23 PM
I can enable/disable AutoDJ/Assist. I can see the current song for a second, but after that I got this error message:
Error: simplexml_load_file(): http://62.15.23.12:5555/p?auth=password:1: parser error : xmlParseCharRef: invalid xmlChar value 0
That error is caused by invalid XML output from REST server plugin. The XML data contains character reference which is a NULL character and is invalid XML. Please provide the XML output from the URL in the error message.
Chances are that you won't see the error unless a specific track is in the playlist and you'll have to search the database for fields containing NULL characters.
I am, therefore I think.
I design and develop web apps, and have created few RadioDJ plugins - https://axellence.lv/downloads/

Valdis

Quote from: starm on August 29, 2016, 12:04:08 PM
Valdis Hello, attached the pieces of code, the web radiodj PHP script is in SQL for us to switch to another radiodj since we have several remote broadcasts animating with skype ...
What do you mean by "several remote broadcasts animating with skype"?
Please use [ code ] tags when posting code samples.

Quote from: starm on August 29, 2016, 12:04:08 PM
so :
in the index file
<div id="myprogressbar" value="0" max="100" style="width: 100%;height: 20px;">
<span class="DureeTimes" id="countdownDuree" style="float: left;font-size: 11pt;margin: 0px 0px 0px 10px">00:00:00</span>
<span class="IntroTimes" id="countdownIntro" style="color:#FFA500; float: left;font-size: 11pt;margin: 0px 0px 0px 50px">00:00:00</span>

<span style="float: right;font-size: 11pt;margin: 0px 20px 0px 0px;" style="height: 5px;" class="npTimes" id="countdownNP">00:00:00</span>
<span style="color:red; float: right;font-size: 11pt;margin: 0px 45px 0px 0px;" style="height: 5px;" class="OutroTimes" id="countdownOutro">00:00:00</span>
</div>


Why do you use inline styles? That is against all best practice recommendations. Appearance should not be defined in HTML. Besides, you have added multiple style properties, which is invalid HTML.
Also, the value and max properties are not valid for <div> element.

Quote from: starm on August 29, 2016, 12:04:08 PM
countdownDuree
countdownIntro
countdownNP
countdownOutro
div which are working np.php

Adding HTML in "np.php" makes no sense, because that script is not even used by my version of REST panel. I'm using "np-json.php" to return playlist as JSON.

Quote from: starm on August 29, 2016, 12:04:08 PM
add at the end:
do not forget to call jquery ui

<script>
$(document).ready(function(){
$( "#myprogressbar" ).progressbar({value: 0});
nowPlayingMonitor();
    playlistMonitor();
    rdjStatus();
});
</script>

in the javascript
$("#myprogressbar").progressbar( "value", Math.ceil(currentSongPosition * 100 / currentSongLength));
You don't need to add whole jQuery UI to create a progress bar. HTML5 already has <progress> with that functionality and it can be updated with vanilla JavaScript or jQuery.
The last line of code you posted is out of context. Where does it belong and where do you get currentSongPosition and currentSongLength variables.
I am, therefore I think.
I design and develop web apps, and have created few RadioDJ plugins - https://axellence.lv/downloads/

DJAntares

Quote from: molnarb83 on August 30, 2016, 12:17:23 PM
I can enable/disable AutoDJ/Assist. I can see the current song for a second, but after that I got this error message:
Error: simplexml_load_file(): http://62.15.23.12:5555/p?auth=password:1: parser error : xmlParseCharRef: invalid xmlChar value 0

The error that Edge and Chrome reports is:

Error: simplexml_load_file(http://mypubblicip:theportvsrestserver/opt?auth=password&command=StatusAutoDJ): failed to open stream: Connection timed out

The Rest Server work normally, in fact in a web page that I do myself it's accepting all commands

Valdis

Quote from: DJAntares on September 20, 2016, 07:51:21 PM
The error that Edge and Chrome reports is:

Error: simplexml_load_file(http://mypubblicip:theportvsrestserver/opt?auth=password&command=StatusAutoDJ): failed to open stream: Connection timed out

The Rest Server work normally, in fact in a web page that I do myself it's accepting all commands
That error indicates a connection issue from PHP to the REST server and has nothing to do with the browser. Are you sure that the IP address and port number is correct?
I am, therefore I think.
I design and develop web apps, and have created few RadioDJ plugins - https://axellence.lv/downloads/

starm

#27
I also use the first version of Austin we have adapted

in the np.php

$introdecompte= $xml->cueIntro - $xml->Position;
$heureduserveur= time();
if ($introdecompte <= 0)
$introdecompte = 0;



if ($introdecompte <= 0)
{
echo "document.getElementById('countdownIntro').innerHTML = \"00:00:00\";";
}
else{
echo "document.getElementById('countdownIntro').innerHTML = \"".gmdate("H:i:s", round($introdecompte))."\";";
}


DJAntares

#28
Quote from: Valdis on September 21, 2016, 11:30:19 AM
That error indicates a connection issue from PHP to the REST server and has nothing to do with the browser. Are you sure that the IP address and port number is correct?

Yes I'm sure. I use the public's static IP and the REST port on the RDJ machine setted correctaly on my router; in fact i can launch normally all commands with <a> flags in my PHP pages

Copper007

@ Valdis:

Working with it for a while, and it's so perfect for the editors in controlroom here......  :cool:

Kudo's for you and tnx again...

Grtz
Krid  8)
RDJ does it all!

http://www.studio0187.nl