aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Zotlabs/Module/Wiki.php16
-rw-r--r--include/wiki.php56
2 files changed, 52 insertions, 20 deletions
diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php
index ef7b4dfe1..c74fc6c6f 100644
--- a/Zotlabs/Module/Wiki.php
+++ b/Zotlabs/Module/Wiki.php
@@ -174,22 +174,26 @@ class Wiki extends \Zotlabs\Web\Controller {
goaway('/'.argv(0).'/'.argv(1).'/'.argv(2));
}
}
- $name = escape_tags(urlencode($_POST['wikiName'])); //Get new wiki name
- if($name === '') {
+ $wiki = array();
+ // Generate new wiki info from input name
+ $wiki['rawName'] = $_POST['wikiName'];
+ $wiki['htmlName'] = escape_tags($_POST['wikiName']);
+ $wiki['urlName'] = urlencode(escape_tags($_POST['wikiName']));
+ if($wiki['urlName'] === '') {
notice('Error creating wiki. Invalid name.');
goaway('/wiki');
}
// Get ACL for permissions
$acl = new \Zotlabs\Access\AccessList($channel);
$acl->set_from_array($_POST);
- $r = wiki_create_wiki($channel, $observer_hash, $name, $acl);
+ $r = wiki_create_wiki($channel, $observer_hash, $wiki, $acl);
if ($r['success']) {
- $homePage = wiki_create_page('Home.md', $r['item']['resource_id']);
+ $homePage = wiki_create_page('Home', $r['item']['resource_id']);
if(!$homePage['success']) {
notice('Wiki created, but error creating Home page.');
- goaway('/wiki/'.$nick.'/'.$name);
+ goaway('/wiki/'.$nick.'/'.$wiki['urlName']);
}
- goaway('/wiki/'.$nick.'/'.$name.'/Home.md');
+ goaway('/wiki/'.$nick.'/'.$wiki['urlName'].'/'.$homePage['urlName']);
} else {
notice('Error creating wiki');
goaway('/wiki');
diff --git a/include/wiki.php b/include/wiki.php
index 84e7d8dfa..822cb1b88 100644
--- a/include/wiki.php
+++ b/include/wiki.php
@@ -33,11 +33,11 @@ function wiki_page_list($resource_id) {
return array('pages' => $pages);
}
-function wiki_init_wiki($channel, $name) {
+function wiki_init_wiki($channel, $wiki) {
// Store the path as a relative path, but pass absolute path to mkdir
- $path = 'store/[data]/git/'.$channel['channel_address'].'/wiki/'.$name;
+ $path = 'store/[data]/git/'.$channel['channel_address'].'/wiki/'.$wiki['urlName'];
if (!os_mkdir(__DIR__ . '/../' . $path, 0770, true)) {
- logger('Error creating wiki path: ' . $name);
+ logger('Error creating wiki path: ' . $path);
return null;
}
// Create GitRepo object
@@ -50,8 +50,8 @@ function wiki_init_wiki($channel, $name) {
return array('path' => $path);
}
-function wiki_create_wiki($channel, $observer_hash, $name, $acl) {
- $wikiinit = wiki_init_wiki($channel, $name);
+function wiki_create_wiki($channel, $observer_hash, $wiki, $acl) {
+ $wikiinit = wiki_init_wiki($channel, $wiki);
if (!$wikiinit['path']) {
notice('Error creating wiki');
return array('item' => null, 'success' => false);
@@ -73,7 +73,7 @@ function wiki_create_wiki($channel, $observer_hash, $name, $acl) {
$mid = item_message_id();
$arr = array(); // Initialize the array of parameters for the post
$item_hidden = 0; // TODO: Allow form creator to send post to ACL about new game automatically
- $wiki_url = z_root() . '/wiki/' . $channel['channel_address'] . '/' . $name;
+ $wiki_url = z_root() . '/wiki/' . $channel['channel_address'] . '/' . $wiki['urlName'];
$arr['aid'] = $channel['channel_account_id'];
$arr['uid'] = $channel['channel_id'];
$arr['mid'] = $mid;
@@ -85,7 +85,7 @@ function wiki_create_wiki($channel, $observer_hash, $name, $acl) {
$arr['author_xchan'] = $observer_hash;
$arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $arr['mid'];
$arr['llink'] = $arr['plink'];
- $arr['title'] = $name; // name of new wiki;
+ $arr['title'] = $wiki['htmlName']; // name of new wiki;
$arr['allow_cid'] = $ac['allow_cid'];
$arr['allow_gid'] = $ac['allow_gid'];
$arr['deny_cid'] = $ac['deny_cid'];
@@ -96,11 +96,21 @@ function wiki_create_wiki($channel, $observer_hash, $name, $acl) {
$arr['item_private'] = intval($acl->is_private());
$arr['verb'] = ACTIVITY_CREATE;
$arr['obj_type'] = ACTIVITY_OBJ_WIKI;
- $arr['body'] = '[table][tr][td][h1]New Wiki[/h1][/td][/tr][tr][td][zrl=' . $wiki_url . ']' . $name . '[/zrl][/td][/tr][/table]';
+ $arr['body'] = '[table][tr][td][h1]New Wiki[/h1][/td][/tr][tr][td][zrl=' . $wiki_url . ']' . $wiki['htmlName'] . '[/zrl][/td][/tr][/table]';
// Save the path using iconfig. The file path should not be shared with other hubs
if (!set_iconfig($arr, 'wiki', 'path', $path, false)) {
return array('item' => null, 'success' => false);
}
+ // Save the wiki name information using iconfig. This is shareable.
+ if (!set_iconfig($arr, 'wiki', 'rawName', $wiki['rawName'], true)) {
+ return array('item' => null, 'success' => false);
+ }
+ if (!set_iconfig($arr, 'wiki', 'htmlName', $wiki['htmlName'], true)) {
+ return array('item' => null, 'success' => false);
+ }
+ if (!set_iconfig($arr, 'wiki', 'urlName', $wiki['urlName'], true)) {
+ return array('item' => null, 'success' => false);
+ }
$post = item_store($arr);
$item_id = $post['item_id'];
@@ -136,15 +146,23 @@ function wiki_get_wiki($resource_id) {
if (!$item) {
return array('wiki' => null, 'path' => null);
} else {
- $w = $item[0];
- //$object = json_decode($w['object'], true);
+ $w = $item[0]; // wiki item table record
+ // Get wiki metadata
+ $rawName = get_iconfig($w, 'wiki', 'rawName');
+ $htmlName = get_iconfig($w, 'wiki', 'htmlName');
+ $urlName = get_iconfig($w, 'wiki', 'urlName');
$path = get_iconfig($w, 'wiki', 'path');
if (!realpath(__DIR__ . '/../' . $path)) {
return array('wiki' => null, 'path' => null);
}
// Path to wiki exists
$abs_path = realpath(__DIR__ . '/../' . $path);
- return array('wiki' => $w, 'path' => $abs_path);
+ return array( 'wiki' => $w,
+ 'path' => $abs_path,
+ 'rawName' => $rawName,
+ 'htmlName' => $htmlName,
+ 'urlName' => $urlName
+ );
}
}
@@ -180,15 +198,16 @@ function wiki_create_page($name, $resource_id) {
if (!$w['path']) {
return array('page' => null, 'message' => 'Wiki not found.', 'success' => false);
}
- $page_path = $w['path'] . '/' . $name;
+ $page = array('rawName' => $name, 'htmlName' => escape_tags($name), 'urlName' => urlencode(escape_tags($name)), 'fileName' => wiki_generate_page_filename($name));
+ $page_path = $w['path'] . '/' . $page['urlName'];
if (is_file($page_path)) {
return array('page' => null, 'message' => 'Page already exists.', 'success' => false);
}
- // Create file called $name in the path
+ // Create the page file in the wiki repo
if(!touch($page_path)) {
return array('page' => null, 'message' => 'Page file cannot be created.', 'success' => false);
} else {
- return array('wiki' => $wikiname, 'message' => '', 'success' => true);
+ return array('page' => $page, 'message' => '', 'success' => true);
}
}
@@ -298,3 +317,12 @@ function wiki_git_commit($arr) {
json_return_and_die(array('message' => 'GitRepo error thrown', 'success' => false));
}
}
+
+function wiki_generate_page_filename($name) {
+ $file = urlencode(escape_tags($name));
+ if( $file === '') {
+ return null;
+ } else {
+ return $file . '.md';
+ }
+} \ No newline at end of file