Synology-Forum.nl
Tweaks / Addons A.K.A. The Underground => 3rd party apps integratie in DSM => Topic gestart door: wizjos op 24 november 2008, 16:49:04
-
Ik heb maar eens de stoute schoenen aangetrokken en in plaats van een vertaalde 3rd party oplossing te plaatsen nu dan eens eentje van eigen hand.. :mrgreen:
Net als velen erger ik mij al geruime tijd aan de af en toe wel heel kromme vertalingen van Synology... Vandaar mijn besluit om een StringEditor te bouwen.
...en hier is 'ie dan...
(http://94.212.224.81/images/syno/stringeditor.jpg)
Er valt te kiezen uit het bewerken van een drietal bestanden, te weten: /usr/syno/synoman/webman/texts/nld/strings (hierin staan alle systeem strings zoals die bv. in de DSM gebruikt worden), /usr/syno/synoman/webman/texts/nld/mails (alle mailteksten) en /usr/syno/synoman/phpsrc/photo/language/nld.php (de teksten van Photo Station).
Zoals aan het plaatje te zien is, dien je eerst een keuze te maken wélk bestand je wilt bewerken. Indien de keuze valt op strings of mails, dan dien je vervolgens in het geval van strings te kiezen welke sectie je wilt bewerken en in het geval van mails, welk mailbericht. Photo kent deze tussenkeuze niet.
Vervolgens wordt de inhoud van de gekozen optie zichtbaar in het bewerkingsvenster, gevolgd door een tweetal (bij mails overigens maar één) knoppen, Toon en Opslaan.
Bij Strings en Photo kan HTML opmaak worden toegepast, vandaar dat hierbij de knop Toon getoond wordt. In het voorbeeldvenster kan je dan zien wat je opmaakcodes in de praktijk voor effect hebben... Mails worden door Synology's niet als HTML-mail verstuurd; kunnen géén HTML opmaak hebben en dus ontbreekt hier deze knop.
De knop Opslaan zorgt er vervolgens voor dat de wijzigingen worden doorgevoerd.
Voor de volledigheid nog even de volgende zaken:
- bij opslaan wordt het originele bestand opgeslagen als bestandsnaam.bak (dus strings.bak, mails.bak en nld.php.bak).
Iedere druk op de knop Opslaan zorgt voor aanmaak van dit bestand, dus alleen de laatste wijziging is op die manier terug te halen!
- in een aantal teksten staan placeholders voor variabelen, te herkennen aan { en } rondom de naam van de placeholder. Dat je hiermee moet uitkijken lijkt mij voor de hand liggen. Je kunt ze weghalen, maar teksten slaan dan soms nergens meer op en achteraf verzinnen wat er zou hebben gestaan is lastig...
- Wellicht een overbodige, maar de code gaat er van uit dat de eerder genoemde lokaties waar de bestanden staan gewoon benaderbaar zijn.
De oplossing bestaat uit een drietal bestanden: stringeditor.php (het hoofdbestand), helper.php (bewerkingsvenster) en setstring.php (opslaan van wijzigingen). stringeditor.php dien je vanuit application.cfg aan te roepen.
stringeditor.php
<?php
putenv('HTTP_COOKIE='.$_SERVER['HTTP_COOKIE']);
putenv('REMOTE_ADDR='.$_SERVER['REMOTE_ADDR']);
$user=exec('/usr/syno/synoman/webman/modules/authenticate.cgi');
if($user != 'admin'){
header("HTTP/1.0 403 Forbidden");
exit;
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>StringEditor</title>
<script>
function $(e) {return document.getElementById(e);}
function verwijs(keuze, action) {
document.getElementById('legenda').innerHTML = 'Bewerken van waarden uit '+keuze;
document.getElementById('iframe').src='helper.php?keuze='+keuze+'&action='+action
}
</script>
<style>
body,input,td{font:11px Verdana}
.fieldset {
height: 400px;
width: auto;
}
</style>
</head>
<body>
<form id="f" name="f" action="stringeditor.php">
<fieldset><legend>Kies welk bestand u wilt bewerken:</legend><br />
<input type="hidden" id="action" name="action" value="" />
<input type="button" id="type" value="strings" onClick="$('action').value=this.value;submit();">
<input type="button" id="type" value="mails" onClick="$('action').value=this.value;submit();">
<input type="button" id="type" value="photo" onClick="$('action').value=this.value;submit();"><p>
</fieldset>
<?php
$stringspath = "../../../synoman/webman/texts/nld/";
$mailspath = "../../../synoman/webman/texts/nld/";
$photopath = "../../phpsrc/photo/language/";
$file = $stringspath.'strings';
if ($_REQUEST['action'] == '' || $_REQUEST['action'] == 'strings' ) {
$action='strings';
$file = $stringspath.'strings';
} else {
$file = $stringspath.$_REQUEST['action'];
}
if ($_REQUEST['action'] == "photo") {
$file = $photopath."nld.php&keuze=photo";
echo "<p>";
} else {
$bestand = fopen($file,"r");
while(! feof($bestand)) {
$test = fgets($bestand);
if (substr($test,0,1) == "[") {
$headerarray[] = str_replace(chr(10),"",$test);
}
}
fclose($bestand);
echo "<p>";
echo "<fieldset><legend>Kies welk";
if ($action == 'strings') {
echo "e sectie";
} else {
echo " bericht";
}
echo " u wilt bewerken:</legend><br /> ";
echo "<select onchange=".chr(34)."verwijs(this.value,'".$action."');".chr(34).">";
for($i = 0; $i < count($headerarray); $i++) {
$selected = ($headerarray[$i] == $_REQUEST['keuze']) ? " selected='selected'" : "";
echo "<option value='".$headerarray[$i]."'".$selected.">".$headerarray[$i]."</option>";
}
echo "</select><p></fieldset><p>";
}
if ($_REQUEST['keuze'] == "" ) $keuze = $headerarray[0];
echo "<fieldset class='fieldset'><legend id='legenda'>Bewerkingsvenster</legend><br /> ";
echo "<iframe id='iframe' src='helper.php?keuze=".$keuze."&action=".$action."' height='90%' width='91%'></iframe><p></fieldset>";
echo "<fieldset><legend>Voorbeeld</legend><br /> ";
echo "<div id='voorbeeld'></div><p></fieldset>";
if ($action == "photo") {
if (strlen($_REQUEST['keuze']) > 1) echo "<script>verwijs('".$_REQUEST['keuze']."','".$_REQUEST['action']."');</script>";
}
?>
</body></html>
helper.php
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>StringEditor</title></head><body>
<style>body,input,td, textarea{font:11px Verdana}
</style>
<script language="javascript" type="text/javascript">
function changeDivHTML(welketext)
{
parent.document.getElementById('voorbeeld').innerHTML = document.getElementById(welketext).value;
}
function save(welketext, welkitem, file, keuze, actie)
{
if (welkitem == 'subject') {
document.getElementById('item').value = document.getElementById(welkitem).value;
} else {
document.getElementById('item').value = document.getElementById(welkitem).innerHTML;
}
document.getElementById('tekst').value = document.getElementById(welketext).value;
document.getElementById('action').value = actie;
document.getElementById('file').value = file;
document.getElementById('keuze').value = keuze;
document.helper.submit();
}
</script>
<form action="setstring.php" method="post" name="helper">
<input type="hidden" name="action" id="action" value="" >
<input type="hidden" name="item" id="item" value="" >
<input type="hidden" name="tekst" id="tekst" value="" >
<input type="hidden" name="file" id="file" value="" >
<input type="hidden" name="keuze" id="keuze" value="" >
<?php
$stringspath = "../../../synoman/webman/texts/nld/";
$mailspath = "../../../synoman/webman/texts/nld/";
$photopath = "../../phpsrc/photo/language/";
$action = $_REQUEST['action'];
if ($action == "strings") {
$file = $stringspath.$action;
} elseif ($action == "mails") {
$file = $mailspath.$action;
} else {
$file = $photopath."nld.php";
}
$keuze = $_REQUEST['keuze'];
if ($action == "photo") {
$array=file($file);
$teller = 0;
echo "";
foreach($array as $waarde) {
if ($teller >= 2) {
$positie = stripos($waarde,"=",1);
$item = substr($waarde,0,$positie);
$inhoud= str_replace("';","",substr(substr($waarde,$positie+1),2));
$inhoud = str_replace("'","'",$inhoud);
echo "<b><div id='div".$teller."'>".$item.":</div></b>";
echo "<input type='text' id='text".$teller."' size='140' value='".$inhoud."'> ";
echo "<input type='button' value='Toon' onclick=changeDivHTML('text".$teller."')> ";
echo "<input type='button' value='Opslaan' onclick=save('text".$teller."','div".$teller."','".$file."','".$keuze."','".$action."')><p>";
}
$teller++;
}
echo "<br />";
} else {
if ($action == "strings") {
echo "Bewerken van waarden uit ".$keuze."<p>";
} else {
echo "Bewerken van bericht ".$keuze."<p>";
}
$temparray=file($file);
$x=count($temparray);
for ($y=0;$y<$x;$y++){
$temp = $temparray[$y];
if (substr($temp,0,1) == "[") {
$hulp = str_replace(chr(10),"",$temp);
$header[] = $temp;
$array[$hulp][] = $temp;
} else {
$array[$hulp][] = $temp;
}
}
$teller = 0;
foreach($array[$keuze] as $key => $waarde) {
if ($action == "strings") {
if ($teller > 0) {
if (str_replace(chr(10),"",$waarde) != "") {
$positie = stripos($waarde,"=",1);
$item = substr($waarde,0,$positie);
$inhoud= str_replace(chr(34),"",trim(substr($waarde,$positie+1)));
echo "<b><div id='div".$teller."'>".$item.":</div></b>";
if (strlen($inhoud) >= 140) {
echo "<textarea id='text".$teller."' cols='139' rows='7'>".$inhoud."</textarea> ";
} else {
echo "<input type='text' id='text".$teller."' size='140' value='".$inhoud."'> ";
}
echo "<input type='button' value='Toon' onclick=changeDivHTML('text".$teller."')> ";
echo "<input type='button' value='Opslaan' onclick=save('text".$teller."','div".$teller."','".$file."','".$keuze."','".$action."')><p>";
echo "<br />";
}
}
} else {
if ($waarde != $keuze.chr(10)) {
if (substr($waarde,0,8) == "Subject:") {
$subject = str_replace("Subject: ","",$waarde);
} else {
if ($teller != count($array[$keuze])-1) {
$tekst .= $waarde;
}
}
}
}
$teller++;
}
if ($action == "mails") {
echo "<b>Onderwerp:</b><br />";
echo "<input type='text' id='subject' size='140' value='".$subject."'><br />";
echo "<b>Bericht:</b><br />";
echo "<textarea id='mailtext' cols='139' rows='16'>".$tekst."</textarea> ";
echo "<input type='button' value='Opslaan' onclick=save('mailtext','subject','".$file."','".$keuze."','".$action."')>";
}
}
?>
</body></html>
setstring.php
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>StringEditor</title></head><body>
<style>body,input,td, textarea{font:11px Verdana}
</style>
<?php
function describeAnidatedArray($array) {
$buf = '';
foreach($array as $key => $value) {
if(is_array($value)) {
$buf .= describeAnidatedArray($value);
} else {
$buf .= $value;
}
}
return $buf;
}
function array_insert(&$xarray, $insert, $position = -1) {
$position = ($position == -1) ? (count($xarray)) : $position ;
if($position != (count($xarray))) {
$ta = $xarray;
for($i = $position; $i < (count($xarray)); $i++) {
if(!isset($xarray[$i])) {
die(print_r($xarray, 1)."rnInvalid array: All keys must be numerical and in sequence.");
}
$tmp[$i+1] = $xarray[$i];
unset($ta[$i]);
}
$ta[$position] = $insert;
$xarray = $ta + $tmp;
} else {
$xarray[$position] = $insert;
}
ksort($xarray);
return true;
}
function array_delete(&$ary,$key_to_be_deleted)
{
$new = array();
if(is_string($key_to_be_deleted)) {
if(!array_key_exists($key_to_be_deleted,$ary)) {
return;
}
foreach($ary as $key => $value) {
if($key != $key_to_be_deleted) {
$new[$key] = $value;
}
}
$ary = $new;
}
if(is_array($key_to_be_deleted)) {
foreach($key_to_be_deleted as $del) {
array_delete(&$ary,$del);
}
}
}
$stringspath = "../../../synoman/webman/texts/nld/";
$mailspath = "../../../synoman/webman/texts/nld/";
$photopath = "../../phpsrc/photo/language/";
$item=trim(str_replace(":","",$_REQUEST['item']));
$tekst=$_REQUEST['tekst'];
$keuze=$_REQUEST['keuze'];
if ($action == "photo") {
$file = $photopath."nld.php";
$temparray=file($file);
file_put_contents($file.".bak", $temparray);
$teller = 0;
foreach($temparray as $waarde) {
$positie = stripos($waarde,"=",1);
$tezoekenitem = substr($waarde,0,$positie-1);
if ($tezoekenitem == $item) {
echo "String gevonden, oude sting is:<br />";
echo $waarde."<br />";
echo "nieuwe string wordt:<br /><b>";
echo $item.chr(9)."=".chr(9).chr(39).addslashes($tekst).chr(39).";".chr(10)."</b><p>";
$temparray[$teller] = $item.chr(9)."=".chr(9).chr(39).addslashes($tekst).chr(39).";".chr(10);
}
$teller++;
}
} else {
$file = $_REQUEST['file'];
$temparray=file($file);
file_put_contents($file.".bak", $temparray);
$x=count($temparray);
for ($y=0;$y<$x;$y++){
$temp = $temparray[$y];
if (substr($temp,0,1) == "[") {
$hulp = str_replace(chr(10),"",$temp);
$array[$hulp][] = $temp;
} else {
$array[$hulp][] = $temp;
if ($_REQUEST['action'] == "strings") {
if ($hulp == $keuze) {
if (substr($temp,0,strlen($item)+1) == $item.chr(9)) {
echo "String gevonden, oude sting is:<br />";
echo $temp."<br />";
echo "nieuwe string wordt:<br /><b>";
echo $item.chr(9)."=".chr(9).chr(34).$tekst.chr(34).chr(10)."</b><p>";
$temparray[$y] = $item.chr(9)."=".chr(9).chr(34).$tekst.chr(34).chr(10);
}
}
}
}
}
if ($_REQUEST['action'] == "mails") {
echo "Mail gevonden, oude mail is:<br />";
$x=count($array[$keuze]);
for ($y=0;$y<$x;$y++){
print $array[$keuze][$y]."<br />";
}
$mailhulp = explode(chr(10),$tekst);
$maantal = count($mailhulp)+3;
$kaantal = count($array[$keuze]);
if ($kaantal < $maantal) {
$x = $maantal - $kaantal;
for ($y=0;$y<$x;$y++){
array_insert($array[$keuze],chr(10));
}
} else {
array_splice($array[$keuze],$maantal);
}
$x=count($array[$keuze]);
for ($y=0;$y<$x;$y++){
$temp = str_replace(chr(13),"",$array[$keuze][$y]);
if ($y == 0) {
$array[$keuze][$y] = $keuze.chr(10);
$array[$keuze][$y+1] = "Subject: ".$item.chr(10);
$array[$keuze][$y+2] = chr(10);
$y=2;
} else {
$array[$keuze][$y] = str_replace(chr(13),"",$mailhulp[$y-3]).chr(10);
}
}
$kaantal = count($array[$keuze])-1;
$x = 0;
if ($array[$keuze][$kaantal-1] != chr(10)) $x++;
if ($array[$keuze][$kaantal] != chr(10)) $x++;
for ($y=0;$y<$x;$y++){
array_insert($array[$keuze],chr(10));
}
unset($temparray);
$temparray = explode(chr(10),describeAnidatedArray($array));
$x=count($temparray);
for ($y=0;$y<$x;$y++){
if (strpos($temparray[$y],chr(10)) == false) $temparray[$y] .= chr(10);
}
echo "nieuwe mail wordt:<br /><b>";
$x=count($mailhulp);
for ($y=0;$y<$x;$y++){
print $mailhulp[$y]."<br />";
}
echo "</b>";
}
}
file_put_contents($file, $temparray);
echo "<p>";
echo "<input type='submit' name='Submit' value='Keer terug naar beginscherm' onClick=parent.window.location.href='stringeditor.php?action=".$_REQUEST['action']."&keuze=".$keuze."'>";
?>
</body></html>
Bijbehorende icoontjes:
(http://94.212.224.81/images/syno/string16.png)
(http://94.212.224.81/images/syno/string32.png)
Mochten er nog opmerkingen /verbeteringen / vragen zijn, dan hoor ik het graag :mrgreen:
Alles gaat uiteraard op eigen risico :mrgreen: Zorg ondanks de ingebouwde veiligheidskopie voor de nodige extra zakerheid en maak voordat je begint te editen sowiezo eerst even een kopie van de drie bestanden op een aparte plek.
Veel plezier ermee!
Wizjos
-
Bijbehorende icoontjes:
Afbeelding
Afbeelding
lol
Mooie toevoeging!
-
lol
Mooie toevoeging!
Tja Bjorn,
Het oog wil ook wat..... :mrgreen:
Dank voor je waardering!
Wizjos
-
Zou je wat simpeler kunnen uitleggen hoe je deze goede oplossing moet "installeren"?
De oplossing bestaat uit een drietal bestanden: stringeditor.php (het hoofdbestand), helper.php (bewerkingsvenster) en setstring.php (opslaan van wijzigingen). stringeditor.php dien je vanuit application.cfg aan te roepen.
Zegt mij zo direct niet zoveel... :oops:
(hoe krijg jij trouwens programma's in de 3rd party applications als icoontje? zoals SABNZBD bijvoorbeeld? bij mij verschijnt die niet in dat lijstje, terwijl ik deze wel heb geinstalleerd)
-
Tinusz,
Eeh, tja, echt heel simpel zal het vrees ik toch niet helemaal worden... Heb je al wel eens de 3rd party apps handleiding (http://www.synology-forum.nl/viewtopic.php?f=83&t=2182) doorgenomen? Wellicht dat dan veel duidelijk wordt :mrgreen:
Via de link bij punt 4 kom je bv. bij de pdf van Synology waarin precies wordt uitgelegd hoe je de icoontjes via een entry in application.cfg toevoegt:
icon_16 = images/icon16.png
icon_32 = images/icon32.png
Indien je hierna nog met vragen zit... lees ik het wel!
Groet,
Wizjos
-
Hallo Wizjos,
het bewerken van de File Station teksten zou ook erg handig zijn :mrgreen:
Ik kan ze wel vinden en bewerken maar met dit progje zou het eenvoudiger zijn. :D
:?:
Groeten,
Grafcom
-
Hallo Wizjos,
volgens mij moet je deze ook eens updaten voor DSM2.1 :mrgreen:
Groet,
Grafcom
-
Grafcom,
Als jij mij dan gaat sponsoren, dan met alle plezier :mrgreen:
Helaas heb ik een oude CS-406... Daar is geen bijbehorende firmware voor uitgebracht... :evil:
Wordt nog wel even een heel eindje sparen anders, ben ik bang.... :(
Groet,
Wizjos
-
Grafcom,
Je gebeden zijn, hoop ik, verhoord... Op mijn site (http://synowiz.homeip.net/) vind je een geheel nieuwe versie...
Ik hoop dat je er mee uit de voeten kunt... Mochten er nog meer teksten zijn, meld mij dat dan even :D
Groet,
Wizjos
-
Wizjos,
Je gebeden zijn, hoop ik, verhoord... Op mijn site (http://synowiz.homeip.net/) vind je een geheel nieuwe versie...
hartelijk dank ! :D
Werkt perfect.
Groet,
Grafcom
-
Hi Leute
ik heb de berichtgeving aangezet en nu krijg ik via mail, na veranderen password, het volgende mailtje:
"Ihr Kennwort auf sisal_synology wurde wie folgt geändert:"
niet kunnen vinden, anders dan op duitse forum, die daar verder niet op in gaat
ik kom er maar niet achter waar dit in staat om te veranderen met stringeditor
ik ben niet heel erg bekend met linux commands als grep, maar elke aanwijzing is welkom
:?
-
Ha ZdDog,
Goed te zien dat je alles aan de praat hebt!
Deze is ook te vinden... Kijk via de stringeditor in de sectie Mails voor de een na onderste optie bij 'Kies welk bericht u wilt bewerken:'. Deze luidt: 'UserChangePassword'. Daar staat idd. standaard een duitse tekst.
Succes!
Wizjos
-
Ha Wizjos, danke vielmals ;)
die wittebroodsweken duren te kort nietwaar?
idd het loopt allemaal en er komen steeds meer bij
even offtopic:
ik heb nu: phpInfo,NewCron,3rd party manager,StringEditor,PhpMyAdmin,PhpMyIPKG,Current Connections,PhpSysInfo(beta, tabellen lopen over),Config File Editor,Service Switch,PhpMyBackupPro
(http://wizjos.endofinternet.net/images/syno/3rdpartynew.jpg)
sysinfo / systeminfo : wat verschilt het met phpsysinfo? staat het op jouw site?
commands?
editor?
allemaal interessant...can you link me up please? :P
gr zdDog
-
Ha zdDog,
Ja, wittebrood blijkt snel oud te worden... Straks maar weer naar de bakker :mrgreen:
Goed te lezen dat idd. alles werkt! Je hebt goed naar de afbeelding gekeken :) Er staat inderdaad nog meer. Niet allemaal even publicabel (meer) overigens...
Mar goed, als antwoord op je vraag:
- Sysinfo vind je terug onder Systeminfo op basis van Coreutils (http://www.synology-forum.nl/viewtopic.php?f=83&t=2189).
- Systeminfo = phpSysInfo.
- Commands vind je terug onder Linux Command reference (http://www.synology-forum.nl/viewtopic.php?f=83&t=2198)
Kun je weer even vooruit :mrgreen:
Groet,
Wizjos
-
thanks....zal er snel mee aan de slag gaan
gr zdDog