<?php
// This is the files that controls the tutorials
/*
* Load available tutorials (generating $rg_demos)
*/
function rg_demo_list()
{
global $rg_scripts;
$ret = array();
$dir = $rg_scripts . '/root/themes/default/doc/demo/demos';
$r = rg_dir_load($dir);
if ($r === FALSE)
return $ret;
rg_log_debug('list: ' . print_r($r, TRUE));
return $ret;
}
/*
* Load a tutorial
*/
function rg_demo_load($name)
{
global $rg_scripts;
$ret = array();
$dir = $rg_scripts . '/root/themes/default/doc/demo/demos/';
$demo_dir = $dir . $name;
$rpath = @realpath($demo_dir);
if ($rpath === FALSE) {
rg_internal_error('Demo ' . $name . ' does not exists!');
return $ret;
}
if (strncmp($rpath, $dir, strlen($dir)) != 0) {
rg_internal_error('Demo ' . $name . ' is outside the path!');
return $ret;
}
$r = rg_dir_load($rpath);
if ($r === FALSE) {
rg_log('Cannot load demo ' . $name);
return $ret;
}
rg_log_debug('demo dir: ' . print_r($r, TRUE));
return $r;
}
/*
* Tutorials dispatched
*/
function rg_demo($rg, $paras)
{
global $rg_demos;
//rg_log_ml('demo: paras: ' . print_r($paras, TRUE));
if (empty($paras))
return rg_template('doc/demo/list.html', $rg, TRUE /*xss*/);
$demo = empty($paras) ? '' : array_shift($paras);
if (!isset($rg_demos[$demo]))
return rg_template('doc/demo/invalid.html', $rg, TRUE /*xss*/);
$d = $rg_demos[$demo];
$rg['is_demo'] = 1;
$rg['demo']['demo'] = $demo;
$rg['demo']['HTML:demo_name'] = rg_template('doc/demo/demos/' . $demo
. '/name.html', $rg, TRUE /*xss*/);
if (empty($paras)) {
$page = '0';
} else {
$page = empty($paras) ? '' : array_shift($paras);
$page = rg_force_alphanum($page);
}
$pi = FALSE;
foreach ($d as $i => $_pi) {
if (strcmp($page, $_pi['page']) == 0) {
$pi = $_pi;
break;
}
}
if ($pi === FALSE) {
rg_log('Invalid page: ' . $page);
return rg_template('doc/demo/invalid_page.html',
$rg, TRUE /*xss*/);
}
rg_log_debug('pi: ' . print_r($pi, TRUE));
foreach ($pi as $k => $v)
$rg['demo'][$k] = $v;
// toc
$c = array();
foreach ($d as $i => $_pi) {
if (strcmp($page, $_pi['page']) == 0)
$_pi['class'] = 'demo_toc_sel';
else
$_pi['class'] = 'demo_toc_notsel';
$_pi['HTML:page_name'] = rg_template('doc/demo/demos/'
. $demo . '/' . $_pi['page'] . '/name.html',
$rg, TRUE /*xss*/);
$c[] = $_pi;
}
$rg['demo']['HTML:toc'] = rg_template_table('doc/demo/toc', $c, $rg);
$rg['demo']['HTML:page_name'] = rg_template('doc/demo/demos/'
. $demo . '/' . $page . '/name.html', $rg, TRUE /*xss*/);
$rg['demo']['HTML:content'] = rg_template(
'doc/demo/demos/' . $demo . '/' . $page . '/main.html',
$rg, TRUE /*xss*/);
return rg_template('doc/demo/container.html', $rg, TRUE /*xss*/);
}
$rg_demos = array(
'ci-1' => array(
array(
'prev' => '',
'page' => '0',
'next' => 'about'
),
array(
'prev' => '0',
'page' => 'about',
'next' => 'add_hook'
),
array(
'prev' => 'about',
'page' => 'add_hook',
'next' => 'trigger'
),
array(
'prev' => 'add_hook',
'page' => 'trigger',
'next' => 'python1'
),
array(
'prev' => 'trigger',
'page' => 'python1',
'next' => ''
)
),
'config' => array(
array(
'prev' => '',
'page' => '0',
'next' => 'openssh'
),
array(
'prev' => '0',
'page' => 'openssh',
'next' => ''
)
),
'artifacts' => array(
array(
'prev' => '',
'page' => '0',
'next' => 'define'
),
array(
'prev' => '0',
'page' => 'define',
'next' => 'see'
),
array(
'prev' => 'define',
'page' => 'see',
'next' => 'rights'
),
array(
'prev' => 'see',
'page' => 'rights',
'next' => 'blendergraph'
),
array(
'prev' => 'rights',
'page' => 'blendergraph',
'next' => ''
)
),
'packages' => array(
array(
'prev' => '',
'page' => '0',
'next' => 'create'
),
array(
'prev' => '0',
'page' => 'create',
'next' => 'global'
),
array(
'prev' => 'create',
'page' => 'global',
'next' => ''
)
)
);