<?php
ConfigModule::registerModule(
ConfigModule_Screensaver::MODID, // ID
Dictionary::translateFileModule('sysconfig', 'config-module', 'screensaver_title'), // Title
Dictionary::translateFileModule('sysconfig', 'config-module', 'screensaver_description'), // Description
Dictionary::translateFileModule('sysconfig', 'config-module', 'group_generic'), // Group
true, // Only one per config?
100 // Sort order
);
class ConfigModule_Screensaver extends ConfigModule
{
const MODID = 'Screensaver';
const VERSION = 1;
protected function generateInternal($tgz, $parent)
{
/* Validate if all data are available */
if (!$this->validateConfig())
return false;
/* Give the Taskmanager the job and create the tgz */
$taskId = 'xscreensaver' . mt_rand() . '-' . microtime(true);
$task = Taskmanager::submit('MakeTarball', array(
'id' => $taskId,
'files' => $this->getFileArray(),
'destination' => $tgz,
), false);
return $task;
}
protected function moduleVersion()
{
return self::VERSION;
}
protected function validateConfig()
{
return isset($this->moduleData['qss']) &&
isset($this->moduleData['texts']) &&
isset($this->moduleData['texts']['text-idle-kill']) &&
isset($this->moduleData['texts']['text-no-timeout']) &&
isset($this->moduleData['texts']['text-shutdown']);
}
public function setData($key, $value)
{
switch ($key) {
case 'qss':
case 'texts':
case 'messages':
break;
default:
return false;
}
$this->moduleData[$key] = $value;
return true;
}
public function allowDownload()
{
return true;
}
/**
* Creates a map with filepath => file content
*
* @return array in the form of Map<String, byte[]>
*/
private function getFileArray()
{
$files = array(
'/opt/openslx/xscreensaver/style.qss' => array_values(unpack('C*', $this->moduleData['qss'])),
'/opt/openslx/xscreensaver/text-idle-kill' => array_values(unpack('C*', $this->wrapHtmlTags('text-idle-kill'))),
'/opt/openslx/xscreensaver/text-no-timeout' => array_values(unpack('C*', $this->wrapHtmlTags('text-no-timeout'))),
'/opt/openslx/xscreensaver/text-shutdown' => array_values(unpack('C*', $this->wrapHtmlTags('text-shutdown'))),
);
/* Create the message.ini from the messages array */
$messages = '';
foreach ($this->moduleData['messages'] as $categorie => $array) {
$messages = $messages . '[' . $categorie . ']' . "\n";
foreach ($array as $key => $message) {
$messages = $messages . $key . '="' . $message . '"' . "\n";
}
}
$files['/opt/openslx/xscreensaver/messages.ini'] = array_values(unpack('C*', $messages));
/* Add locked files if there are any */
if (isset($this->moduleData['texts']['text-idle-kill-locked']))
$files['/opt/openslx/xscreensaver/text-idle-kill-locked'] = array_values(unpack('C*', $this->wrapHtmlTags('text-idle-kill-locked')));
if (isset($this->moduleData['texts']['text-no-timeout-locked']))
$files['/opt/openslx/xscreensaver/text-no-timeout-locked'] = array_values(unpack('C*', $this->wrapHtmlTags('text-no-timeout-locked')));
if (isset($this->moduleData['texts']['text-shutdown-locked']))
$files['/opt/openslx/xscreensaver/text-shutdown-locked'] = array_values(unpack('C*', $this->wrapHtmlTags('text-shutdown-locked')));
return $files;
}
private function wrapHtmlTags($text_name)
{
return '<html><body>' . $this->moduleData['texts'][$text_name] . '</body></html>';
}
}