Skip to content

Commit

Permalink
ncp-web: refresh sidebar after launching actions
Browse files Browse the repository at this point in the history
  • Loading branch information
nachoparker committed Apr 4, 2018
1 parent e652777 commit 4f321cc
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 63 deletions.
3 changes: 2 additions & 1 deletion etc/nextcloudpi-config.d/nc-datadir.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ because they do not provide a compatible user/permissions system"
is_active()
{
local SRCDIR
SRCDIR=$( cd /var/www/nextcloud; sudo -u www-data php occ config:system:get datadirectory ) || return 1;
[[ "$( id -u )" != 33 ]] && local SUDO="sudo -u www-data"
SRCDIR=$( $SUDO php /var/www/nextcloud/occ config:system:get datadirectory ) || return 1;
[[ "$SRCDIR" != "/var/www/nextcloud/data" ]]
}

Expand Down
37 changes: 3 additions & 34 deletions ncp-web/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
exit();
}
session_start();

include('sidebar.php');
$modules_path = '/usr/local/etc/nextcloudpi-config.d/';
$l10nDir = "l10n";

Expand Down Expand Up @@ -160,40 +162,7 @@
<div id='overlay' class="hidden"></div>
<div id="app-navigation">
<ul id="ncp-options">
<?php

// fill options with contents from directory
$files = array_diff(scandir($modules_path), array('.', '..', 'nc-wifi.sh', 'nc-info.sh', 'l10n'));

foreach ($files as $file) {

$script = pathinfo($file, PATHINFO_FILENAME);


$txt = file_get_contents($modules_path . $file);

$active = "";
$etc = '/usr/local/etc';
exec("bash -c \"source $etc/library.sh && is_active_script $etc/nextcloudpi-config.d/$script\".sh", $output, $ret);
if ($ret == 0) {
$active = "";
}

echo "<li id=\"$script\" class=\"nav-recent\">";
echo "<a href=\"#\"> {$l->__($script, $script)}$active </a>";

if (preg_match('/^DESCRIPTION="(.*)"$/m', $txt, $matches))
echo "<input id=\"$script-desc\" type=\"hidden\" value=\"{$l->__($matches[1], $script)}\" />";

if (preg_match('/^INFO="(.*)"/msU', $txt, $matches))
echo "<input id=\"$script-info\" type=\"hidden\" value=\"{$l->__($matches[1], $script)}\" />";

if (preg_match('/^INFOTITLE="(.*)"/msU', $txt, $matches))
echo "<input id=\"$script-infotitle\" type=\"hidden\" value=\"{$l->__($matches[1], $script)}\" />";

echo "</li>";
}
?>
<?php echo print_sidebar($l); ?>
</ul>
</div>

Expand Down
8 changes: 8 additions & 0 deletions ncp-web/ncp-launcher.php
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,14 @@
echo ' "suggestions": ' . json_encode( $suggestions ) . ' , ';
echo ' "ret": "' . $ret . '" }';
}
else if ( $_POST['action'] == "sidebar" )
{
require( "sidebar.php" );
// return JSON
echo '{ "token": "' . getCSRFToken() . '",'; // Get new token
echo ' "output": ' . json_encode( print_sidebar( $l ) ) . ' , ';
echo ' "ret": "0" }';
}
}

// License
Expand Down
80 changes: 52 additions & 28 deletions ncp-web/ncp.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,48 @@ function switch_to_section( name )
selectedID = null;
}

function set_sidebar_click_handlers()
{
// Show selected option configuration box
$( 'li' , '#app-navigation' ).on('click', function(e)
{
if ( selectedID == this.get( '.id' ) ) // already selected
return;

if ( confLock ) return;
confLock = true;

if ( window.innerWidth <= 768 )
close_menu();

$( '#' + selectedID ).set('-active');
var that = this;
$.request('post', 'ncp-launcher.php', { action:'cfgreq',
ref:this.get('.id') ,
csrf_token: $( '#csrf-token' ).get( '.value' ) }).then(
function success( result )
{
cfgreqReceive( result, that );
confLock = false;
}).error( errorMsg );
});
}

function reload_sidebar()
{
// request
$.request('post', 'ncp-launcher.php', { action:'sidebar',
csrf_token: $( '#csrf-token' ).get( '.value' ) }).then(
function success( result )
{
var ret = $.parseJSON( result );
if ( ret.token )
$('#csrf-token').set( { value: ret.token } );
$('#ncp-options').ht( ret.output );
set_sidebar_click_handlers();
}).error( errorMsg );
}

function cfgreqReceive( result, item )
{
var ret = $.parseJSON( result );
Expand Down Expand Up @@ -71,29 +113,7 @@ $(function()
textarea[0].scrollTop = textarea[0].scrollHeight;
}, false);

// Show selected option configuration box
$( 'li' , '#app-navigation' ).on('click', function(e)
{
if ( selectedID == this.get( '.id' ) ) // already selected
return;

if ( confLock ) return;
confLock = true;

if ( window.innerWidth <= 768 )
close_menu();

$( '#' + selectedID ).set('-active');
var that = this;
$.request('post', 'ncp-launcher.php', { action:'cfgreq',
ref:this.get('.id') ,
csrf_token: $( '#csrf-token' ).get( '.value' ) }).then(
function success( result )
{
cfgreqReceive( result, that );
confLock = false;
}).error( errorMsg );
});
set_sidebar_click_handlers();

// Launch selected script
$( '#config-button' ).on('click', function(e)
Expand Down Expand Up @@ -145,8 +165,15 @@ $(function()
$('#csrf-token').set( { value: ret.token } );
if ( ret.ret ) // means that the process was launched
{
if ( ret.ret == '0' ) $('#circle-retstatus').set( '+icon-green-circle' );
else $('#circle-retstatus').set( '-icon-green-circle' );
if ( ret.ret == '0' )
{
if( ret.ref && ret.ref == 'nc-update' )
window.location.reload( true );
reload_sidebar();
$('#circle-retstatus').set( '+icon-green-circle' );
}
else
$('#circle-retstatus').set( '-icon-green-circle' );
$('#circle-retstatus').show();
}
else // print error from server instead
Expand All @@ -155,9 +182,6 @@ $(function()
$('#config-button').set('@disabled',null);
$('#loading-gif').hide();
confLock = false;

if( ret.ref && ret.ref == 'nc-update' );
window.location.reload( true );
}).error( errorMsg );
});

Expand Down
61 changes: 61 additions & 0 deletions ncp-web/sidebar.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php
///
// NextcloudPlus Web Panel Side bar
//
// Copyleft 2018 by Ignacio Nunez Hernanz <nacho _a_t_ ownyourbits _d_o_t_ com>
// GPL licensed (see end of file) * Use at your own risk!
//
// More at https://ownyourbits.com/2017/02/13/nextcloud-ready-raspberry-pi-image/
///

// fill options with contents from directory

function print_sidebar( $l /* translations l10n object */ )
{
$modules_path = '/usr/local/etc/nextcloudpi-config.d/';
$files = array_diff(scandir($modules_path), array('.', '..', 'nc-wifi.sh', 'nc-info.sh', 'l10n'));
$ret = "";

foreach ($files as $file) {
$script = pathinfo($file, PATHINFO_FILENAME);
$txt = file_get_contents($modules_path . $file);

$active = "";
$etc = '/usr/local/etc';
exec("bash -c \"source $etc/library.sh && is_active_script $etc/nextcloudpi-config.d/$script\".sh", $output, $retval);
if ($retval == 0)
$active = "";

$ret .= "<li id=\"$script\" class=\"nav-recent\">";
$ret .= "<a href=\"#\"> {$l->__($script, $script)}$active </a>";

if (preg_match('/^DESCRIPTION="(.*)"$/m', $txt, $matches))
$ret .= "<input id=\"$script-desc\" type=\"hidden\" value=\"{$l->__($matches[1], $script)}\" />";

if (preg_match('/^INFO="(.*)"/msU', $txt, $matches))
$ret .= "<input id=\"$script-info\" type=\"hidden\" value=\"{$l->__($matches[1], $script)}\" />";

if (preg_match('/^INFOTITLE="(.*)"/msU', $txt, $matches))
$ret .= "<input id=\"$script-infotitle\" type=\"hidden\" value=\"{$l->__($matches[1], $script)}\" />";

$ret .= "</li>";
}
return $ret;
}
// License
//
// This script is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This script is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this script; if not, write to the
// Free Software Foundation, Inc., 59 Temple Place, Suite 330,
// Boston, MA 02111-1307 USA
?>

0 comments on commit 4f321cc

Please sign in to comment.