diff options
author | Mario <mario@mariovavti.com> | 2017-09-15 22:17:18 +0200 |
---|---|---|
committer | Mario <mario@mariovavti.com> | 2017-09-15 22:17:18 +0200 |
commit | 373651c3dbb9d6d79b9c5a1519a7ef336f2d615e (patch) | |
tree | d71bc0bb8ab6880f10df4684296189d401e96171 | |
parent | 663802e6992858c026a4e9b325575bc064cc687d (diff) | |
download | volse-hubzilla-373651c3dbb9d6d79b9c5a1519a7ef336f2d615e.tar.gz volse-hubzilla-373651c3dbb9d6d79b9c5a1519a7ef336f2d615e.tar.bz2 volse-hubzilla-373651c3dbb9d6d79b9c5a1519a7ef336f2d615e.zip |
implement wiki editing
-rw-r--r-- | Zotlabs/Lib/NativeWiki.php | 51 | ||||
-rw-r--r-- | Zotlabs/Module/Wiki.php | 35 | ||||
-rw-r--r-- | view/css/mod_wiki.css | 10 | ||||
-rw-r--r-- | view/js/main.js | 8 | ||||
-rw-r--r-- | view/tpl/wikilist.tpl | 26 |
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> </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> |