provide module for importing yearly content dumps
This commit is contained in:
parent
30fd17c58d
commit
1a4a921528
@ -698,3 +698,14 @@ function event_store_item($arr, $event) {
|
||||
return $item_id;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function todo_stat() {
|
||||
return array(
|
||||
'' => t('Not specified'),
|
||||
'NEEDS-ACTION' => t('Needs Action'),
|
||||
'COMPLETED' => t('Completed'),
|
||||
'IN-PROCESS' => t('In Process'),
|
||||
'CANCELLED' => t('Cancelled')
|
||||
);
|
||||
}
|
||||
|
173
mod/import_items.php
Normal file
173
mod/import_items.php
Normal file
@ -0,0 +1,173 @@
|
||||
<?php
|
||||
|
||||
|
||||
function import_items_post(&$a) {
|
||||
|
||||
if(! local_channel())
|
||||
return;
|
||||
|
||||
$data = null;
|
||||
|
||||
$src = $_FILES['filename']['tmp_name'];
|
||||
$filename = basename($_FILES['filename']['name']);
|
||||
$filesize = intval($_FILES['filename']['size']);
|
||||
$filetype = $_FILES['filename']['type'];
|
||||
|
||||
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);
|
||||
}
|
||||
unlink($src);
|
||||
}
|
||||
|
||||
if(! $src) {
|
||||
|
||||
$old_address = ((x($_REQUEST,'old_address')) ? $_REQUEST['old_address'] : '');
|
||||
|
||||
if(! $old_address) {
|
||||
logger('mod_import: nothing to import.');
|
||||
notice( t('Nothing to import.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$email = ((x($_REQUEST,'email')) ? $_REQUEST['email'] : '');
|
||||
$password = ((x($_REQUEST,'password')) ? $_REQUEST['password'] : '');
|
||||
|
||||
$year = ((x($_REQUEST,'year')) ? $_REQUEST['year'] : '');
|
||||
|
||||
$channelname = substr($old_address,0,strpos($old_address,'@'));
|
||||
$servername = substr($old_address,strpos($old_address,'@')+1);
|
||||
|
||||
$scheme = 'https://';
|
||||
$api_path = '/api/red/channel/export/items?f=&channel=' . $channelname . '&year=' . intval($year);
|
||||
$binary = false;
|
||||
$redirects = 0;
|
||||
$opts = array('http_auth' => $email . ':' . $password);
|
||||
$url = $scheme . $servername . $api_path;
|
||||
$ret = z_fetch_url($url, $binary, $redirects, $opts);
|
||||
if(! $ret['success'])
|
||||
$ret = z_fetch_url('http://' . $servername . $api_path, $binary, $redirects, $opts);
|
||||
if($ret['success'])
|
||||
$data = $ret['body'];
|
||||
else
|
||||
notice( t('Unable to download data from old server') . EOL);
|
||||
|
||||
}
|
||||
|
||||
if(! $data) {
|
||||
logger('mod_import: empty file.');
|
||||
notice( t('Imported file is empty.') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
$data = json_decode($data,true);
|
||||
|
||||
// logger('import: data: ' . print_r($data,true));
|
||||
// print_r($data);
|
||||
|
||||
|
||||
if(array_key_exists('compatibility',$data) && array_key_exists('database',$data['compatibility'])) {
|
||||
$v1 = substr($data['compatibility']['database'],-4);
|
||||
$v2 = substr(DB_UPDATE_VERSION,-4);
|
||||
if($v2 > $v1) {
|
||||
$t = sprintf( t('Warning: Database versions differ by %1$d updates.'), $v2 - $v1 );
|
||||
notice($t);
|
||||
}
|
||||
}
|
||||
|
||||
$channel = $a->get_channel();
|
||||
|
||||
|
||||
$saved_notification_flags = notifications_off($channel['channel_id']);
|
||||
|
||||
if($import_posts && array_key_exists('item',$data) && $data['item']) {
|
||||
|
||||
foreach($data['item'] as $i) {
|
||||
$item = get_item_elements($i);
|
||||
|
||||
$r = q("select id, edited from item where mid = '%s' and uid = %d limit 1",
|
||||
dbesc($item['mid']),
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
if($r) {
|
||||
if($item['edited'] > $r[0]['edited']) {
|
||||
$item['id'] = $r[0]['id'];
|
||||
$item['uid'] = $channel['channel_id'];
|
||||
item_store_update($item);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$item['aid'] = $channel['channel_account_id'];
|
||||
$item['uid'] = $channel['channel_id'];
|
||||
$item_result = item_store($item);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
notifications_on($channel['channel_id'],$saved_notification_flags);
|
||||
|
||||
if(array_key_exists('item_id',$data) && $data['item_id']) {
|
||||
foreach($data['item_id'] as $i) {
|
||||
$r = q("select id from item where mid = '%s' and uid = %d limit 1",
|
||||
dbesc($i['mid']),
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
if(! $r)
|
||||
continue;
|
||||
$z = q("select * from item_id where service = '%s' and sid = '%s' and iid = %d and uid = %d limit 1",
|
||||
dbesc($i['service']),
|
||||
dbesc($i['sid']),
|
||||
intval($r[0]['id']),
|
||||
intval($channel['channel_id'])
|
||||
);
|
||||
if(! $z) {
|
||||
q("insert into item_id (iid,uid,sid,service) values(%d,%d,'%s','%s')",
|
||||
intval($r[0]['id']),
|
||||
intval($channel['channel_id']),
|
||||
dbesc($i['sid']),
|
||||
dbesc($i['service'])
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
info( t('Import completed') . EOL);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function import_items_content(&$a) {
|
||||
|
||||
|
||||
|
||||
|
||||
if(! local_channel()) {
|
||||
notice( t('Permission denied') . EOL);
|
||||
return login();
|
||||
}
|
||||
|
||||
$o = replace_macros(get_markup_template('item_import.tpl'),array(
|
||||
'$title' => t('Import Items'),
|
||||
'$desc' => t('Use this form to import existing posts and content from an export file.'),
|
||||
'$label_filename' => t('File to Upload'),
|
||||
'$submit' => t('Submit')
|
||||
));
|
||||
|
||||
return $o;
|
||||
|
||||
}
|
||||
|
||||
|
15
view/tpl/item_import.tpl
Executable file
15
view/tpl/item_import.tpl
Executable file
@ -0,0 +1,15 @@
|
||||
<h2>{{$title}}</h2>
|
||||
|
||||
<form action="import" method="post" enctype="multipart/form-data" id="import-channel-form">
|
||||
|
||||
<div id="import-desc" class="descriptive-paragraph">{{$desc}}</div>
|
||||
|
||||
<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="" />
|
||||
<div id="import-filename-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>
|
||||
|
||||
</form>
|
||||
|
Reference in New Issue
Block a user