From e00b8a70829213a4333a53a097c2c498d529f5d6 Mon Sep 17 00:00:00 2001 From: Andrew Manning Date: Tue, 24 May 2016 06:15:42 -0400 Subject: Delete wiki (in progress) --- Zotlabs/Module/Wiki.php | 52 ++++++++++++++++++++++++++++++++++++++++++------- include/wiki.php | 29 ++++++++++++++++++--------- view/tpl/wiki.tpl | 16 +++++++++++++-- view/tpl/wikilist.tpl | 11 ++++++++++- 4 files changed, 89 insertions(+), 19 deletions(-) diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php index 53a3eb26b..221068e0a 100644 --- a/Zotlabs/Module/Wiki.php +++ b/Zotlabs/Module/Wiki.php @@ -21,7 +21,7 @@ class Wiki extends \Zotlabs\Web\Controller { } if(! $which) { notice( t('You must be logged in to see this page.') . EOL ); - return; + goaway('/login'); } } @@ -91,6 +91,12 @@ class Wiki extends \Zotlabs\Web\Controller { json_return_and_die(array('html' => $html, 'success' => true)); } + // Check if specified wiki exists and redirect if not + if((argc() > 2)) { + $wikiname = argv(2); + // TODO: Check if specified wiki exists and redirect if not + } + // Create a new wiki if ((argc() > 3) && (argv(2) === 'create') && (argv(3) === 'wiki')) { $which = argv(1); @@ -102,20 +108,23 @@ class Wiki extends \Zotlabs\Web\Controller { $observer_hash = get_observer_hash(); // Figure out who the page owner is. $perms = get_all_perms(intval($channel['channel_id']), $observer_hash); - - if (!$perms['write_wiki']) { + // TODO: Create a new permission setting for wiki analogous to webpages. Until + // then, use webpage permissions + if (!$perms['write_pages']) { notice(t('Permission denied.') . EOL); - json_return_and_die(array('success' => false)); + goaway(argv(0).'/'.argv(1).'/'.argv(2)); } } - $name = escape_tags(urlencode($_REQUEST['wikiName'])); //Get new wiki name + $name = escape_tags(urlencode($_POST['wikiName'])); //Get new wiki name if($name === '') { notice('Error creating wiki. Invalid name.'); goaway('/wiki'); } // Get ACL for permissions $acl = new \Zotlabs\Access\AccessList($channel); - $acl->set_from_array($_REQUEST); + logger('POST: ' . json_encode($_POST)); + $acl->set_from_array($_POST); + logger('acl: ' . json_encode($acl)); $r = wiki_create_wiki($channel, $observer_hash, $name, $acl); if ($r['success']) { goaway('/wiki/'.$which.'/'.$name); @@ -125,7 +134,36 @@ class Wiki extends \Zotlabs\Web\Controller { } } - json_return_and_die(array('success' => false)); + // Delete a wiki + if ((argc() > 3) && (argv(2) === 'delete') && (argv(3) === 'wiki')) { + $which = argv(1); + // Determine if observer has permission to create wiki + if (local_channel()) { + $channel = \App::get_channel(); + } else { + $channel = get_channel_by_nick($which); + $observer_hash = get_observer_hash(); + // Figure out who the page owner is. + $perms = get_all_perms(intval($channel['channel_id']), $observer_hash); + // TODO: Create a new permission setting for wiki analogous to webpages. Until + // then, use webpage permissions + if (!$perms['write_pages']) { + logger('Wiki delete permission denied.' . EOL); + json_return_and_die(array('success' => false)); + } + } + $resource_id = $_POST['resource_id']; + $deleted = wiki_delete_wiki($resource_id); + if ($deleted['success']) { + json_return_and_die(array('success' => true)); + } else { + logger('Error deleting wiki: ' . $resource_id); + json_return_and_die(array('success' => false)); + } + } + + notice('You must be authenticated.'); + goaway('/wiki'); } } diff --git a/include/wiki.php b/include/wiki.php index 7cd838f95..0f00cd122 100644 --- a/include/wiki.php +++ b/include/wiki.php @@ -7,14 +7,6 @@ use \Zotlabs\Storage\GitRepo as GitRepo; define ( 'WIKI_ITEM_RESOURCE_TYPE', 'wiki' ); -function wiki_create() { - -} - -function wiki_delete() { - -} - function wiki_list($nick, $observer_hash) { if (local_channel() || remote_channel()) { $sql_extra = item_permissions_sql(get_channel_by_nick($nick)['channel_id'], $observer_hash); @@ -36,7 +28,7 @@ function wiki_pages() { function wiki_init_wiki($channel, $name) { // Store the path as a relative path, but pass absolute path to mkdir $path = 'store/[data]/git/'.$channel['channel_address'].'/wiki/'.$name; - if (!mkdir(__DIR__ . '/../' . $path, 0770, true)) { + if (!os_mkdir(__DIR__ . '/../' . $path, 0770, true)) { logger('Error creating wiki path: ' . $name); return null; } @@ -109,3 +101,22 @@ function wiki_create_wiki($channel, $observer_hash, $name, $acl) { return array('item' => null, 'success' => false); } } + +function wiki_delete_wiki($resource_id) { + $item = q("SELECT id FROM item WHERE resource_type = '%s' AND resource_id = '%s' AND item_deleted = 0 limit 1", + dbesc(WIKI_ITEM_RESOURCE_TYPE), + dbesc($resource_id) + ); + if (!$item) { + return array('items' => null, 'success' => false); + } else { + $drop = drop_item($item[0]['id'],false,DROPITEM_NORMAL,true); + $object = json_decode($item[0]['object'], true); + $abs_path = __DIR__ . '/../' . $object['path']; + logger('path to delete: ' . $abs_path); + $pathdel = true; + //$pathdel = rrmdir($abs_path); + + return array('item' => $item, 'success' => (($drop === 1 && $pathdel) ? true : false)); + } +} diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl index 641b3256a..6ee4a7f89 100644 --- a/view/tpl/wiki.tpl +++ b/view/tpl/wiki.tpl @@ -30,6 +30,7 @@ +
{{$acl}}

@@ -74,8 +75,6 @@ -
{{$acl}}
- diff --git a/view/tpl/wikilist.tpl b/view/tpl/wikilist.tpl index d5f2d0c04..f3cea489d 100644 --- a/view/tpl/wikilist.tpl +++ b/view/tpl/wikilist.tpl @@ -2,7 +2,16 @@

{{$header}}

-- cgit v1.2.3