r2419 - initial implementation of inline editor for text files
authorDenis Ovsienko <infrastation@yandex.ru>
Mon, 9 Feb 2009 21:16:55 +0000 (21:16 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Mon, 9 Feb 2009 21:16:55 +0000 (21:16 +0000)
 - tossed message records around

inc/database.php
inc/interface.php
inc/navigation.php
inc/ophandlers.php
inc/triggers.php

index dfe8d98706c61d5ef594d149ae161d4cfe1fc4e6..ae3ae1eda5caae470c8f8e355b841a9e97120a7b 100644 (file)
@@ -3808,6 +3808,17 @@ function commitUpdateFile ($file_id = 0, $new_name = '', $new_comment = '')
        return '';
 }
 
+// This is a temporary copy of commitReplaceFile() to work around escaping issues.
+function commitUpdateFileText ($file_id = 0, $newtext = '')
+{
+       if ($file_id <= 0)
+               return 'Invalid key in ' . __FUNCTION__;
+
+       global $dbxlink;
+       $query = "UPDATE File SET mtime = NOW(), contents = '${newtext}', size = LENGTH(contents) WHERE id = ${file_id} limit 1";
+       return (FALSE === $dbxlink->exec ($query)) ? ('SQL query failed in ' . __FUNCTION__) : '';
+}
+
 function commitUnlinkFile ($link_id)
 {
        if (useDeleteBlade ('FileLink', 'id', $link_id) != TRUE)
index 59b3983a1157bb07a9282ae00f8fcbc307793167..9e497e7d2964a00b529f9da6d7dbcee7533defaf 100644 (file)
@@ -1324,6 +1324,7 @@ function printLog ($log)
                case $log['v'] == 2:
                        $msginfo = array
                        (
+// records 0~99 with success messages
                                0 => array ('code' => 'success', 'format' => 'Success: %s'),
                                1 => array ('code' => 'success', 'format' => '%u new records done, %u already existed'),
                                2 => array ('code' => 'success', 'format' => 'NATv4 rule was successfully added.'),
@@ -1401,7 +1402,10 @@ function printLog ($log)
                                74 => array ('code' => 'success', 'format' => 'Row %s was added successfully'),
                                75 => array ('code' => 'success', 'format' => 'Row %s was updated successfully'),
                                76 => array ('code' => 'success', 'format' => 'Object %s was deleted successfully'),
+                               77 => array ('code' => 'success', 'format' => 'Row %s was deleted successfully'),
+                               78 => array ('code' => 'success', 'format' => 'File %s saved Ok'),
 
+// records 100~199 with fatal error messages
                                100 => array ('code' => 'error', 'format' => 'Generic error: %s'),
                                101 => array ('code' => 'error', 'format' => 'Port name cannot be empty'),
                                102 => array ('code' => 'error', 'format' => "Error creating user account '%s'"),
@@ -1481,14 +1485,15 @@ function printLog ($log)
                                176 => array ('code' => 'error', 'format' => 'This network already exists'),
                                177 => array ('code' => 'error', 'format' => 'commitUpdateRack() failed'),
                                178 => array ('code' => 'error', 'format' => 'file not found'),
+                               179 => array ('code' => 'error', 'format' => 'Error saving file, all changes lost!'),
 
+// records 200~299 with warnings
                                200 => array ('code' => 'warning', 'format' => 'generic warning: %s'),
                                201 => array ('code' => 'warning', 'format' => 'nothing happened...'),
                                202 => array ('code' => 'warning', 'format' => 'gw: %s'),
                                203 => array ('code' => 'warning', 'format' => 'Port %s seems to be the first in VLAN %u at this switch.'),
                                204 => array ('code' => 'warning', 'format' => 'Check uplink/downlink configuration for proper operation.'),
                                205 => array ('code' => 'warning', 'format' => '%u change request(s) have been ignored'),
-                               206 => array ('code' => 'success', 'format' => 'Row %s was deleted successfully'),
                        );
                        // Handle the arguments. Is there any better way to do it?
                        foreach ($log['m'] as $record)
@@ -5959,4 +5964,17 @@ function getFilePreviewCode ($file)
        }
        return $ret;
 }
+
+function renderTextEditor ($file_id)
+{
+       showMessageOrError();
+       $fullInfo = getFile ($file_id);
+       printOpFormIntro ('updateFileText');
+       echo '<table border=0 align=center>';
+       echo '<tr><td><textarea rows=25 cols=120 name=file_text tabindex=101>' . $fullInfo['contents'] . '</textarea></td></tr>';
+       echo "<tr><td class=submit>";
+       printImageHREF ('SAVE', 'Save changes', TRUE, 102);
+       echo "</td></tr>\n</table></form>\n";
+}
+
 ?>
index 264cc459738e30fb918bcfa39f78540e0773187d..20fdcd08d93ac966b9513441679a1bbc2fb4a756 100644 (file)
@@ -32,7 +32,7 @@ $msgcode['addRow']['OK'] = 74;
 $msgcode['addRow']['ERR'] = 100;
 $msgcode['updateRow']['OK'] = 75;
 $msgcode['updateRow']['ERR'] = 100;
-$msgcode['deleteRow']['OK'] = 206;
+$msgcode['deleteRow']['OK'] = 77;
 $msgcode['deleteRow']['ERR'] = 100;
 
 $page['objects']['title'] = 'Objects';
@@ -621,13 +621,19 @@ $page['file']['autotagloader'] = 'loadFileAutoTags';
 $tab['file']['default'] = 'View';
 $tab['file']['edit'] = 'Properties';
 $tab['file']['tags'] = 'Tags';
+$tab['file']['editText'] = 'Edit text';
 $trigger['file']['tags'] = 'trigger_tags';
+$trigger['file']['editText'] = 'trigger_file_editText';
 $tabhandler['file']['default'] = 'renderFile';
 $tabhandler['file']['edit'] = 'renderFileProperties';
 $tabhandler['file']['tags'] = 'renderEntityTags';
+$tabhandler['file']['editText'] = 'renderTextEditor';
 $ophandler['file']['default']['replaceFile'] = 'replaceFile';
 $ophandler['file']['edit']['updateFile'] = 'updateFile';
 $ophandler['file']['tags']['saveTags'] = 'saveEntityTags';
+$ophandler['file']['editText']['updateFileText'] = 'updateFileText';
+$msgcode['updateFileText']['OK'] = 78;
+$msgcode['updateFileText']['ERR'] = 179;
 
 // This function returns array if page numbers leading to the target page
 // plus page number of target page itself. The first element is the target
index 3e88b824efdeea4f5405c808c43089beade423c0..376184c1a246b668d3fa13d0efd96e00a1752ff0 100644 (file)
@@ -1627,4 +1627,16 @@ function deleteFile ()
        return buildRedirectURL (__FUNCTION__, 'OK', array ($_REQUEST['name']));
 }
 
+function updateFileText ()
+{
+       assertUIntArg ('file_id', __FUNCTION__);
+       assertStringArg ('file_text', __FUNCTION__, TRUE); // it's Ok to save empty
+       $shortInfo = getFileInfo ($_REQUEST['file_id']);
+       // Is this bytes or chars?
+       $error = commitUpdateFileText ($_REQUEST['file_id'], $_REQUEST['file_text']);
+       if ($error == '')
+               return buildRedirectURL (__FUNCTION__, 'OK', array ($shortInfo['name']));
+       return buildRedirectURL (__FUNCTION__, 'ERR', array ($error));
+}
+
 ?>
index 53c64d53beb3ca630c3069aab8c07569122791d7..9b2d91700b3661f7c8e426790219143c31cf386d 100644 (file)
@@ -113,4 +113,11 @@ function trigger_localreports ()
        return count ($localreports) > 0;
 }
 
+function trigger_file_editText ()
+{
+       assertUIntArg ('file_id', __FUNCTION__);
+       $fileInfo = getFileInfo ($_REQUEST['file_id']);
+       return ($fileInfo['type'] == 'text/plain');
+}
+
 ?>