implement page update modes

This commit is contained in:
friendica 2012-07-23 20:49:56 -07:00
parent e18417ea47
commit 4b36e41b09
15 changed files with 242 additions and 110 deletions

View File

@ -8,6 +8,7 @@ require_once('include/datetime.php');
require_once('include/language.php');
require_once('include/nav.php');
require_once('include/cache.php');
require_once('library/Mobile_Detect/Mobile_Detect.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica Red');
define ( 'FRIENDICA_VERSION', trim(file_get_contents('version.inc')) . 'R');
@ -1454,8 +1455,17 @@ if(! function_exists('current_theme')) {
$a = get_app();
$system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
$theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
$mobile_detect = new Mobile_Detect();
$is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
if($is_mobile) {
$system_theme = ((isset($a->config['system']['mobile-theme'])) ? $a->config['system']['mobile-theme'] : '');
$theme_name = ((isset($_SESSION) && x($_SESSION,'mobile-theme')) ? $_SESSION['mobile-theme'] : $system_theme);
}
else {
$system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
$theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
}
if($theme_name &&
(file_exists('view/theme/' . $theme_name . '/style.css') ||
@ -1592,18 +1602,21 @@ if(! function_exists('profile_tabs')){
'url' => $url,
'sel' => ((!isset($tab)&&$a->argv[0]=='profile')?'active':''),
'title' => t('Status Messages and Posts'),
'id' => 'status-tab',
),
array(
'label' => t('Profile'),
'url' => $url.'/?tab=profile',
'sel' => ((isset($tab) && $tab=='profile')?'active':''),
'title' => t('Profile Details'),
'id' => 'profile-tab',
),
array(
'label' => t('Photos'),
'url' => $a->get_baseurl() . '/photos/' . $nickname,
'sel' => ((!isset($tab)&&$a->argv[0]=='photos')?'active':''),
'title' => t('Photo Albums'),
'id' => 'photo-tab',
),
);
@ -1613,12 +1626,14 @@ if(! function_exists('profile_tabs')){
'url' => $a->get_baseurl() . '/events',
'sel' =>((!isset($tab)&&$a->argv[0]=='events')?'active':''),
'title' => t('Events and Calendar'),
'id' => 'events-tab',
);
$tabs[] = array(
'label' => t('Personal Notes'),
'url' => $a->get_baseurl() . '/notes',
'sel' =>((!isset($tab)&&$a->argv[0]=='notes')?'active':''),
'title' => t('Only You Can See This'),
'id' => 'notes-tab',
);
}

View File

@ -2014,6 +2014,118 @@ function local_delivery($importer,$data) {
$feed->enable_order_by_date(false);
$feed->init();
if($feed->error())
logger('local_delivery: Error parsing XML: ' . $feed->error());
// Check at the feed level for updated contact name and/or photo
$name_updated = '';
$new_name = '';
$photo_timestamp = '';
$photo_url = '';
$rawtags = $feed->get_feed_tags( NAMESPACE_DFRN, 'owner');
if(! $rawtags)
$rawtags = $feed->get_feed_tags( SIMPLEPIE_NAMESPACE_ATOM_10, 'author');
if($rawtags) {
$elems = $rawtags[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_10];
if($elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated']) {
$name_updated = $elems['name'][0]['attribs'][NAMESPACE_DFRN]['updated'];
$new_name = $elems['name'][0]['data'];
}
if((x($elems,'link')) && ($elems['link'][0]['attribs']['']['rel'] === 'photo') && ($elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated'])) {
$photo_timestamp = datetime_convert('UTC','UTC',$elems['link'][0]['attribs'][NAMESPACE_DFRN]['updated']);
$photo_url = $elems['link'][0]['attribs']['']['href'];
}
}
if((is_array($contact)) && ($photo_timestamp) && (strlen($photo_url)) && ($photo_timestamp > $importer['avatar-date'])) {
logger('local_delivery: Updating photo for ' . $importer['name']);
require_once("Photo.php");
$photo_failure = false;
$have_photo = false;
$r = q("SELECT `resource-id` FROM `photo` WHERE `contact-id` = %d AND `uid` = %d LIMIT 1",
intval($importer['id']),
intval($importer['importer_uid'])
);
if(count($r)) {
$resource_id = $r[0]['resource-id'];
$have_photo = true;
}
else {
$resource_id = photo_new_resource();
}
$img_str = fetch_url($photo_url,true);
// guess mimetype from headers or filename
$type = guess_image_type($photo_url,true);
$img = new Photo($img_str, $type);
if($img->is_valid()) {
if($have_photo) {
q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `contact-id` = %d AND `uid` = %d",
dbesc($resource_id),
intval($importer['id']),
intval($importer['importer_uid'])
);
}
$img->scaleImageSquare(175);
$hash = $resource_id;
$r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 4);
$img->scaleImage(80);
$r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 5);
$img->scaleImage(48);
$r = $img->store($importer['importer_uid'], $importer['id'], $hash, basename($photo_url), 'Contact Photos', 6);
$a = get_app();
q("UPDATE `contact` SET `avatar-date` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s'
WHERE `uid` = %d AND `id` = %d LIMIT 1",
dbesc(datetime_convert()),
dbesc($a->get_baseurl() . '/photo/' . $hash . '-4.'.$img->getExt()),
dbesc($a->get_baseurl() . '/photo/' . $hash . '-5.'.$img->getExt()),
dbesc($a->get_baseurl() . '/photo/' . $hash . '-6.'.$img->getExt()),
intval($importer['importer_uid']),
intval($importer['id'])
);
}
}
if((is_array($contact)) && ($name_updated) && (strlen($new_name)) && ($name_updated > $contact['name-date'])) {
$r = q("select * from contact where uid = %d and id = %d limit 1",
intval($importer['importer_uid']),
intval($importer['id'])
);
$x = q("UPDATE `contact` SET `name` = '%s', `name-date` = '%s' WHERE `uid` = %d AND `id` = %d LIMIT 1",
dbesc(notags(trim($new_name))),
dbesc(datetime_convert()),
intval($importer['importer_uid']),
intval($importer['id'])
);
// do our best to update the name on content items
if(count($r)) {
q("update item set `author-name` = '%s' where `author-name` = '%s' and `author-link` = '%s' and uid = %d",
dbesc(notags(trim($new_name))),
dbesc($r[0]['name']),
dbesc($r[0]['url']),
intval($importer['importer_uid'])
);
}
}
/*
// Currently unsupported - needs a lot of work
$reloc = $feed->get_feed_tags( NAMESPACE_DFRN, 'relocate' );

View File

@ -256,6 +256,7 @@ function get_theme_info($theme){
'author' => array(),
'maintainer' => array(),
'version' => "",
'credits' => "",
'experimental' => false,
'unsupported' => false
);

View File

@ -403,7 +403,7 @@ function load_view_file($s) {
return file_get_contents("$d/$lang/$b");
$theme = current_theme();
if(file_exists("$d/theme/$theme/$b"))
return file_get_contents("$d/theme/$theme/$b");

View File

@ -210,6 +210,91 @@
timer = setTimeout(NavUpdate,updateInterval);
}
function updateConvItems(mode,data) {
if(mode === 'update') {
prev = 'threads-begin';
$('.thread-wrapper',data).each(function() {
var ident = $(this).attr('id');
if($('#' + ident).length == 0 && profile_page == 1) {
$('img',this).each(function() {
$(this).attr('src',$(this).attr('dst'));
});
$('#' + prev).after($(this));
$("abbr.wall-item-ago-time").timeago();
}
else {
$('img',this).each(function() {
$(this).attr('src',$(this).attr('dst'));
});
$('#' + ident).replaceWith($(this));
$("abbr.wall-item-ago-time").timeago();
}
prev = ident;
});
}
if(mode === 'append') {
next = 'threads-end';
$('.thread-wrapper',data).each(function() {
var ident = $(this).attr('id');
if($('#' + ident).length == 0) {
$('img',this).each(function() {
$(this).attr('src',$(this).attr('dst'));
});
$('#threads-end').before($(this));
$("abbr.wall-item-ago-time").timeago();
}
else {
$('img',this).each(function() {
$(this).attr('src',$(this).attr('dst'));
});
$('#' + ident).replaceWith($(this));
$("abbr.wall-item-ago-time").timeago();
}
});
}
if(mode === 'replace') {
// clear existing content
$('.thread-wrapper',data).each(function() {
var ident = $(this).attr('id');
if($('#' + ident).length == 0 && profile_page == 1) {
$('img',this).each(function() {
$(this).attr('src',$(this).attr('dst'));
});
$('#' + prev).after($(this));
$("abbr.wall-item-ago-time").timeago();
}
prev = ident;
});
}
$('.like-rotator').hide();
if(commentBusy) {
commentBusy = false;
$('body').css('cursor', 'auto');
}
/* autocomplete @nicknames */
$(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl");
}
function liveUpdate() {
if((src == null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; }
if(($('.comment-edit-text-full').length) || (in_progress)) {
@ -230,74 +315,7 @@
$.get(update_url,function(data) {
in_progress = false;
// $('.collapsed-comments',data).each(function() {
// var ident = $(this).attr('id');
// var is_hidden = $('#' + ident).is(':hidden');
// if($('#' + ident).length) {
// $('#' + ident).replaceWith($(this));
// if(is_hidden)
// $('#' + ident).hide();
// }
//});
// add a new thread
$('.thread-wrapper',data).each(function() {
var ident = $(this).attr('id');
if($('#' + ident).length == 0 && profile_page == 1) {
$('img',this).each(function() {
$(this).attr('src',$(this).attr('dst'));
});
$('#' + prev).after($(this));
$("abbr.wall-item-ago-time").timeago();
}
else {
$('img',this).each(function() {
$(this).attr('src',$(this).attr('dst'));
});
$('#' + ident).replaceWith($(this));
$("abbr.wall-item-ago-time").timeago();
}
prev = ident;
});
// reset vars for inserting individual items
/* prev = 'live-' + src;
$('.wall-item-outside-wrapper',data).each(function() {
var ident = $(this).attr('id');
if($('#' + ident).length == 0 && prev != 'live-' + src) {
$('img',this).each(function() {
$(this).attr('src',$(this).attr('dst'));
});
$('#' + prev).after($(this));
}
else {
$('#' + ident + ' ' + '.wall-item-ago').replaceWith($(this).find('.wall-item-ago'));
if($('#' + ident + ' ' + '.comment-edit-text-empty').length)
$('#' + ident + ' ' + '.wall-item-comment-wrapper').replaceWith($(this).find('.wall-item-comment-wrapper'));
$('#' + ident + ' ' + '.hide-comments-total').replaceWith($(this).find('.hide-comments-total'));
$('#' + ident + ' ' + '.wall-item-like').replaceWith($(this).find('.wall-item-like'));
$('#' + ident + ' ' + '.wall-item-dislike').replaceWith($(this).find('.wall-item-dislike'));
$('#' + ident + ' ' + '.my-comment-photo').each(function() {
$(this).attr('src',$(this).attr('dst'));
});
}
prev = ident;
});
*/
$('.like-rotator').hide();
if(commentBusy) {
commentBusy = false;
$('body').css('cursor', 'auto');
}
/* autocomplete @nicknames */
$(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl");
updateConvItems('update',data);
});
@ -654,7 +672,7 @@ Array.prototype.remove = function(item) {
function previewTheme(elm) {
theme = $(elm).val();
$.getJSON('pretheme?f=&theme=' + theme,function(data) {
$('#theme-preview').html('<div id="theme-desc">' + data.desc + '</div><a href="' + data.img + '"><img src="' + data.img + '" width="320" height="240" alt="' + theme + '" /></a>');
$('#theme-preview').html('<div id="theme-desc">' + data.desc + '</div><div id="theme-version">' + data.version + '</div><div id="theme-credits">' + data.credits + '</div><a href="' + data.img + '"><img src="' + data.img + '" width="320" height="240" alt="' + theme + '" /></a>');
});
}

View File

@ -985,7 +985,7 @@ function photos_content(&$a) {
call_hooks('photo_upload_form',$ret);
$default_upload = '<input type="file" name="userfile" /> <div class="photos-upload-submit-wrapper" >
$default_upload = '<input id="photos-upload-choose" type="file" name="userfile" /> <div class="photos-upload-submit-wrapper" >
<input type="submit" name="submit" value="' . t('Submit') . '" id="photos-upload-submit" /> </div>';

View File

@ -7,10 +7,16 @@ function pretheme_init(&$a) {
$info = get_theme_info($theme);
if($info) {
// unfortunately there will be no translation for this string
$desc = $info['description'] . ' ' . $info['version'];
$desc = $info['description'];
$version = $info['version'];
$credits = $info['credits'];
}
else $desc = '';
echo json_encode(array('img' => get_theme_screenshot($theme), 'desc' => $desc));
else {
$desc = '';
$version = '';
$credits = '';
}
echo json_encode(array('img' => get_theme_screenshot($theme), 'desc' => $desc, 'version' => $version, 'credits' => $credits));
}
killme();
}

View File

@ -1,5 +1,5 @@
<ul class="tabs">
{{ for $tabs as $tab }}
<li><a href="$tab.url" class="tab button $tab.sel"{{ if $tab.title }} title="$tab.title"{{ endif }}>$tab.label</a></li>
<li id="$tab.id"><a href="$tab.url" class="tab button $tab.sel"{{ if $tab.title }} title="$tab.title"{{ endif }}>$tab.label</a></li>
{{ endfor }}
</ul>

View File

@ -1,3 +1,4 @@
<div id="threads-begin"></div>
{{ for $threads as $thread }}
<div id="thread-wrapper-$thread.id" class="thread-wrapper">
{{ for $thread.items as $item }}
@ -15,7 +16,7 @@
{{ endfor }}
</div>
{{ endfor }}
<div id="threads-end"></div>
<div id="conversation-end"></div>
{{ if $dropping }}

View File

@ -283,9 +283,9 @@ function enableOnUser(){
if(reply && reply.length) {
commentBusy = true;
$('body').css('cursor', 'wait');
$.get('filer/' + id + '?term=' + reply);
if(timer) clearTimeout(timer);
timer = setTimeout(NavUpdate,3000);
$.get('filer/' + id + '?term=' + reply, NavUpdate);
// if(timer) clearTimeout(timer);
// timer = setTimeout(NavUpdate,3000);
liking = 1;
$.fancybox.close();
} else {

View File

@ -28,7 +28,7 @@
<div id="photo-edit-rotate-end"></div>
<div id="photo-edit-perms" class="photo-edit-perms" >
<a href="#photo-edit-perms-select" id="photo-edit-perms-menu" class="button" title="$permissions"/>
<a href="#photo-edit-perms-select" id="photo-edit-perms-menu" class="button popupbox" title="$permissions"/>
<span id="jot-perms-icon" class="icon $lockstate" ></span>$permissions
</a>
<div id="photo-edit-perms-menu-end"></div>
@ -47,9 +47,4 @@
<div id="photo-edit-end"></div>
</form>
<script>
$("a#photo-edit-perms-menu").fancybox({
'transitionIn' : 'none',
'transitionOut' : 'none'
});
</script>

View File

@ -23,7 +23,7 @@
<div id="photos-upload-perms" class="photos-upload-perms" >
<a href="#photos-upload-permissions-wrapper" id="photos-upload-perms-menu" class="button" />
<a href="#photos-upload-permissions-wrapper" id="photos-upload-perms-menu" class="button popupbox" />
<span id="jot-perms-icon" class="icon $lockstate" ></span>$permissions
</a>
<div id="photos-upload-perms-end"></div>
@ -43,9 +43,3 @@
<div class="photos-upload-end" ></div>
</form>
<script>
$("a#photos-upload-perms-menu").fancybox({
'transitionIn' : 'none',
'transitionOut' : 'none'
});
</script>

View File

@ -172,7 +172,6 @@ $lbl_about
</div>
<div id="about-jot-end"></div>
</div>
<div id="interest-jot-wrapper" >
@ -184,7 +183,6 @@ $lbl_hobbies
</div>
<div id="interest-jot-end"></div>
</div>
<div id="likes-jot-wrapper" >
@ -196,7 +194,6 @@ $lbl_likes
</div>
<div id="likes-jot-end"></div>
</div>
<div id="dislikes-jot-wrapper" >
@ -208,7 +205,6 @@ $lbl_dislikes
</div>
<div id="dislikes-jot-end"></div>
</div>
<div id="contact-jot-wrapper" >
@ -220,7 +216,6 @@ $lbl_social
</div>
<div id="contact-jot-end"></div>
</div>
<div class="profile-edit-submit-wrapper" >
@ -238,7 +233,6 @@ $lbl_music
</div>
<div id="music-jot-end"></div>
</div>
<div id="book-jot-wrapper" >
<p id="book-jot-desc" >
@ -249,7 +243,6 @@ $lbl_book
</div>
<div id="book-jot-end"></div>
</div>
@ -262,7 +255,6 @@ $lbl_tv
</div>
<div id="tv-jot-end"></div>
</div>
@ -275,7 +267,6 @@ $lbl_film
</div>
<div id="film-jot-end"></div>
</div>
<div class="profile-edit-submit-wrapper" >
@ -293,7 +284,6 @@ $lbl_love
</div>
<div id="romance-jot-end"></div>
</div>
@ -306,7 +296,6 @@ $lbl_work
</div>
<div id="work-jot-end"></div>
</div>
@ -319,7 +308,6 @@ $lbl_school
</div>
<div id="education-jot-end"></div>
</div>
@ -331,4 +319,4 @@ $lbl_school
</form>
</div>
<script type="text/javascript">Fill_Country('$country_name');Fill_States('$region');</script>
<script type="text/javascript">Fill_Country('$country_name');Fill_States('$region');</script>

View File

@ -1,3 +1,4 @@
<div id="threads-begin"></div>
{{ for $threads as $thread }}
<div id="thread-wrapper-$thread.id" class="thread-wrapper">
{{ for $thread.items as $item }}
@ -15,7 +16,7 @@
{{ endfor }}
</div>
{{ endfor }}
<div id="threads-end"></div>
<div id="conversation-end"></div>
{{ if $dropping }}

View File

@ -1,3 +1,4 @@
<div id="threads-begin"></div>
{{ for $threads as $thread }}
<div id="thread-wrapper-$thread.id" class="thread-wrapper">
{{ for $thread.items as $item }}
@ -21,7 +22,7 @@
{{ endfor }}
</div>
{{ endfor }}
<div id="threads-end"></div>
<div id="conversation-end"></div>
{{ if $dropping }}