diff --git a/.htaccess b/.htaccess
index 39fd89e04..7f3935117 100644
--- a/.htaccess
+++ b/.htaccess
@@ -5,7 +5,13 @@ AddType audio/ogg .oga
# don't allow any web access to logfiles, even after rotation/compression
-Deny from all
+
+ Require all denied
+
+
+ Order deny,allow
+ Deny from all
+
@@ -14,7 +20,6 @@ Deny from all
RewriteRule "(^|/)\.git" - [F]
RewriteRule "(^|/)store" - [F]
-
# Rewrite current-style URLs of the form 'index.php?q=x'.
# Also place auth information into REMOTE_USER for sites running
# in CGI mode.
@@ -22,6 +27,4 @@ Deny from all
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [E=REMOTE_USER:%{HTTP:Authorization},L,QSA]
-
-
diff --git a/doc/Schema-development.md b/doc/Schema-development.md
index 3ac96a02b..e811bb8c3 100644
--- a/doc/Schema-development.md
+++ b/doc/Schema-development.md
@@ -30,6 +30,7 @@ If no personal options are set, and no schema is selected, we will first try to
with the file name "default.php". This file should never be included with a theme. If it
is, merge conflicts will occur as people update their code. Rather, this should be defined
by administrators on a site by site basis.
+default.php and default.css MUST be symlinks to existing scheme files.
You schema does not need to - and should not - contain all of these values. Only the values
that differ from the defaults should be listed. This gives you some very powerful options
diff --git a/doc/schema_development.bb b/doc/schema_development.bb
index 998111431..3d4c84e85 100644
--- a/doc/schema_development.bb
+++ b/doc/schema_development.bb
@@ -28,6 +28,7 @@ If no personal options are set, and no schema is selected, we will first try to
with the file name "default.php". This file should never be included with a theme. If it
is, merge conflicts will occur as people update their code. Rather, this should be defined
by administrators on a site by site basis.
+default.php and default.css MUST be symlinks to existing scheme files.
You schema does not need to - and should not - contain all of these values. Only the values
that differ from the defaults should be listed. This gives you some very powerful options
diff --git a/include/Import/import_diaspora.php b/include/Import/import_diaspora.php
new file mode 100644
index 000000000..fca9fa4f2
--- /dev/null
+++ b/include/Import/import_diaspora.php
@@ -0,0 +1,146 @@
+get_account();
+ if(! $account)
+ return false;
+
+ $address = escape_tags($data['user']['username']);
+ if(! $address) {
+ notice( t('No username found in import file.') . EOL);
+ return false;
+ }
+
+ $r = q("select * from channel where channel_address = '%s' limit 1",
+ dbesc($address)
+ );
+ if($r) {
+ // try at most ten times to generate a unique address.
+ $x = 0;
+ $found_unique = false;
+ do {
+ $tmp = $address . mt_rand(1000,9999);
+ $r = q("select * from channel where channel_address = '%s' limit 1",
+ dbesc($tmp)
+ );
+ if(! $r) {
+ $address = $tmp;
+ $found_unique = true;
+ break;
+ }
+ $x ++;
+ } while ($x < 10);
+ if(! $found_unique) {
+ logger('import_diaspora: duplicate channel address. randomisation failed.');
+ notice( t('Unable to create a unique channel address. Import failed.') . EOL);
+ return;
+ }
+ }
+
+
+ $c = create_identity(array(
+ 'name' => escape_tags($data['user']['name']),
+ 'nickname' => $address,
+ 'account_id' => $account['account_id'],
+ 'permissions_role' => 'social'
+ ));
+
+ if(! $c['success'])
+ return;
+
+ $channel_id = $c['channel']['channel_id'];
+
+ // todo - add auto follow settings, (and strip exif in hubzilla)
+
+ $location = escape_tags($data['user']['profile']['location']);
+ if(! $location)
+ $location = '';
+
+
+ q("update channel set channel_location = '%s' where channel_id = %d",
+ dbesc($location),
+ intval($channel_id)
+ );
+
+ if($data['user']['profile']['nsfw']) {
+ // fixme for hubzilla which doesn't use pageflags any more
+ q("update channel set channel_pageflags = (channel_pageflags | %d) where channel_id = %d",
+ intval(PAGE_ADULT),
+ intval($channel_id)
+ );
+ }
+
+ if($data['user']['profile']['image_url']) {
+ $p = z_fetch_url($data['user']['profile']['image_url'],true);
+ if($p['success']) {
+ $rawbytes = $p['body'];
+ $type = guess_image_type('dummyfile',$p['header']);
+ import_channel_photo($rawbytes,$type,$c['channel']['channel_account_id'],$channel_id);
+ }
+ }
+
+ $gender = escape_tags($data['user']['profile']['gender']);
+ $about = diaspora2bb($data['user']['profile']['bio']);
+ $publish = intval($data['user']['profile']['searchable']);
+ if($data['user']['profile']['birthday'])
+ $dob = datetime_convert('UTC','UTC',$data['user']['profile']['birthday'],'Y-m-d');
+ else
+ $dob = '0000-00-00';
+
+ // we're relying on the fact that this channel was just created and will only
+ // have the default profile currently
+
+ $r = q("update profile set gender = '%s', about = '%s', dob = '%s', publish = %d where uid = %d",
+ dbesc($gender),
+ dbesc($about),
+ dbesc($dob),
+ dbesc($publish),
+ intval($channel_id)
+ );
+
+ if($data['user']['aspects']) {
+ foreach($data['user']['aspects'] as $aspect) {
+ group_add($channel_id,escape_tags($aspect['name']),intval($aspect['contacts_visible']));
+ }
+ }
+
+ // now add connections and send friend requests
+
+
+ if($data['user']['contacts']) {
+ foreach($data['user']['contacts'] as $contact) {
+ $result = new_contact($channel_id, $contact['person_diaspora_handle'], $c['channel']);
+ if($result['success']) {
+ if($contact['aspects']) {
+ foreach($contact['aspects'] as $aspect) {
+ group_add_member($channel_id,$aspect['name'],$result['abook']['xchan_hash']);
+ }
+ }
+ }
+ }
+ }
+
+
+ // Then add items - note this can't be done until Diaspora adds guids to exported
+ // items and comments
+
+
+
+ // This will indirectly perform a refresh_all *and* update the directory
+
+ proc_run('php', 'include/directory.php', $channel_id);
+
+ notice( t('Import completed.') . EOL);
+
+ change_channel($channel_id);
+
+ goaway(z_root() . '/network' );
+
+}
\ No newline at end of file
diff --git a/include/RedDAV/RedBrowser.php b/include/RedDAV/RedBrowser.php
index a0330d7cc..d74bba220 100644
--- a/include/RedDAV/RedBrowser.php
+++ b/include/RedDAV/RedBrowser.php
@@ -247,7 +247,7 @@ class RedBrowser extends DAV\Browser\Plugin {
$this->server->broadcastEvent('onHTMLActionsPanel', array($parent, &$output));
}
- $html .= replace_macros(get_markup_template('cloud_header.tpl'), array(
+ $html .= replace_macros(get_markup_template('cloud.tpl'), array(
'$header' => t('Files') . ": " . $this->escapeHTML($path) . "/",
'$quota' => $quota,
'$total' => t('Total'),
@@ -255,10 +255,7 @@ class RedBrowser extends DAV\Browser\Plugin {
'$shared' => t('Shared'),
'$create' => t('Create'),
'$upload' => t('Upload'),
- '$is_owner' => $is_owner
- ));
-
- $html .= replace_macros(get_markup_template('cloud_directory.tpl'), array(
+ '$is_owner' => $is_owner,
'$parentpath' => $parentpath,
'$entries' => $f,
'$name' => t('Name'),
diff --git a/include/items.php b/include/items.php
index ca7ceae42..73cb69342 100755
--- a/include/items.php
+++ b/include/items.php
@@ -2592,6 +2592,7 @@ function item_store_update($arr,$allow_exec = false) {
$arr['item_blocked'] = ((array_key_exists('item_blocked',$arr)) ? intval($arr['item_blocked']) : $orig[0]['item_blocked'] );
+
$arr['sig'] = ((x($arr,'sig')) ? $arr['sig'] : '');
$arr['layout_mid'] = ((array_key_exists('layout_mid',$arr)) ? dbesc($arr['layout_mid']) : $orig[0]['layout_mid'] );
@@ -2635,12 +2636,11 @@ function item_store_update($arr,$allow_exec = false) {
return $ret;
}
- $r = q("delete from term where oid = %d and otype = %d",
- intval($orig_post_id),
- intval(TERM_OBJ_POST)
- );
-
- if(($terms) && (is_array($terms))) {
+ if(is_array($terms)) {
+ $r = q("delete from term where oid = %d and otype = %d",
+ intval($orig_post_id),
+ intval(TERM_OBJ_POST)
+ );
foreach($terms as $t) {
q("insert into term (uid,oid,otype,type,term,url)
values(%d,%d,%d,%d,'%s','%s') ",
@@ -2667,6 +2667,8 @@ function item_store_update($arr,$allow_exec = false) {
return $ret;
}
+
+
function store_diaspora_comment_sig($datarray, $channel, $parent_item, $post_id, $walltowall = false) {
// We won't be able to sign Diaspora comments for authenticated visitors
diff --git a/mod/import.php b/mod/import.php
index d3864c077..68d8ebee8 100644
--- a/mod/import.php
+++ b/mod/import.php
@@ -38,6 +38,15 @@ function import_post(&$a) {
if($src) {
+
+ // This is OS specific and could also fail if your tmpdir isn't very large
+ // mostly used for Diaspora which exports gzipped files.
+
+ if(strpos($filename,'.gz')){
+ @rename($src,$src . '.gz');
+ @system('gunzip ' . escapeshellarg($src . '.gz'));
+ }
+
if($filesize) {
$data = @file_get_contents($src);
}
@@ -85,9 +94,15 @@ function import_post(&$a) {
$data = json_decode($data,true);
// logger('import: data: ' . print_r($data,true));
-
// print_r($data);
+
+ if(array_key_exists('user',$data) && array_key_exists('version',$data)) {
+ require_once('include/Import/import_diaspora.php');
+ import_diaspora($data);
+ return;
+ }
+
// import channel
$channel = $data['channel'];
@@ -306,7 +321,7 @@ function import_post(&$a) {
dbesc($photos[2]),
dbesc($photos[3]),
dbesc($photodate),
- dbesc($xchan_hash)
+ dbesc($xchan['xchan_hash'])
);
}
@@ -488,7 +503,7 @@ function import_content(&$a) {
$o = replace_macros(get_markup_template('channel_import.tpl'),array(
'$title' => t('Import Channel'),
- '$desc' => t('Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file. Only identity and connections/relationships will be imported. Importation of content is not yet available.'),
+ '$desc' => t('Use this form to import an existing channel from a different server/hub. You may retrieve the channel identity from the old server/hub via the network or provide an export file.'),
'$label_filename' => t('File to Upload'),
'$choice' => t('Or provide the old server/hub details'),
'$label_old_address' => t('Your old identity address (xyz@example.com)'),
@@ -496,7 +511,8 @@ function import_content(&$a) {
'$label_old_pass' => t('Your old login password'),
'$common' => t('For either option, please choose whether to make this hub your new primary address, or whether your old location should continue this role. You will be able to post from either location, but only one can be marked as the primary location for files, photos, and media.'),
'$label_import_primary' => t('Make this hub my primary location'),
- '$label_import_posts' => t('Import existing posts if possible'),
+ '$label_import_posts' => t('Import existing posts if possible (experimental - limited by available memory'),
+ '$pleasewait' => t('This process may take several minutes to complete. Please submit the form only once and leave this page open until finished.'),
'$email' => '',
'$pass' => '',
'$submit' => t('Submit')
diff --git a/util/.htaccess b/util/.htaccess
index b311c14c2..a0a0d72d9 100644
--- a/util/.htaccess
+++ b/util/.htaccess
@@ -1,5 +1,10 @@
Options -Indexes
-# Remove the following line or modify it to run the string translator utility
-Deny from all
-
+# Remove the following lines or modify it to run the string translator utility
+
+ Require all denied
+
+
+ Order deny,allow
+ Deny from all
+
diff --git a/version.inc b/version.inc
index 2b47a6bda..03a0995b5 100644
--- a/version.inc
+++ b/version.inc
@@ -1 +1 @@
-2015-06-18.1067
+2015-06-21.1070
diff --git a/view/.htaccess b/view/.htaccess
index 559a5fcc0..7aa6c4506 100644
--- a/view/.htaccess
+++ b/view/.htaccess
@@ -1,3 +1,9 @@
-Deny from all
-
\ No newline at end of file
+
+ Require all denied
+
+
+ Order deny,allow
+ Deny from all
+
+
diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css
index 946e2d7d7..ad203867c 100644
--- a/view/theme/redbasic/css/style.css
+++ b/view/theme/redbasic/css/style.css
@@ -1889,7 +1889,6 @@ nav .dropdown-menu {
color: #31708f;
background-color: #d9edf7;
margin-bottom: 3px;
- border-radius: $radiuspx;
text-align: center;
}
@@ -1898,7 +1897,6 @@ nav .dropdown-menu {
color: #8a6d3b;
background-color: #fcf8e3;
margin-bottom: 3px;
- border-radius: $radiuspx;
text-align: center;
}
@@ -1907,10 +1905,20 @@ nav .dropdown-menu {
color: #a94442;
background-color: #f2dede;
margin-bottom: 3px;
- border-radius: $radiuspx;
text-align: center;
}
+.section-content-tools-wrapper .section-content-info-wrapper,
+.section-content-wrapper .section-content-info-wrapper,
+.section-content-tools-wrapper .section-content-warning-wrapper,
+.section-content-wrapper .section-content-warning-wrapper,
+.section-content-tools-wrapper .section-content-danger-wrapper,
+.section-content-wrapper .section-content-danger-wrapper {
+ margin-bottom: 0px;
+ border-radius: $radiuspx;
+}
+
+
.section-content-wrapper {
padding: 7px 10px;
background-color: $comment_item_colour;
diff --git a/view/theme/redbasic/php/config.php b/view/theme/redbasic/php/config.php
index 2603fb267..fe3ea9742 100644
--- a/view/theme/redbasic/php/config.php
+++ b/view/theme/redbasic/php/config.php
@@ -84,8 +84,10 @@ function redbasic_form(&$a, $arr) {
if($files) {
foreach($files as $file) {
$f = basename($file, ".php");
- $scheme_name = $f;
- $scheme_choices[$f] = $scheme_name;
+ if($f != 'default') {
+ $scheme_name = $f;
+ $scheme_choices[$f] = $scheme_name;
+ }
}
}
diff --git a/view/theme/redbasic/php/style.php b/view/theme/redbasic/php/style.php
index 956c1951c..6e68d38d5 100644
--- a/view/theme/redbasic/php/style.php
+++ b/view/theme/redbasic/php/style.php
@@ -70,6 +70,7 @@ if (($schema) && ($schema != '---')) {
// If we haven't got a schema, load the default. We shouldn't touch this - we
// should leave it for admins to define for themselves.
+// default.php and default.css MUST be symlinks to existing schema files.
if (! $schema) {
if(file_exists('view/theme/redbasic/schema/default.php')) {
diff --git a/view/tpl/blocklist.tpl b/view/tpl/blocklist.tpl
index 85e4865ea..27dbcbf0c 100644
--- a/view/tpl/blocklist.tpl
+++ b/view/tpl/blocklist.tpl
@@ -1,67 +1,69 @@
-
+
+
+ {{if $editor}}
+
+
+
+ {{/if}}
+
{{$title}}
+
+
{{if $editor}}
-
-
+
+ {{$editor}}
{{/if}}
-
{{$title}}
+ {{if $pages}}
+
+
+
+
{{$name}}
+
{{$blocktitle}}
+
+
+
+
{{$created}}
+
{{$edited}}
+
+ {{foreach $pages as $key => $items}}
+ {{foreach $items as $item}}
+
{{$title}}
+ +{{$title}}
- -{{$title}}
+{{$title}}
- -{{$album}}
+ + +{{$album}}
- - -{{$title}}
- -{{$title}}
+ +