diff --git a/include/Photo.php b/include/Photo.php index 7341935767..5920f80b38 100644 --- a/include/Photo.php +++ b/include/Photo.php @@ -778,8 +778,7 @@ function guess_image_type($filename, $fromcurl=false) { * @return array Returns array of the different avatar sizes */ function update_contact_avatar($avatar, $uid, $cid, $force = false) { - - $r = q("SELECT `avatar`, `photo`, `thumb`, `micro` FROM `contact` WHERE `id` = %d LIMIT 1", intval($cid)); + $r = q("SELECT `avatar`, `photo`, `thumb`, `micro`, `nurl` FROM `contact` WHERE `id` = %d LIMIT 1", intval($cid)); if (!dbm::is_result($r)) { return false; } else { @@ -793,6 +792,15 @@ function update_contact_avatar($avatar, $uid, $cid, $force = false) { q("UPDATE `contact` SET `avatar` = '%s', `photo` = '%s', `thumb` = '%s', `micro` = '%s', `avatar-date` = '%s' WHERE `id` = %d", dbesc($avatar), dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), dbesc(datetime_convert()), intval($cid)); + + // Update the public contact (contact id = 0) + if ($uid != 0) { + $pcontact = dba::select('contact', array('id'), array('nurl' => $r[0]['nurl']), array('limit' => 1)); + if (dbm::is_result($pcontact)) { + update_contact_avatar($avatar, 0, $pcontact['id'], $force); + } + } + return $photos; } } @@ -847,9 +855,30 @@ function import_profile_photo($photo, $uid, $cid, $quit_on_error = false) { $photo_failure = true; } - $photo = App::get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt(); - $thumb = App::get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt(); - $micro = App::get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt(); + $suffix = '?ts='.time(); + + $photo = App::get_baseurl() . '/photo/' . $hash . '-4.' . $img->getExt() . $suffix; + $thumb = App::get_baseurl() . '/photo/' . $hash . '-5.' . $img->getExt() . $suffix; + $micro = App::get_baseurl() . '/photo/' . $hash . '-6.' . $img->getExt() . $suffix; + + // Remove the cached photo + $a = get_app(); + $basepath = $a->get_basepath(); + + if (is_dir($basepath."/photo")) { + $filename = $basepath.'/photo/'.$hash.'-4.'.$img->getExt(); + if (file_exists($filename)) { + unlink($filename); + } + $filename = $basepath.'/photo/'.$hash.'-5.'.$img->getExt(); + if (file_exists($filename)) { + unlink($filename); + } + $filename = $basepath.'/photo/'.$hash.'-6.'.$img->getExt(); + if (file_exists($filename)) { + unlink($filename); + } + } } else { $photo_failure = true; } diff --git a/include/identity.php b/include/identity.php index 3ab25cdc45..25b24f289b 100644 --- a/include/identity.php +++ b/include/identity.php @@ -152,7 +152,9 @@ function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0) { if ($profile) { $profile_int = intval($profile); - $r = q("SELECT `contact`.`id` AS `contact_id`, `profile`.`uid` AS `profile_uid`, `profile`.*, + $r = q("SELECT `contact`.`id` AS `contact_id`, `contact`.`photo` AS `contact_photo`, + `contact`.`thumb` AS `contact_thumb`, `contact`.`micro` AS `contact_micro`, + `profile`.`uid` AS `profile_uid`, `profile`.*, `contact`.`avatar-date` AS picdate, `contact`.`addr`, `user`.* FROM `profile` INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` AND `contact`.`self` @@ -163,7 +165,9 @@ function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0) { ); } if (!dbm::is_result($r)) { - $r = q("SELECT `contact`.`id` AS `contact_id`, `profile`.`uid` AS `profile_uid`, `profile`.*, + $r = q("SELECT `contact`.`id` AS `contact_id`, `contact`.`photo` as `contact_photo`, + `contact`.`thumb` AS `contact_thumb`, `contact`.`micro` AS `contact_micro`, + `profile`.`uid` AS `profile_uid`, `profile`.*, `contact`.`avatar-date` AS picdate, `contact`.`addr`, `user`.* FROM `profile` INNER JOIN `contact` ON `contact`.`uid` = `profile`.`uid` AND `contact`.`self` @@ -365,9 +369,9 @@ function profile_sidebar($profile, $block = 0) { 'fullname' => $profile['name'], 'firstname' => $firstname, 'lastname' => $lastname, - 'photo300' => App::get_baseurl() . '/photo/custom/300/' . $profile['uid'] . '.jpg', - 'photo100' => App::get_baseurl() . '/photo/custom/100/' . $profile['uid'] . '.jpg', - 'photo50' => App::get_baseurl() . '/photo/custom/50/' . $profile['uid'] . '.jpg', + 'photo300' => $profile['contact_photo'], + 'photo100' => $profile['contact_thumb'], + 'photo50' => $profile['contact_micro'], ); else $diaspora = false; @@ -410,9 +414,9 @@ function profile_sidebar($profile, $block = 0) { else $p["address"] = bbcode($p["location"]); - if (isset($p["photo"])) + if (isset($p["photo"])) { $p["photo"] = proxy_url($p["photo"], false, PROXY_SIZE_SMALL); - + } if ($a->theme['template_engine'] === 'internal') $location = template_escape($location); diff --git a/mod/contacts.php b/mod/contacts.php index 21a4f7446a..30b8dde20e 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -307,7 +307,7 @@ function _contact_update_profile($contact_id) { ); // Update the entry in the contact table - update_contact_avatar($data['photo'], local_user(), $contact_id); + update_contact_avatar($data['photo'], local_user(), $contact_id, true); // Update the entry in the gcontact table update_gcontact_from_probe($data["url"]); diff --git a/util/Doxyfile b/util/Doxyfile index e3a3e36f1d..373d172558 100644 --- a/util/Doxyfile +++ b/util/Doxyfile @@ -1,4 +1,4 @@ -INPUT = README.md index.php boot.php testargs.php update.php mod/ object/ include/ js/ util/ view/ version.inc +INPUT = README.md index.php boot.php testargs.php update.php mod/ object/ include/ js/ util/ view/ src/ version.inc RECURSIVE = YES PROJECT_NAME = "Friendica" PROJECT_LOGO = images/friendica-64.jpg diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css index 01cab105bc..8cc8997930 100644 --- a/view/theme/frio/css/style.css +++ b/view/theme/frio/css/style.css @@ -100,6 +100,36 @@ code { } .help-content-wrapper code, .help-aside-wrapper code {display: inline} +/** + * mobile aside + */ +@media screen and (max-width: 990px) { + aside{ + position: fixed!important; + top: 0!important; + background-color: #fff; + width: 100%; + max-width: 300px; + height: 100%; + padding-top: 100px; + z-index: 10; + } + aside::before { + content: " "; + position: fixed; + display: block; + top: 0; left: 300px; right: 0; bottom: 0; + background-color: rgba(0,0,0,0.4); + opacity: 0; + transition: opacity 0.5s; + } + aside.canvas-slid::before { + opacity: 1; + } + + /* prevent page scroll when the aside is opened **/ + body.aside-out { overflow: hidden; } +} /* * standard page elements */ diff --git a/view/theme/frio/frameworks/sticky-kit/jquery.sticky-kit.min.js b/view/theme/frio/frameworks/sticky-kit/jquery.sticky-kit.min.js new file mode 100644 index 0000000000..e2a3c6de9e --- /dev/null +++ b/view/theme/frio/frameworks/sticky-kit/jquery.sticky-kit.min.js @@ -0,0 +1,9 @@ +/* + Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net +*/ +(function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k)); +if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("
"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q, +u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),eb&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}), +a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize", +y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n 976) { + $("aside").stick_in_parent({ + offset_top: 100, // px, header + tab bar + spacing + recalc_every: 10 + }); + // recalculate sticky aside on clicks on elements + // this handle height changes on expanding submenus + $("aside").on("click", "a", function(){ + $(document.body).trigger("sticky_kit:recalc"); + }); + } + + /* + * Add or remove "aside-out" class to body tag + * when the mobile aside is shown or hidden. + * The class is used in css to disable scroll in page when the aside + * is shown. + */ + $("aside") + .on("shown.bs.offcanvas", function() { + $("body").addClass("aside-out"); + }) + .on("hidden.bs.offcanvas", function() { + $("body").removeClass("aside-out"); + }); + }); function openClose(theID) { diff --git a/view/theme/frio/templates/head.tpl b/view/theme/frio/templates/head.tpl index 882d2215cf..2cf71da035 100644 --- a/view/theme/frio/templates/head.tpl +++ b/view/theme/frio/templates/head.tpl @@ -82,6 +82,7 @@ + {{* own js files *}}