[buddypress-trac] [BuddyPress Trac] #6570: Add UI for adding Profile Header Images for Users and Groups

buddypress-trac noreply at wordpress.org
Fri Jul 31 12:55:23 UTC 2015


#6570: Add UI for adding Profile Header Images for Users and Groups
--------------------------+------------------
 Reporter:  mercime       |       Owner:
     Type:  enhancement   |      Status:  new
 Priority:  normal        |   Milestone:  2.4
Component:  API           |     Version:
 Severity:  normal        |  Resolution:
 Keywords:  dev-feedback  |
--------------------------+------------------

Comment (by imath):

 I'm sorry, this is going to be a long comment :(

 First i now understand better r-a-y's advice about the fact we should only
 provide support for "twenties" theme. I think he's absolutely right.
 Second, it's definitely a theme feature, so i really think we should rely
 on the WordPress "theme_support" API.
 Third, thanks for your feedback @BuddyBoss, it made me realize that if the
 theme add supports for the cover image then when checking if the current
 theme supports the feature within a plugin or the theme, it will return
 true even if BuddyPress is deactivated, so if you need to include file
 that are using BuddyPress functions or classes, i guess we need to find an
 easy way to try to avoid any trouble.

 So in 6570.first-step.patch, i've taken in account these three points. And
 here's what's inside this first step:

 Here's an example of how a theme could set the support for BuddyPress
 cover images :

 {{{
 add_theme_support( 'buddypress-cover-images', array(
         'width'        => $width,
         'height'       => $height,
         'callback'     => 'theme_prefix_cover_images_callback',
 ) );
 }}}

 Imho, as it will be very difficult for BuddyPress to be sure of how the
 item-header is for any theme, i strongly advise the theme to define the
 callback parameter. This callback will then return an inline css we will
 be able to output.

 Then i thought this may be enough in most cases, but maybe not in some
 cases. So i think we should also be able to have different parameters
 according to the single item. So far we have Members and Groups single
 items, and in a near future the Blogs one and who knows plugins can also
 add their specific single items..

 So i think we should extend this by component. In the patch
 `bp_set_theme_support()` is doing this job. If the theme support is like
 the above, each single items header will use these parameters, but a theme
 might want to use different dimensions/callback according to the
 component. So it can achieve this by using :

 {{{
 add_theme_support( 'buddypress-cover-images', array(
         /* buddypress()->members->id */
         'members' => array(
                 'width'        => $width_members,
                 'height'       => $height_members,
                 'callback'     =>
 'theme_prefix_members_cover_images_callback',
         ),
         /* buddypress()->groups->id */
         'groups' => array(
                 'width'        => $width_groups,
                 'height'       => $height_groups,
                 'callback'     =>
 'theme_prefix_groups_cover_images_callback',
         ),
 ) );
 }}}

 Or the theme can also choose to support only one component, for example to
 only add support to members cover images, he can do this :

 {{{
 add_theme_support( 'buddypress-cover-images', array(
         /* buddypress()->members->id */
         'members' => array(
                 'width'        => $width_members,
                 'height'       => $height_members,
                 'callback'     =>
 'theme_prefix_members_cover_images_callback',
         ),
 ) );
 }}}

 I've also made available a 'default_cover' parameter if the theme wants to
 provide a "mystery cover". I think BuddyPress just need to display the
 item-header like it is today if the user/group has no cover image.

 If the theme's need to be sure BuddyPress is ready to bring the support,
 he can use this check :
 {{{
         if ( ! current_theme_supports( 'buddypress-cover-images',
 'inactive' ) ) {
                 require( 'file' );
         }
 }}}

 By default without BuddyPress activated, `current_theme_supports(
 'feature', 'parameter' )` will always be true if the theme added support
 for the feature. `bp_set_theme_support()` will set inactive as false,
 meaning BuddyPress can bring the support. Of course the theme could also
 use something like:

 {{{
 if ( function_exists( 'buddypress' ) && bp_is_active( 'members' ) ) {
         require( 'file' );
 }
 }}}

 But i thought it was less pretty :)

 About the twenties. `BP_Legacy->setup_supports()` is there to bring the
 BuddyPress cover images feature by default (unless the twenty theme
 already added this support, eg: a child theme could do this). I've
 realized that since the introduction of the companion stylesheets that for
 each concerned themes we cannot rely anymore on the `$content_width`
 global. So i've used width my browser calculated for the themes having a
 companion stylesheet, i guess it needs to be checked..

 ==== Now how the cover image should look like ? ====

 First i've tested @modemlooper's plugin. And unless i did something wrong,
 once i've uploaded a valid cover image, nothing was displayed into my
 profile header. After a deeper look, i guess i may miss a css rule in my
 theme, because the plugin is adding a new div above the item-header and
 uses the uploaded cover photo as a background. The problem is my div has
 no height, and the cover photo is not displayed. I've added a height of
 around 300px and it showed over the item-header. Imho, i think we
 shouldn't add an extra div but directly use the existing `#item-header` a
 bit like what's doing the Boss theme by @BuddyBoss. But then, we have a
 probleme! We do have a lot of text in this div, and once i've tested
 without too much css manipulation, this is what i got on twentyfifteen:

 [[Image(https://cldup.com/63b1pCJ-YK.png)]]

 It's pretty difficult to read the text!

 I like what's doing the Boss theme, well Facebook & Twitter are kind of
 doing similar things, they use a white color with a text shadow. But
 applying this trick on each text of this div without touching the action
 buttons is a bit annoying and we hardly enjoy the cover image as she's
 full of text. So the best way of displaying it seems to be this one imho:

 In twentyfifteen :
 [[Image(https://cldup.com/qS4B55TF2J.png)]]

 In twentyfourteen :
 [[Image(https://cldup.com/53xTcahO-N.png)]]

 In twentythirteen :
 [[Image(https://cldup.com/vY-LihPG0g.png)]]

 In twentytwelve :
 [[Image(https://cldup.com/Y9IJtdm-tU.png)]]

 Even if twentytwelve fails (because unlike the others the item-header-
 content has no width) It's interesting to see that the white on white is
 still readable :)

 The next problem is smaller screen. If we're ok with the layout i'm
 suggesting, i think we should have this kind of layout on smaller screens
 :
 [[Image(https://cldup.com/5AMJE8mLkh.png)]]

 As you can see this is not an easy part, and i'm not the best in web
 design! So it would be awesome if @hnla @mercime @BuddyBoss and every "web
 design star" could find the best solution on how to display this cover
 photo. If you need to run some tests, you just need to apply the patch and
 switch themes. The css part to edit is in `src/bp-templates/bp-legacy
 /buddypress-functions.php` inside the `bp_legacy_theme_cover_image()`
 function. PS: i haven't done anything for the groups cover images as you
 will see.

 ==== Uploads / BP Attachments API ====

 I'm now going to explore this part of the patch, but before going too fast
 and furious about it, i'd like to have your feedback about my first ideas:
 - the UI to set the cover image should be similar to the Avatar one
 (extendable tabbed interface: Upload|delete at the begining)
 - It's time we think about what's the best file organization. as i've said
 in this [https://buddypress.trac.wordpress.org/ticket/6570#comment:8
 comment]. My personal preference would be
 `uploads/buddypress/component_id/component_single_item_id/subfolders`
 where subfolders could be 'avatar', 'cover-image', 'year/month' (< like
 WordPress Year than a subfolder for each month). For the members component
 it would be `uploads/buddypress/members/1/cover-image`. Problem is:
 `rename( 'uploads/avatars/1', 'uploads/buddypress/members/1/avatar' )`. Of
 course we can use `/uploads/cover-images`, `/uploads/group-cover-images`
 etc.. But it seems less "tidied" to me, and i think having a 'buddypress'
 root folder makes it easier to understand for users..
 - It may be the time to "init" what could be the structure of a future
 required component using a specific custom post type to organize the files
 and extending the WordPress Attachments API according to our specific
 needs.
 - We would then be able to have a very generic upload UI and eventually
 add a new browse 'tab' to the avatar's one and the future cover images's
 one so that users could be able to choose an already uploaded image as an
 avatar or a cover photo, or so that it would be easier to include an
 'Upload|Browse' UI inside the activity post form...

 Or we could reproduce how we're doing with avatars..

 What do you think/prefer ?

--
Ticket URL: <https://buddypress.trac.wordpress.org/ticket/6570#comment:19>
BuddyPress Trac <http://buddypress.org/>
BuddyPress Trac


More information about the buddypress-trac mailing list