aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMario <mario@mariovavti.com>2017-09-15 22:17:18 +0200
committerMario <mario@mariovavti.com>2017-09-15 22:17:18 +0200
commit373651c3dbb9d6d79b9c5a1519a7ef336f2d615e (patch)
treed71bc0bb8ab6880f10df4684296189d401e96171
parent663802e6992858c026a4e9b325575bc064cc687d (diff)
downloadvolse-hubzilla-373651c3dbb9d6d79b9c5a1519a7ef336f2d615e.tar.gz
volse-hubzilla-373651c3dbb9d6d79b9c5a1519a7ef336f2d615e.tar.bz2
volse-hubzilla-373651c3dbb9d6d79b9c5a1519a7ef336f2d615e.zip
implement wiki editing
-rw-r--r--Zotlabs/Lib/NativeWiki.php51
-rw-r--r--Zotlabs/Module/Wiki.php35
-rw-r--r--view/css/mod_wiki.css10
-rw-r--r--view/js/main.js8
-rw-r--r--view/tpl/wikilist.tpl26
5 files changed, 90 insertions, 40 deletions
diff --git a/Zotlabs/Lib/NativeWiki.php b/Zotlabs/Lib/NativeWiki.php
index 39952ed5f..6d4dd888b 100644
--- a/Zotlabs/Lib/NativeWiki.php
+++ b/Zotlabs/Lib/NativeWiki.php
@@ -19,17 +19,17 @@ class NativeWiki {
if($wikis) {
foreach($wikis as &$w) {
- $w['allow_cid'] = acl2json($w['allow_cid']);
- $w['allow_gid'] = acl2json($w['allow_gid']);
- $w['deny_cid'] = acl2json($w['deny_cid']);
- $w['deny_gid'] = acl2json($w['deny_gid']);
+ $w['json_allow_cid'] = acl2json($w['allow_cid']);
+ $w['json_allow_gid'] = acl2json($w['allow_gid']);
+ $w['json_deny_cid'] = acl2json($w['deny_cid']);
+ $w['json_deny_gid'] = acl2json($w['deny_gid']);
$w['rawName'] = get_iconfig($w, 'wiki', 'rawName');
$w['htmlName'] = escape_tags($w['rawName']);
$w['urlName'] = urlencode(urlencode($w['rawName']));
$w['mimeType'] = get_iconfig($w, 'wiki', 'mimeType');
$w['typelock'] = get_iconfig($w, 'wiki', 'typelock');
- $w['lock'] = (($w['item_private'] || $w['allow_cid'] || $w['allow_gid'] || $w['deny_cid'] || $w['deny_gid']) ? true : false);
+ $w['lockstate'] = (($w['allow_cid'] || $w['allow_gid'] || $w['deny_cid'] || $w['deny_gid']) ? 'lock' : 'unlock');
}
}
// TODO: query db for wikis the observer can access. Return with two lists, for read and write access
@@ -107,6 +107,47 @@ class NativeWiki {
}
}
+ function update_wiki($channel_id, $observer_hash, $arr, $acl) {
+
+ $w = self::get_wiki($channel_id, $observer_hash, $arr['resource_id']);
+ $item = $w['wiki'];
+
+ if(! $item) {
+ return array('item' => null, 'success' => false);
+ }
+
+ $x = $acl->get();
+
+ $item['allow_cid'] = $x['allow_cid'];
+ $item['allow_gid'] = $x['allow_gid'];
+ $item['deny_cid'] = $x['deny_cid'];
+ $item['deny_gid'] = $x['deny_gid'];
+ $item['item_private'] = intval($acl->is_private());
+
+ if($item['title'] !== $arr['updateRawName']) {
+ $update_title = true;
+ $item['title'] = $arr['updateRawName'];
+ }
+
+ $update = item_store_update($item);
+
+ $item_id = $update['item_id'];
+
+ if($update['item_id']) {
+ info( t('Wiki updated successfully'));
+ if($update_title) {
+ // Update the wiki name information using iconfig.
+ if(! set_iconfig($update['item_id'], 'wiki', 'rawName', $arr['updateRawName'], true)) {
+ return array('item' => null, 'success' => false);
+ }
+ }
+ return array('item' => $update['item'], 'item_id' => $update['item_id'], 'success' => $update['success']);
+ }
+ else {
+ return array('item' => null, 'success' => false);
+ }
+ }
+
static public function sync_a_wiki_item($uid,$id,$resource_id) {
diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php
index 013ffef70..6055b0b38 100644
--- a/Zotlabs/Module/Wiki.php
+++ b/Zotlabs/Module/Wiki.php
@@ -152,7 +152,7 @@ class Wiki extends \Zotlabs\Web\Controller {
$content = html_entity_decode($iv['body'],ENT_COMPAT,'UTF-8');
}
elseif($iv['mimetype'] === 'text/markdown') {
- $content = html_entity_decode(\Zlib\MarkdownSoap::unescape($iv['body']),ENT_COMPAT,'UTF-8');
+ $content = html_entity_decode(Zlib\MarkdownSoap::unescape($iv['body']),ENT_COMPAT,'UTF-8');
}
$fname = get_iconfig($iv['id'],'nwikipage','pagetitle') . Zlib\NativeWikiPage::get_file_ext($iv);
$zip->addFromString($fname,$content);
@@ -185,6 +185,7 @@ class Wiki extends \Zotlabs\Web\Controller {
switch(argc()) {
case 2:
$wikis = Zlib\NativeWiki::listwikis($owner, get_observer_hash());
+
if($wikis) {
$o .= replace_macros(get_markup_template('wikilist.tpl'), array(
'$header' => t('Wikis'),
@@ -473,36 +474,40 @@ class Wiki extends \Zotlabs\Web\Controller {
goaway('/' . argv(0) . '/' . $nick . '/');
}
- if($wiki['urlName'] === '') {
+ $arr = [];
+
+ $arr['urlName'] = urlencode(urlencode($_POST['origRawName']));
+
+ if($_POST['updateRawName'])
+ $arr['updateRawName'] = $_POST['updateRawName'];
+
+ if(($arr['urlName'] || $arr['updateRawName']) === '') {
notice( t('Error updating wiki. Invalid name.') . EOL);
goaway('/wiki');
return; //not reached
}
- $exists = Zlib\NativeWiki::exists_by_name($owner['channel_id'], $wiki['urlName']);
- if($exists['id']) {
+ $wiki = Zlib\NativeWiki::exists_by_name($owner['channel_id'], $arr['urlName']);
+
+ if($wiki['resource_id']) {
+
+ $arr['resource_id'] = $wiki['resource_id'];
- // Get ACL for permissions
$acl = new \Zotlabs\Access\AccessList($owner);
$acl->set_from_array($_POST);
- $r = Zlib\NativeWiki::create_wiki($owner, $observer_hash, $wiki, $acl);
+
+ $r = Zlib\NativeWiki::update_wiki($owner['channel_id'], $observer_hash, $arr, $acl);
if($r['success']) {
Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$r['item_id'],$r['item']['resource_id']);
- $homePage = Zlib\NativeWikiPage::create_page($owner['channel_id'],$observer_hash,'Home', $r['item']['resource_id'], $wiki['mimeType']);
- if(! $homePage['success']) {
- notice( t('Wiki created, but error creating Home page.'));
- goaway(z_root() . '/wiki/' . $nick . '/' . $wiki['urlName']);
- }
- Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$homePage['item_id'],$r['item']['resource_id']);
- goaway(z_root() . '/wiki/' . $nick . '/' . $wiki['urlName'] . '/' . $homePage['page']['urlName']);
+ goaway(z_root() . '/wiki/' . $nick);
}
else {
- notice( t('Error creating wiki'));
+ notice( t('Error updating wiki'));
goaway(z_root() . '/wiki');
}
}
-
+ goaway(z_root() . '/wiki');
}
// Delete a wiki
diff --git a/view/css/mod_wiki.css b/view/css/mod_wiki.css
index b44ec4fd8..a16ab47c5 100644
--- a/view/css/mod_wiki.css
+++ b/view/css/mod_wiki.css
@@ -38,14 +38,8 @@
padding: 7px 3px 7px 10px;
}
-#wikis-index th:nth-child(3),
-#wikis-index td:nth-child(3){
- padding: 7px 10px 7px 7px;
- white-space: nowrap;
-}
-
-#wikis-index th:nth-child(4),
-#wikis-index td:nth-child(4){
+#wikis-index th:nth-child(6),
+#wikis-index td:nth-child(6){
padding: 7px 10px 7px 7px;
}
diff --git a/view/js/main.js b/view/js/main.js
index cdba8a25d..919eb282a 100644
--- a/view/js/main.js
+++ b/view/js/main.js
@@ -262,6 +262,14 @@ function openClose(theID) {
}
}
+function openCloseTR(theID) {
+ if(document.getElementById(theID).style.display == "table-row") {
+ document.getElementById(theID).style.display = "none";
+ } else {
+ document.getElementById(theID).style.display = "table-row";
+ }
+}
+
function closeOpen(theID) {
if(document.getElementById(theID).style.display == "none") {
document.getElementById(theID).style.display = "block";
diff --git a/view/tpl/wikilist.tpl b/view/tpl/wikilist.tpl
index 51d24c195..c706ec27d 100644
--- a/view/tpl/wikilist.tpl
+++ b/view/tpl/wikilist.tpl
@@ -40,32 +40,34 @@
<tr class="wikis-index-row">
<td><a href="/wiki/{{$channel}}/{{$wiki.urlName}}/Home" title="{{$view}}"{{if $wiki.active}} class="active"{{/if}}>{{$wiki.title}}</a></td>
<td>{{if $wiki.typelock}}{{$wiki.mimeType}}{{else}}{{$unlocked}}{{/if}}</td>
- <td class="wiki-index-tool dropdown">
- {{if $wiki.lock}}
- <button class="btn btn-default btn-sm" onclick="lockview('item',{{$wiki.id}});"><i class="fa fa-lock lockview" data-toggle="dropdown" ></i></button>
+ <td class="wikis-index-tool"><i class="fa fa-pencil" onclick="openCloseTR('wikis-index-edit-{{$wiki.id}}')"></i></td>
+ <td class="wikis-index-tool dropdown">
+ {{if $wiki.lockstate == 'lock'}}
+ <i class="fa fa-lock lockview" data-toggle="dropdown" onclick="lockview('item',{{$wiki.id}});"></i>
<ul id="panel-{{$wiki.id}}" class="lockview-panel dropdown-menu dropdown-menu-right"></ul>
{{/if}}
</td>
- <td class="wiki-index-tool"><button class="btn btn-default btn-sm" onclick="wiki_download_wiki('{{$wiki.resource_id}}'); return false;"><i class="fa fa-download fakelink" ></i></button></td>
+ <td class="wikis-index-tool"><i class="fa fa-download" onclick="wiki_download_wiki('{{$wiki.resource_id}}'); return false;"></i></td>
{{if $owner}}
- <td>&nbsp;</td>
- <td><button class="btn btn-default btn-sm" onclick="wiki_delete_wiki('{{$wiki.title}}', '{{$wiki.resource_id}}'); return false;"><i class="fa fa-trash-o drop-icons" ></i></button></td>
+ <td><i class="fa fa-trash-o drop-icons" onclick="wiki_delete_wiki('{{$wiki.title}}', '{{$wiki.resource_id}}'); return false;"></i></td>
{{/if}}
</tr>
- <tr>
- <td colspan="4">
- <form id="edit-wiki-form-{{$wiki.id}}" method="post" action="wiki/{{$channel}}/update/wiki" class="acl-form" data-form_id="edit-wiki-form-{{$wiki.id}}" data-allow_cid='{{$wiki.allow_cid}}' data-allow_gid='{{$wiki.allow_gid}}' data-deny_cid='{{$wiki.deny_cid}}' data-deny_gid='{{$wiki.deny_gid}}'>
+ {{if $owner}}
+ <tr id="wikis-index-edit-{{$wiki.id}}" style="display:none">
+ <td colspan="6">
+ <form id="edit-wiki-form-{{$wiki.id}}" method="post" action="wiki/{{$channel}}/update/wiki" class="acl-form" data-form_id="edit-wiki-form-{{$wiki.id}}" data-allow_cid='{{$wiki.json_allow_cid}}' data-allow_gid='{{$wiki.json_allow_gid}}' data-deny_cid='{{$wiki.json_deny_cid}}' data-deny_gid='{{$wiki.json_deny_gid}}'>
+ <input type="hidden" name="origRawName" value="{{$wiki.title}}">
+ {{include file="field_input.tpl" field=['updateRawName', 'Edit Wiki Name', $wiki.title]}}
<div class="btn-group float-right">
- {{if $lockstate}}
<button class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" type="button">
- <i class="jot-perms-icon fa fa-{{$lockstate}}"></i>
+ <i class="jot-perms-icon fa fa-{{$wiki.lockstate}}"></i>
</button>
- {{/if}}
<button class="btn btn-primary btn-sm" type="submit" value="edit">Submit</button>
</div>
</form>
</td>
</tr>
+ {{/if}}
{{/foreach}}
</table>
</div>