aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHubzilla <hubzilla@hz.macgirvin.com>2017-01-22 18:48:45 -0800
committerHubzilla <hubzilla@hz.macgirvin.com>2017-01-22 18:48:45 -0800
commit17f1d39fcf973ac35f14a36faa2b92867fbb11e9 (patch)
tree43ba2ffbfbeb0b056625aabc4aeb42707747d693
parent3bafa05ad1093d70c893d0985788203ccb1e7169 (diff)
downloadvolse-hubzilla-17f1d39fcf973ac35f14a36faa2b92867fbb11e9.tar.gz
volse-hubzilla-17f1d39fcf973ac35f14a36faa2b92867fbb11e9.tar.bz2
volse-hubzilla-17f1d39fcf973ac35f14a36faa2b92867fbb11e9.zip
basic support for clone syncing of wikis and wiki pages
-rw-r--r--Zotlabs/Lib/NativeWiki.php16
-rw-r--r--Zotlabs/Lib/NativeWikiPage.php25
-rw-r--r--Zotlabs/Module/Import.php3
-rw-r--r--Zotlabs/Module/Wiki.php13
-rw-r--r--include/channel.php11
-rwxr-xr-xinclude/items.php1
-rw-r--r--include/zot.php7
7 files changed, 58 insertions, 18 deletions
diff --git a/Zotlabs/Lib/NativeWiki.php b/Zotlabs/Lib/NativeWiki.php
index c3380939a..f4089d8a2 100644
--- a/Zotlabs/Lib/NativeWiki.php
+++ b/Zotlabs/Lib/NativeWiki.php
@@ -93,13 +93,25 @@ class NativeWiki {
if($item_id) {
\Zotlabs\Daemon\Master::Summon(array('Notifier', 'activity', $item_id));
- return array('item' => $post['item'], 'success' => true);
+ return array('item' => $post['item'], 'item_id' => $item_id, 'success' => true);
}
else {
return array('item' => null, 'success' => false);
}
}
+ static public function sync_a_wiki_item($uid,$id) {
+ $r = q("select * from item where id = %d and uid = %d",
+ intval($id),
+ intval($uid)
+ );
+ if($r) {
+ xchan_query($r);
+ $sync_item = fetch_post_tags($r);
+ build_sync_packet($uid,array('wiki' => array(encode_item($sync_item[0],true))));
+ }
+ }
+
function delete_wiki($channel_id,$observer_hash,$resource_id) {
$w = self::get_wiki($channel_id,$observer_hash,$resource_id);
@@ -113,7 +125,7 @@ class NativeWiki {
info( t('Wiki files deleted successfully'));
- return array('item' => $item, 'success' => (($drop === 1) ? true : false));
+ return array('item' => $item, 'item_id' => $item['id'], 'success' => (($drop === 1) ? true : false));
}
diff --git a/Zotlabs/Lib/NativeWikiPage.php b/Zotlabs/Lib/NativeWikiPage.php
index 0c3698519..f0b8b76a1 100644
--- a/Zotlabs/Lib/NativeWikiPage.php
+++ b/Zotlabs/Lib/NativeWikiPage.php
@@ -61,16 +61,19 @@ class NativeWikiPage {
set_iconfig($arr,'nwikipage','pagetitle',urlencode(($name) ? $name : t('(No Title)')),true);
- post_activity_item($arr, false, false);
+ $p = post_activity_item($arr, false, false);
- $page = [
- 'rawName' => $name,
- 'htmlName' => escape_tags($name),
- 'urlName' => urlencode(escape_tags($name)),
- 'fileName' => urlencode(escape_tags($name)) . Zlib\NativeWikiPage::get_file_ext($w)
- ];
+ if($p['success']) {
+ $page = [
+ 'rawName' => $name,
+ 'htmlName' => escape_tags($name),
+ 'urlName' => urlencode(escape_tags($name)),
+ 'fileName' => urlencode(escape_tags($name)) . Zlib\NativeWikiPage::get_file_ext($w)
+ ];
- return array('page' => $page, 'wiki' => $w, 'message' => '', 'success' => true);
+ return array('page' => $page, 'item_id' => $p['post_id'], 'wiki' => $w, 'message' => '', 'success' => true);
+ }
+ return [ 'success' => false, 'message' => t('Wiki page create failed.') ];
}
static public function rename_page($arr) {
@@ -119,7 +122,7 @@ class NativeWikiPage {
return [ 'success' => true, 'page' => $page ];
}
- return [ 'success' => false, 'message' => t('Page not found') ];
+ return [ 'success' => false, 'item_id' => $c['item_id'], 'message' => t('Page not found') ];
}
@@ -358,7 +361,7 @@ class NativeWikiPage {
$ret = item_store($item, false, false);
if($ret['item_id'])
- return array('message' => '', 'filename' => $filename, 'success' => true);
+ return array('message' => '', 'item_id' => $ret['item_id'], 'filename' => $filename, 'success' => true);
else
return array('message' => t('Page update failed.'), 'success' => false);
}
@@ -490,7 +493,7 @@ class NativeWikiPage {
if($page) {
set_iconfig($page['id'],'nwikipage','commit_msg',escape_tags($commit_msg),true);
- return [ 'success' => true, 'page' => $page ];
+ return [ 'success' => true, 'item_id' => $page['id'], 'page' => $page ];
}
return [ 'success' => false, 'message' => t('Page not found.') ];
diff --git a/Zotlabs/Module/Import.php b/Zotlabs/Module/Import.php
index aa79fa8bf..b69daa2ff 100644
--- a/Zotlabs/Module/Import.php
+++ b/Zotlabs/Module/Import.php
@@ -472,6 +472,9 @@ class Import extends \Zotlabs\Web\Controller {
if(is_array($data['menu']))
import_menus($channel,$data['menu']);
+
+ if(is_array($data['wiki']))
+ import_items($channel,$data['wiki'],false,$relocate);
$addon = array('channel' => $channel,'data' => $data);
call_hooks('import_channel',$addon);
diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php
index 746ad9b4f..2ab7379c4 100644
--- a/Zotlabs/Module/Wiki.php
+++ b/Zotlabs/Module/Wiki.php
@@ -104,7 +104,7 @@ class Wiki extends \Zotlabs\Web\Controller {
$o = profile_tabs($a, $is_owner, \App::$profile['channel_address']);
// Download a wiki
-
+/*
if((argc() > 3) && (argv(2) === 'download') && (argv(3) === 'wiki')) {
$resource_id = argv(4);
@@ -144,7 +144,7 @@ class Wiki extends \Zotlabs\Web\Controller {
killme();
}
-
+*/
switch(argc()) {
case 2:
$wikis = Zlib\NativeWiki::listwikis($owner, get_observer_hash());
@@ -361,6 +361,7 @@ class Wiki extends \Zotlabs\Web\Controller {
$acl->set_from_array($_POST);
$r = Zlib\NativeWiki::create_wiki($owner, $observer_hash, $wiki, $acl);
if($r['success']) {
+ Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$r['item_id']);
$homePage = Zlib\NativeWikiPage::create_page($owner['channel_id'],$observer_hash,'Home', $r['item']['resource_id']);
if(! $homePage['success']) {
notice( t('Wiki created, but error creating Home page.'));
@@ -386,6 +387,7 @@ class Wiki extends \Zotlabs\Web\Controller {
$resource_id = $_POST['resource_id'];
$deleted = Zlib\NativeWiki::delete_wiki($owner['channel_id'],$observer_hash,$resource_id);
if ($deleted['success']) {
+ Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$deleted['item_id']);
json_return_and_die(array('message' => '', 'success' => true));
}
else {
@@ -425,11 +427,14 @@ class Wiki extends \Zotlabs\Web\Controller {
));
if($commit['success']) {
+ Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id']);
json_return_and_die(array('url' => '/' . argv(0) . '/' . argv(1) . '/' . $page['wiki']['urlName'] . '/' . $page['page']['urlName'], 'success' => true));
}
else {
json_return_and_die(array('message' => 'Error making git commit','url' => '/' . argv(0) . '/' . argv(1) . '/' . $page['wiki']['urlName'] . '/' . urlencode($page['page']['urlName']),'success' => false));
}
+
+
}
else {
logger('Error creating page');
@@ -487,6 +492,7 @@ class Wiki extends \Zotlabs\Web\Controller {
));
if($commit['success']) {
+ Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id']);
json_return_and_die(array('message' => 'Wiki git repo commit made', 'success' => true));
}
else {
@@ -549,6 +555,7 @@ class Wiki extends \Zotlabs\Web\Controller {
'files' => null
));
if($commit['success']) {
+ Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id']);
json_return_and_die(array('message' => 'Wiki git repo commit made', 'success' => true));
}
else {
@@ -563,7 +570,6 @@ class Wiki extends \Zotlabs\Web\Controller {
// Revert a page
if ((argc() === 4) && (argv(2) === 'revert') && (argv(3) === 'page')) {
-logger('revert was called: ' . print_r($_POST,true));
$resource_id = $_POST['resource_id'];
$pageUrlName = $_POST['name'];
$commitHash = $_POST['commitHash'];
@@ -637,6 +643,7 @@ logger('revert was called: ' . print_r($_POST,true));
));
if($commit['success']) {
+ Zlib\NativeWiki::sync_a_wiki_item($owner['channel_id'],$commit['item_id']);
json_return_and_die(array('name' => $renamed['page'], 'message' => 'Wiki git repo commit made', 'success' => true));
}
else {
diff --git a/include/channel.php b/include/channel.php
index 83f48f361..247d3d358 100644
--- a/include/channel.php
+++ b/include/channel.php
@@ -671,6 +671,17 @@ function identity_basic_export($channel_id, $items = false) {
$ret['mail'] = $m;
}
+ $r = q("select * from item where resource_type like 'nwiki%%' and uid = %d order by created",
+ intval($channel_id)
+ );
+ if($r) {
+ $ret['wiki'] = array();
+ xchan_query($r);
+ $r = fetch_post_tags($r,true);
+ foreach($r as $rv) {
+ $ret['wiki'][] = encode_item($rv,true);
+ }
+ }
/** @warning this may run into memory limits on smaller systems */
diff --git a/include/items.php b/include/items.php
index e4ead28c8..3b7307239 100755
--- a/include/items.php
+++ b/include/items.php
@@ -391,6 +391,7 @@ function post_activity_item($arr,$allow_code = false,$deliver = true) {
call_hooks('post_local_end', $arr);
Zotlabs\Daemon\Master::Summon(array('Notifier','activity',$post_id));
$ret['success'] = true;
+ $ret['item_id'] = $post_id;
$ret['activity'] = $post['item'];
}
diff --git a/include/zot.php b/include/zot.php
index c6d52816a..06996f47f 100644
--- a/include/zot.php
+++ b/include/zot.php
@@ -3174,8 +3174,11 @@ function process_channel_sync_delivery($sender, $arr, $deliveries) {
if(array_key_exists('menu',$arr) && $arr['menu'])
sync_menus($channel,$arr['menu']);
- if(array_key_exists('file',$arr) && $arr['file'])
- sync_files($channel,$arr['file']);
+ if(array_key_exists('menu',$arr) && $arr['menu'])
+ sync_menus($channel,$arr['menu']);
+
+ if(array_key_exists('wiki',$arr) && $arr['wiki'])
+ sync_items($channel,$arr['wiki']);
if(array_key_exists('channel',$arr) && is_array($arr['channel']) && count($arr['channel'])) {