Merge remote-tracking branch 'mike/master' into dev

This commit is contained in:
Mario Vavti 2018-05-02 09:22:23 +02:00
commit 9615d02b35
9 changed files with 114 additions and 86 deletions

View File

@ -355,6 +355,7 @@ class Cover_photo extends \Zotlabs\Web\Controller {
$o .= replace_macros($tpl,array( $o .= replace_macros($tpl,array(
'$user' => \App::$channel['channel_address'], '$user' => \App::$channel['channel_address'],
'$info' => t('Your cover photo may be visible to anybody on the internet'),
'$existing' => get_cover_photo(local_channel(),'array',PHOTO_RES_COVER_850), '$existing' => get_cover_photo(local_channel(),'array',PHOTO_RES_COVER_850),
'$lbl_upfile' => t('Upload File:'), '$lbl_upfile' => t('Upload File:'),
'$lbl_profiles' => t('Select a profile:'), '$lbl_profiles' => t('Select a profile:'),

View File

@ -6,6 +6,7 @@ require_once('include/zot.php');
require_once('include/channel.php'); require_once('include/channel.php');
require_once('include/import.php'); require_once('include/import.php');
require_once('include/perm_upgrade.php'); require_once('include/perm_upgrade.php');
require_once('library/urlify/URLify.php');
/** /**
@ -38,6 +39,7 @@ class Import extends \Zotlabs\Web\Controller {
$filename = basename($_FILES['filename']['name']); $filename = basename($_FILES['filename']['name']);
$filesize = intval($_FILES['filename']['size']); $filesize = intval($_FILES['filename']['size']);
$filetype = $_FILES['filename']['type']; $filetype = $_FILES['filename']['type'];
$newname = trim(strtolower($_REQUEST['newname']));
// import channel from file // import channel from file
if($src) { if($src) {
@ -146,7 +148,20 @@ class Import extends \Zotlabs\Web\Controller {
} }
} }
$channel = import_channel($data['channel'], $account_id, $seize); if($newname) {
$x = false;
if(get_config('system','unicode_usernames')) {
$x = punify(mb_strtolower($newname));
}
if((! $x) || strlen($x) > 64) {
$x = strtolower(\URLify::transliterate($newname));
}
$newname = $x;
}
$channel = import_channel($data['channel'], $account_id, $seize, $newname);
} }
else { else {
$moving = false; $moving = false;
@ -363,11 +378,27 @@ class Import extends \Zotlabs\Web\Controller {
continue; continue;
} }
$r = q("select abook_id from abook where abook_xchan = '%s' and abook_channel = %d limit 1",
dbesc($abook['abook_xchan']),
intval($channel['channel_id'])
);
if($r) {
foreach($abook as $k => $v) {
$r = q("UPDATE abook SET " . TQUOT . "%s" . TQUOT . " = '%s' WHERE abook_xchan = '%s' AND abook_channel = %d",
dbesc($k),
dbesc($v),
dbesc($abook['abook_xchan']),
intval($channel['channel_id'])
);
}
}
else {
abook_store_lowlevel($abook); abook_store_lowlevel($abook);
$friends ++; $friends ++;
if(intval($abook['abook_feed'])) if(intval($abook['abook_feed']))
$feeds ++; $feeds ++;
}
translate_abook_perms_inbound($channel,$abook_copy); translate_abook_perms_inbound($channel,$abook_copy);
@ -516,16 +547,20 @@ class Import extends \Zotlabs\Web\Controller {
'$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.'), '$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'), '$label_filename' => t('File to Upload'),
'$choice' => t('Or provide the old server/hub details'), '$choice' => t('Or provide the old server/hub details'),
'$label_old_address' => t('Your old identity address (xyz@example.com)'),
'$label_old_email' => t('Your old login email address'), '$old_address' => [ 'old_address', t('Your old identity address (xyz@example.com)'), '', ''],
'$label_old_pass' => t('Your old login password'), '$email' => [ 'email', t('Your old login email address'), '', '' ],
'$password' => [ 'password', t('Your old login password'), '', '' ],
'$import_posts' => [ 'import_posts', t('Import a few months of posts if possible (limited by available memory'), false, '', [ t('No'), t('Yes') ]],
'$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.'), '$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_moving' => t('Move this channel (disable all previous locations)'), '$make_primary' => [ 'make_primary', t('Make this hub my primary location'), false, '', [ t('No'), t('Yes') ] ],
'$label_import_posts' => t('Import a few months of posts if possible (limited by available memory'), '$moving' => [ 'moving', t('Move this channel (disable all previous locations)'), false, '', [ t('No'), t('Yes') ] ],
'$newname' => [ 'newname', t('Use this channel nickname instead of the one provided'), '', t('Leave blank to keep your existing channel nickname. You will be randomly assigned a similar nickname if either name is already allocated on this site.')],
'$pleasewait' => t('This process may take several minutes to complete. Please submit the form only once and leave this page open until finished.'), '$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' => '',
'$form_security_token' => get_form_security_token('channel_import'), '$form_security_token' => get_form_security_token('channel_import'),
'$submit' => t('Submit') '$submit' => t('Submit')
)); ));

View File

@ -451,6 +451,7 @@ class Profile_photo extends \Zotlabs\Web\Controller {
$o .= replace_macros($tpl,array( $o .= replace_macros($tpl,array(
'$user' => \App::$channel['channel_address'], '$user' => \App::$channel['channel_address'],
'$info' => ((count($profiles) > 1) ? t('Your default profile photo is visible to anybody on the internet. Profile photos for alternate profiles will inherit the permissions of the profile') : t('Your profile photo is visible to anybody on the internet and may be distributed to other websites.')),
'$importfile' => (($importing) ? \App::$data['importfile'] : ''), '$importfile' => (($importing) ? \App::$data['importfile'] : ''),
'$lbl_upfile' => t('Upload File:'), '$lbl_upfile' => t('Upload File:'),
'$lbl_profiles' => t('Select a profile:'), '$lbl_profiles' => t('Select a profile:'),

View File

@ -460,3 +460,28 @@ function db_logger($s,$level = LOGGER_NORMAL,$syslog = LOG_INFO) {
\DBA::$logging = false; \DBA::$logging = false;
\DBA::$dba->debug = $saved; \DBA::$dba->debug = $saved;
} }
function db_columns($table) {
if($table) {
if(ACTIVE_DBTYPE === DBTYPE_POSTGRES) {
$r = q("SELECT column_name as field FROM information_schema.columns WHERE table_schema = 'public' AND table_name = '%s'",
dbesc($table)
);
if($r) {
return ids_to_array($r,'field');
}
}
else {
$r = q("show columns in %s",
dbesc($table)
);
if($r) {
return ids_to_array($r,'Field');
}
}
}
return [];
}

View File

@ -14,7 +14,7 @@ require_once('include/perm_upgrade.php');
* @param int $seize * @param int $seize
* @return boolean|array * @return boolean|array
*/ */
function import_channel($channel, $account_id, $seize) { function import_channel($channel, $account_id, $seize, $newname = '') {
if(! array_key_exists('channel_system',$channel)) { if(! array_key_exists('channel_system',$channel)) {
$channel['channel_system'] = (($channel['channel_pageflags'] & 0x1000) ? 1 : 0); $channel['channel_system'] = (($channel['channel_pageflags'] & 0x1000) ? 1 : 0);
@ -30,6 +30,11 @@ function import_channel($channel, $account_id, $seize) {
$channel['channel_hash'] = make_xchan_hash($channel['channel_guid'],$channel['channel_guid_sig']); $channel['channel_hash'] = make_xchan_hash($channel['channel_guid'],$channel['channel_guid_sig']);
if($newname) {
$channel['channel_address'] = $newname;
}
// Check for duplicate channels // Check for duplicate channels
$r = q("select * from channel where (channel_guid = '%s' or channel_hash = '%s' or channel_address = '%s' ) limit 1", $r = q("select * from channel where (channel_guid = '%s' or channel_hash = '%s' or channel_address = '%s' ) limit 1",

View File

@ -1,37 +0,0 @@
h2 {
margin-left: 15%;
margin-top: 8%;
}
#import-channel-form {
font-size: 1.4em;
margin-left: 15%;
margin-top: 5%;
width: 50%;
}
#import-channel-form .descriptive-paragraph {
color: #888;
margin-left: 20px;
margin-bottom: 25px;
}
.import-label {
float: left;
width: 275px;
}
.import-input {
float: left;
width: 275px;
padding: 5px;
}
.import-field-end {
clear: both;
margin-bottom: 20px;
}

View File

@ -1,43 +1,36 @@
<h2>{{$title}}</h2> <div class="generic-content-wrapper">
<div class="section-title-wrapper">
<h2>{{$title}}</h2>
<div class="clear"></div>
</div>
<div class="section-content-wrapper">
<form action="import" method="post" enctype="multipart/form-data" id="import-channel-form"> <form action="import" method="post" enctype="multipart/form-data" id="import-channel-form">
<input type="hidden" name="form_security_token" value="{{$form_security_token}}"> <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
<div id="import-desc" class="descriptive-paragraph">{{$desc}}</div> <div id="import-desc" class="section-content-info-wrapper">{{$desc}}</div>
<label for="import-filename" id="label-import-filename" class="import-label" >{{$label_filename}}</label> <label for="import-filename" id="label-import-filename" class="import-label" >{{$label_filename}}</label>
<input type="file" name="filename" id="import-filename" class="import-input" value="" /> <input type="file" name="filename" id="import-filename" class="import-input" value="" />
<div id="import-filename-end" class="import-field-end"></div> <div id="import-filename-end" class="import-field-end"></div>
<div id="import-choice" class="descriptive-paragraph">{{$choice}}</div> <div id="import-choice" class="section-content-info-wrapper">{{$choice}}</div>
<label for="import-old-address" id="label-import-old-address" class="import-label" >{{$label_old_address}}</label> {{include file="field_input.tpl" field=$old_address}}
<input type="text" name="old_address" id="import-old-address" class="import-input" value="" /> {{include file="field_input.tpl" field=$email}}
<div id="import-old-address-end" class="import-field-end"></div> {{include file="field_password.tpl" field=$password}}
{{include file="field_checkbox.tpl" field=$import_posts}}
<label for="import-old-email" id="label-import-old-email" class="import-label" >{{$label_old_email}}</label> <div id="import-common-desc" class="section-content-info-wrapper">{{$common}}</div>
<input type="text" name="email" id="import-old-email" class="import-input" value="{{$email}}" />
<div id="import-old-email-end" class="import-field-end"></div>
<label for="import-old-pass" id="label-import-old-pass" class="import-label" >{{$label_old_pass}}</label> {{include file="field_checkbox.tpl" field=$make_primary}}
<input type="password" name="password" id="import-old-pass" class="import-input" value="{{$pass}}" /> {{include file="field_checkbox.tpl" field=$moving}}
<div id="import-old-pass-end" class="import-field-end"></div> {{include file="field_input.tpl" field=$newname}}
<input type="checkbox" name="import_posts" id="import-posts" value="1" /> <div id="import-common-desc" class="section-content-info-wrapper">{{$pleasewait}}</div>
<label for="import-posts" id="label-import-posts">{{$label_import_posts}}</label>
<div id="import-posts-end" class="import-field-end"></div>
<div id="import-common-desc" class="descriptive-paragraph">{{$common}}</div> <input type="submit" class="btn btn-primary" name="submit" id="import-submit-button" value="{{$submit}}" />
<input type="checkbox" name="make_primary" id="import-make-primary" value="1" />
<label for="import-make-primary" id="label-import-make-primary">{{$label_import_primary}}</label>
<div id="import-make-primary-end" class="import-field-end"></div>
<input type="checkbox" name="moving" id="import-moving" value="1" />
<label for="import-moving" id="label-import-moving">{{$label_import_moving}}</label>
<div id="import-moving-end" class="import-field-end"></div>
<input type="submit" name="submit" id="import-submit-button" value="{{$submit}}" />
<div id="import-submit-end" class="import-field-end"></div> <div id="import-submit-end" class="import-field-end"></div>
<div id="import-common-desc" class="descriptive-paragraph">{{$pleasewait}}</div> </form>
</form> </div>
</div>

View File

@ -86,6 +86,9 @@
<h2>{{$title}}</h2> <h2>{{$title}}</h2>
</div> </div>
<div class="section-content-wrapper"> <div class="section-content-wrapper">
{{if $info}}
<div class="section-content-warning-wrapper">{{$info}}</div>
{{/if}}
{{if $existing}} {{if $existing}}
<img class="cover-photo-review" style="max-width: 100%;" src="{{$existing.url}}" alt="{{t('Cover Photo')}}" /> <img class="cover-photo-review" style="max-width: 100%;" src="{{$existing.url}}" alt="{{t('Cover Photo')}}" />
{{/if}} {{/if}}

View File

@ -94,7 +94,9 @@
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'> <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
<div id="profile-photo-upload-wrapper"> <div id="profile-photo-upload-wrapper">
{{if $info}}
<div class="section-content-warning-wrapper">{{$info}}</div>
{{/if}}
{{if $importfile}} {{if $importfile}}
<input type="hidden" name="importfile" value="{{$importfile}}"> <input type="hidden" name="importfile" value="{{$importfile}}">
{{else}} {{else}}