• [MOD] Member personal photo v1.1.3 by V@no (2011-10-23) 4 0 5 1
Currently:  

Author Topic: [MOD] Member personal photo v1.1.3 by V@no (2011-10-23)  (Read 326234 times)

0 Members and 1 Guest are viewing this topic.

Offline martrix

  • Hero Member
  • *****
  • Posts: 755
    • View Profile
    • overlord.cz
[MOD] Member personal photo v1.1.3 by V@no (2011-10-23)
« on: March 15, 2005, 09:44:32 PM »
Originally posted by / Author: V@no

----- [ Overview ] -----

This mod will alow your members upload their photo that will be displayed in their profile.


----- [ Changed Files ] -----

member.php

includes/db_field_definitions.php
lang/<yourlanguage>/main.php
lang/<yourlanguage>/admin.php
admin/settings.php
admin/users.php
templates/<yourtemplate>/member_editprofile.html
templates/<yourtemplate>/member_profile.html
[/color]

----- [ New Files ]-----

userpic_install.php


----- [ New Folder ] -----

data/userpic/



----- [ Installation ] -----

Step 1
Open member.php
Find:

Code: [Select]
     "user_homepage_button" => $user_homepage_button,
Insert above:
Code: [Select]

//User Pic
      "userpic_img" => ($config['userpic'] && $user_row['userpic']) ? ROOT_PATH."data/userpic/".$user_row['userpic'] : "",
//End User Pic


Step 1.1
Find:

Code: [Select]
 if (!$error && $user_email != $user_info['user_email'] && $user_info['user_level'] != ADMIN && $config['account_activation'] != 0) {
Insert above:
Code: [Select]
// Upload User Pic
  $userpic = $userpic_new = "";
  if (!$error && $config['userpic'])
  {
    $userpics_dir = ROOT_PATH."data/userpic/";
    if (!empty($HTTP_POST_FILES['userpic_file']['tmp_name']) && $HTTP_POST_FILES['userpic_file']['tmp_name'] != "none")
    {
      if (isset($HTTP_COOKIE_VARS['userpic_file']) || isset($HTTP_POST_VARS['userpic_file']) || isset($HTTP_GET_VARS['userpic_file'])) {
        die("Security violation");
      }
      if (!function_exists("is_uploaded_file")) {
        function is_uploaded_file($file_name) {
          if (!$tmp_file = @get_cfg_var('upload_tmp_dir')) {
            $tmp_file = tempnam('','');
            $deleted = @unlink($tmp_file);
            $tmp_file = dirname($tmp_file);
          }
          $tmp_file .= '/'.basename($file_name);
          return (ereg_replace('/+', '/', $tmp_file) == $file_name) ? 1 : 0;
        }
      
        function move_uploaded_file($file_name, $destination) {
          return (is_uploaded_file($file_name)) ? ((copy($file_name, $destination)) ? 1 : 0) : 0;
        }
      }
      $error = array();
      $extensions = array(
        "jpg",
        "jpeg",
        "gif",
        "png"
      );
      $mime_types = array();
      $mime_type_match = array();
      include_once(ROOT_PATH.'includes/upload_definitions.php');
      foreach($extensions as $val)
        $mime_types = array_merge($mime_types, $mime_type_match[$val]);
      $mime_types = array_unique($mime_types);
      $userpic_ext = strtolower(substr(strrchr($HTTP_POST_FILES['userpic_file']['name'],"."), 1));
      $userpic_mime = $HTTP_POST_FILES['userpic_file']['type'];
      if (!in_array($userpic_mime, $mime_types) || !in_array($userpic_ext, $extensions))
      {
        $error[] = $lang['invalid_file_type']. " (".$userpic_ext.", ".$HTTP_POST_FILES['userpic_file']['type'].")";
      }
      if ($HTTP_POST_FILES['userpic_file']['size'] > $config['userpic_size'] * 1024)
      {
        $error[] = $lang['invalid_file_size'];
      }
      if (empty($error))
      {
        $userpic_name = $user_info['user_id'].".".$userpic_ext;
        $userpic_file = $userpics_dir.$userpic_name;
         if (file_exists($userpic_file))
         {
            unlink($userpic_file);
        }
        if (!move_uploaded_file($HTTP_POST_FILES['userpic_file']['tmp_name'], $userpic_file))
        {
          $error[] = $lang['file_copy_error'];
        }
        else
        {
          @chmod($userpic_file, CHMOD_FILES);
        }
      }
      if (empty($error))
      {
        $userpic = $HTTP_POST_VARS['userpic'] = $userpic_new = $userpic_name;
        if ($user_info['userpic'] != $userpic_name && file_exists($userpics_dir.$user_info['userpic']))
        {
          @unlink($userpics_dir.$user_info['userpic']);
        }
        if (!function_exists(init_convert_options))
        {
          require(ROOT_PATH.'includes/image_utils.php');
        }
        $image_info = getimagesize($userpic_file);
        $convert_options = init_convert_options();
        if (($image_info[0] > $config['userpic_width'] || $image_info[1] > $config['userpic_height']))
        {
          if ($convert_options['convert_error'] || (!$convert_options['convert_error'] && !resize_image($userpic_file, 85, $config['userpic_width'], 1, $config['userpic_height'])))
          {
            if ($image_info[0] > $config['userpic_width'])
            {
              $error[] = $lang['invalid_image_width'];
            }
            if ($image_info[1] > $config['userpic_height'])
            {
              $error[] = $lang['invalid_image_height'];
            }
          }
        }
      }
      if (!empty($error))
      {
        $msg .= (($msg != "") ? "<br />" : "")."<b>".$lang['file_upload_error'].": ".$HTTP_POST_FILES['userpic_file']['name']."</b><br />";
        foreach ($error as $val) {
          $msg .= "<b>".$HTTP_POST_FILES['userpic_file']['name'].":</b> ".$val."<br />";
        }
        $HTTP_POST_VARS['userpic'] = $user_info['userpic'];
      }
    }
    else
    {
      if (isset($HTTP_POST_VARS['userpic_del']) && $HTTP_POST_VARS['userpic_del'])
      {
        @unlink($userpics_dir.$user_info['userpic']);
        $HTTP_POST_VARS['userpic'] = $userpic = "";
        $userpic_new = 1;
      }
    }
  }
// End Upload User Pic


Step 1.2
Find:
Code: [Select]
   "user_showemail_yes" => $user_showemail_yes,
Insert above:
Code: [Select]
//User Pic
    "userpic_allowed" => $config['userpic'],
    "userpic_img" => ($user_info['userpic']) ? ROOT_PATH."data/userpic/".$user_info['userpic'] : "",
    "lang_userpic_del" => $lang['userpic_del'],
    "lang_userpic_upload" => preg_replace("/".$site_template->start."userpic_max_size".$site_template->end."/siU", $config['userpic_size']."&nbsp;".$lang['kb'], preg_replace("/".$site_template->start."userpic_max_width".$site_template->end."/siU", $config['userpic_width'], preg_replace("/".$site_template->start."userpic_max_height".$site_template->end."/siU", $config['userpic_height'], $lang['userpic_upload']))),
    "userpic_max_width" => $config['userpic_width'],
    "userpic_max_height" => $config['userpic_height'],
    "userpic_max_size" => $config['userpic_size']."&nbsp;".$lang['kb'],
//End User Pic



Step 2
Open includes/db_field_definitions.php
At the end, above closing ?> insert:
Code: [Select]
$additional_user_fields['userpic'] = array($lang['userpic'], "text", 0);


Step 3
Open lang/<yourlanguage>/main.php
At the end, above closing ?> insert:

Code: [Select]
//-----------------------------------------------------
//--- User Pic ----------------------------------------
//-----------------------------------------------------
$lang['userpic'] = "Personal picture";
$lang['userpic_del'] = "Remove";
$lang['userpic_upload'] = "Maximum image size: {userpic_max_size}.<br />Image larger {userpic_max_width}x{userpic_max_height} will be resized";
$lang['file_copy_error'] = "Copy error. Please check the directory permissions.";
//--- End User Pic ------------------------------------



Step 4
Open lang/<yourlanguage>/admin.php
At the end, above closing ?> insert:
Code: [Select]
//User Pic
/*-- Setting-Group Member Personal Photo --*/
$setting_group['memberpersonalphoto']="Personal Picture";
$setting['userpic'] = "Activate";
$setting['userpic_size'] = "Max. image size in KB";
$setting['userpic_width'] = "Max. image width in pixel";
$setting['userpic_height'] = "Max. image height in pixel";
//End User Pic



Step 5
Open admin/settings.php
Find:
Code: [Select]
 show_form_footer($lang['save_changes'], "", 2);
Insert above:
Code: [Select]
//User Pic
  show_table_separator($setting_group['memberpersonalphoto'], 2, "setting_group_memberpersonalphoto");
  show_setting_row("userpic", "radio");
  show_setting_row("userpic_width");
  show_setting_row("userpic_height");
  show_setting_row("userpic_size");
//End User Pic



Step 6
Open templates/<yourtemplate>/member_editprofile.html
Find:
Code: [Select]
<form method="post" action="{url_member}">
Replace it with:
Code: [Select]
<form method="post" action="{url_member}" enctype="multipart/form-data">
or just make sure that enctype="multipart/form-data" is present inside the <form> tag.


Step 6.1
Find:
Code: [Select]
         <tr>
            <td class="row2"><b>{lang_icq}</b></td>
            <td class="row2"><input type="text" name="user_icq"  size="30" value="{user_icq}" class="input" /></td>
          </tr>

Insert below:
Code: [Select]
{if userpic_allowed}
          <tr>
            <td class="row1" valign="top"><b>{lang_userpic}</b>
              <SPAN class="smalltext">
                <br />
                <B>{lang_userpic_upload}</B>
              </SPAN>
            </td>
            <td class="row1">
              <INPUT type="file" name="userpic_file"  size="30" class="input" /><br />
              {if userpic_img}<img src="{userpic_img}"><br /><input type="checkbox" name="userpic_del" value="1">&nbsp;{lang_userpic_del}{endif userpic_img}
            </TD>
          </TR>
{endif userpic_allowed}
(ofcourse u can add it anywhere u want in this file)



Step 7 updated 28.6.2006
Open templates/<yourtemplate>/member_profile.html
Find:
Code: [Select]
       <tr>
          <td class="row2"><b>{lang_icq}</b></td>
          <td class="row2">{if user_icq}<a href="http://wwp.icq.com/scripts/search.dll?to={user_icq}">{user_icq}</a> (<b>{user_icq_status}</b>){endif user_icq}</td>
        </tr>

Replace with:
Code: [Select]
       <tr>
          <td class="row2"><b>{lang_icq}</b></td>
          <td class="row2">{if user_icq}<a href="http://www.icq.com/people/about_me.php?uin={user_icq}">{user_icq}</a> (<b>{user_icq_status}</b>){endif user_icq}</td>
        </tr>
{if userpic_img}
        <tr>
          <td class="row1" valign="top"><b>{lang_userpic}</b></td>
          <td class="row1"><img src="{userpic_img}"></td>
        </tr>
{endif userpic_img}



Step 8
Create a new folder: data/userpic/
Set CHMOD 777 (unix systems only) and make sure its writible by your webserver.



Step 9
Download this package, extract it and upload to your 4images root directory, then execute it by typing in your browser: http://<your_site_address_and_path_to_your_4images>/userpic_install.php
Follow the instructions.

Or u can update your database manualy by executing this MySQL query:
Code: [Select]
ALTER TABLE `4images_users` ADD `userpic` varchar(255) NOT NULL default '';
INSERT INTO `4images_settings` ( `setting_name` , `setting_value` ) VALUES ('userpic', '1');
INSERT INTO `4images_settings` ( `setting_name` , `setting_value` ) VALUES ('userpic_size', '500');
INSERT INTO `4images_settings` ( `setting_name` , `setting_value` ) VALUES ('userpic_width', '200');
INSERT INTO `4images_settings` ( `setting_name` , `setting_value` ) VALUES ('userpic_height', '200');



Step 10
Step 10 and 11 required if your would like display members photos on their images details page (details.php)
Open details.php
Find:
Code: [Select]
$additional_sql = "";Insert below:
Code: [Select]
if (!empty($additional_user_fields)) {
  foreach ($additional_user_fields as $key => $val) {
    $additional_sql .= ", u.".$key;
  }
}
(if this block of code is already present in details.php, then u dont need doublicate it ;))



Step 11
Open includes/functions.php
Find:
Code: [Select]
 if (!empty($additional_image_fields)) {Insert above:
Code: [Select]
 if (!empty($additional_user_fields)) {
    $additional_field_array = array();
    foreach ($additional_user_fields as $key => $val) {
      if ($key != "userpic" || ($key == "userpic" && $config['userpic']))
      {
        $additional_field_array[$key] = (!empty($image_row[$key])) ? format_text($image_row[$key], 1) : REPLACE_EMPTY;
        $additional_field_array['lang_'.$key] = $val[0];
      }
    }
    if (!empty($additional_field_array)) {
      $site_template->register_vars($additional_field_array);
    }
  }

Now you can use {userpic} in details.html template.



Step 12
This steps 12 - 13 are required if you would like show members photos in their comments.
Open details.php
Find:
Code: [Select]
$sql = "SELECT c.comment_id, c.image_id, c.user_id, c.user_name AS comment_user_name, c.comment_headline, c.comment_text, c.comment_ip, c.comment_date".get_user_table_field(", u.", "user_level").get_user_table_field(", u.", "user_name").get_user_table_field(", u.", "user_email").get_user_table_field(", u.", "user_showemail").get_user_table_field(", u.", "user_invisible").get_user_table_field(", u.", "user_joindate").get_user_table_field(", u.", "user_lastaction").get_user_table_field(", u.", "user_comments").get_user_table_field(", u.", "user_homepage").get_user_table_field(", u.", "user_icq")."Replace it with:
Code: [Select]
 $sql = "SELECT c.comment_id, c.image_id, c.user_id, c.user_name AS comment_user_name, c.comment_headline, c.comment_text, c.comment_ip, c.comment_date".get_user_table_field(", u.", "user_level").get_user_table_field(", u.", "user_name").get_user_table_field(", u.", "user_email").get_user_table_field(", u.", "user_showemail").get_user_table_field(", u.", "user_invisible").get_user_table_field(", u.", "user_joindate").get_user_table_field(", u.", "user_lastaction").get_user_table_field(", u.", "user_comments").get_user_table_field(", u.", "user_homepage").get_user_table_field(", u.", "user_icq").", u.userpic

Step 12.1
Find:
Code: [Select]
       "comment_user_ip" => $comment_user_ip,Insert below:
Code: [Select]
       "comment_userpic" => ($config['userpic'] && $comment_row[$i]['userpic']) ? ROOT_PATH."data/userpic/".$comment_row[$i]['userpic'] : "",


Step 13
Insert in templates/<your_template>/comment_bit.html (whereever u want the member's pic to be displayed. Design is your job ;))
Code: [Select]
{if comment_userpic} <img src="{comment_userpic}">{endif comment_userpic}


Step 14
In admin/users.php find:
  $sql "SELECT ".get_user_table_field("""user_id").get_user_table_field(", ""user_name")."
          FROM "
.USERS_TABLE."
          WHERE "
.get_user_table_field("""user_id")." IN ($user_ids)";
  
$user_result $site_db->query($sql);
  
$image_ids_sql "";
  while (
$user_row $site_db->fetch_array($user_result)) {
    
$user_id $user_row[$user_table_fields['user_id']];
    
$user_name $user_row[$user_table_fields['user_name']];


Replace with:
  $sql "SELECT ".get_user_table_field("""user_id").get_user_table_field(", ""user_name").", userpic
          FROM "
.USERS_TABLE."
          WHERE "
.get_user_table_field("""user_id")." IN ($user_ids)";
  
$user_result $site_db->query($sql);
  
$image_ids_sql "";
  while (
$user_row $site_db->fetch_array($user_result)) {
    
$user_id $user_row[$user_table_fields['user_id']];
    
$user_name $user_row[$user_table_fields['user_name']];
    if (
$user_row['userpic'] && file_exists(ROOT_PATH."data/userpic/".$user_row['userpic']) && is_file(ROOT_PATH."data/userpic/".$user_row['userpic']))
    {
      
unlink(ROOT_PATH."data/userpic/".$user_row['userpic']);
    }


----- [ Addons ] -----

[/list]


----- [ Version History ] -----

1.1.3 (2011-10-23)
    - Updated step 1.1, 4 and 5

1.1.2
    - Added Step 14 that deletes user personal photos when user is deleted. (Thanks to alekinna)

1.1.1
    - Fixed some tags not being displayed in the edit profile (redo Step 1.2)

1.1
    - Added optional Steps 10 - 13

1.0
    - Original release
« Last Edit: October 23, 2011, 06:22:33 PM by V@no »
MAяTRIX


Offline AntiNSA2

  • Hero Member
  • *****
  • Posts: 774
  • As long as I can finish my site before I die.
    • View Profile
    • http://www.thelifephotography.com
Re: [MOD] Member personal photo v1.0
« Reply #1 on: March 16, 2005, 06:23:41 AM »
Hows this different than the avatar mod?

And will this show the members picture by whois online right now in ACP and home html?
As long as I can finish my site before I die.

Offline JensF

  • Addicted member
  • ******
  • Posts: 1.028
    • View Profile
    • http://www.terraristik-galerie.de
Re: [MOD] Member personal photo v1.0
« Reply #2 on: March 25, 2005, 05:53:44 PM »
Hi there,

is there a way to see the Member Photo in the ACP???

I have said to my Users the Member Photo is for Member Photos and not for others.

In ACP i can check the Photos and see the User Name to Contact them.....

Can anyone change the postcard viewer plugin??? This must go, or????
Mit freundlichem Gruß
Jens Funk



-> Sorry for my bad English <-

Offline V@no

  • If you don't tell me what to do, I won't tell you where you should go :)
  • Global Moderator
  • 4images Guru
  • *****
  • Posts: 17.849
  • mmm PHP...
    • View Profile
    • 4images MODs Demo
Re: [MOD] Member personal photo v1.0
« Reply #3 on: March 26, 2005, 04:10:43 AM »
mmmm...so many questions...which question is actualy THE question? and what does postcard viewer has anything to do with this mod? :?
Your first three "must do" before you ask a question:
Please do not PM me asking for help unless you've been specifically asked to do so. Such PMs will be deleted without answer. (forum rule #6)
Extension for Firefox/Thunderbird: Master Password+    Back/Forward History Tweaks (restartless)    Cookies Manager+    Fit Images (restartless for Thunderbird)

Offline JensF

  • Addicted member
  • ******
  • Posts: 1.028
    • View Profile
    • http://www.terraristik-galerie.de
Re: [MOD] Member personal photo v1.0
« Reply #4 on: March 26, 2005, 10:36:56 AM »
Quote
and what does postcard viewer has anything to do with this mod?

Nothing :) But the postcard viewer do this what i want to have by the Member Photo....

They let see me which postcards where send. I want a Mod they let see me wihich Member Photo have the Member....
Mit freundlichem Gruß
Jens Funk



-> Sorry for my bad English <-

Offline bgnm2000

  • Jr. Member
  • **
  • Posts: 56
    • View Profile
Re: [MOD] Member personal photo v1.0
« Reply #5 on: April 03, 2005, 11:42:34 PM »
ok assuming this is the same mod V@no originally posted, I installed it awhile back, perfectly, got an error, in admin cp, installed again, also went smooth. The mod works. But I keep getting this error when I click admin settings. Not sure what to do, any help would be great! :D

Code: [Select]
Parse error: parse error, unexpected T_LNUMBER, expecting ',' or ';' in /home/ejnash/public_html/gallery/admin/settings.php on line 123

Offline bgnm2000

  • Jr. Member
  • **
  • Posts: 56
    • View Profile
Re: [MOD] Member personal photo v1.0
« Reply #6 on: April 03, 2005, 11:44:23 PM »
here is the code for settings.php

Code: [Select]
REMOVED
« Last Edit: April 04, 2005, 12:13:00 AM by V@no »

Offline V@no

  • If you don't tell me what to do, I won't tell you where you should go :)
  • Global Moderator
  • 4images Guru
  • *****
  • Posts: 17.849
  • mmm PHP...
    • View Profile
    • 4images MODs Demo
Re: [MOD] Member personal photo v1.0
« Reply #7 on: April 04, 2005, 12:15:56 AM »
you've asked this before, havent u?
I've already seen this problem and have no idea WHY would anyone do such thing.
u have
Code: [Select]
    echo "> ".$val."<br size="20" />";which supposed to be
Code: [Select]
    echo "> ".$val."<br />";I have no idea why people trying put some size into <br /> ....:?
Your first three "must do" before you ask a question:
Please do not PM me asking for help unless you've been specifically asked to do so. Such PMs will be deleted without answer. (forum rule #6)
Extension for Firefox/Thunderbird: Master Password+    Back/Forward History Tweaks (restartless)    Cookies Manager+    Fit Images (restartless for Thunderbird)

Offline bgnm2000

  • Jr. Member
  • **
  • Posts: 56
    • View Profile
Re: [MOD] Member personal photo v1.0
« Reply #8 on: April 04, 2005, 01:35:32 AM »
I didnt edit the code. So I dont know why anyone would do it either. Anyway, thank you. It works now. You're the man.  :mrgreen:

Offline ascanio

  • Hero Member
  • *****
  • Posts: 569
    • View Profile
    • http://www.surfourspace.net
Re: [MOD] Member personal photo v1.0
« Reply #9 on: April 08, 2005, 11:43:27 PM »
I am getting frustrated any of the last tow mod that I hace installed are not working :( I finish to install this on and I see this:




I think that it could be this $setting_group[xx] = .... i lost the count maybe
or ... I don't know can anybody help me?

Offline V@no

  • If you don't tell me what to do, I won't tell you where you should go :)
  • Global Moderator
  • 4images Guru
  • *****
  • Posts: 17.849
  • mmm PHP...
    • View Profile
    • 4images MODs Demo
Re: [MOD] Member personal photo v1.0
« Reply #10 on: April 09, 2005, 12:32:22 AM »
and where is the image pointing to? - that's a basic troubleshooting, u should do without anyone telling u to ;) :)
Your first three "must do" before you ask a question:
Please do not PM me asking for help unless you've been specifically asked to do so. Such PMs will be deleted without answer. (forum rule #6)
Extension for Firefox/Thunderbird: Master Password+    Back/Forward History Tweaks (restartless)    Cookies Manager+    Fit Images (restartless for Thunderbird)

Offline ascanio

  • Hero Member
  • *****
  • Posts: 569
    • View Profile
    • http://www.surfourspace.net
Re: [MOD] Member personal photo v1.0
« Reply #11 on: April 09, 2005, 12:59:20 AM »
This is what i get when I copy de image direction with opera http://69.56.196.226/~ascanio/member.php?action=showprofile&user_id=470 it is not an image is a profile :S

Offline V@no

  • If you don't tell me what to do, I won't tell you where you should go :)
  • Global Moderator
  • 4images Guru
  • *****
  • Posts: 17.849
  • mmm PHP...
    • View Profile
    • 4images MODs Demo
Re: [MOD] Member personal photo v1.0
« Reply #12 on: April 09, 2005, 01:12:39 AM »
U forgot move {if userpic_img} and {endif userpic_img} with the rest of the code u moved in member_profile.html template ;) ...
as of possible messing up in settings - does your changes for user pic setting being saved? if it does, then its not the case.
Your first three "must do" before you ask a question:
Please do not PM me asking for help unless you've been specifically asked to do so. Such PMs will be deleted without answer. (forum rule #6)
Extension for Firefox/Thunderbird: Master Password+    Back/Forward History Tweaks (restartless)    Cookies Manager+    Fit Images (restartless for Thunderbird)

Offline ascanio

  • Hero Member
  • *****
  • Posts: 569
    • View Profile
    • http://www.surfourspace.net
Re: [MOD] Member personal photo v1.0
« Reply #13 on: April 09, 2005, 01:22:47 AM »
Ok! thanks V@no u were right in this:
Quote
U forgot move {if userpic_img} and {endif userpic_img} with the rest of the code u moved in member_profile.html template
  :oops: :oops:
but I don't understand what u mean with this:
as of possible messing up in settings - does your changes for user pic setting being saved? if it does, then its not the case.
The problem is that when I slect a picture to be upload as a personal picture it doesn't do anything :S

Offline V@no

  • If you don't tell me what to do, I won't tell you where you should go :)
  • Global Moderator
  • 4images Guru
  • *****
  • Posts: 17.849
  • mmm PHP...
    • View Profile
    • 4images MODs Demo
Re: [MOD] Member personal photo v1.0
« Reply #14 on: April 09, 2005, 01:35:21 AM »
then I have only one explanation: u missed/miss-do/made a misstake in one or more steps (probably in member.php)
Your first three "must do" before you ask a question:
Please do not PM me asking for help unless you've been specifically asked to do so. Such PMs will be deleted without answer. (forum rule #6)
Extension for Firefox/Thunderbird: Master Password+    Back/Forward History Tweaks (restartless)    Cookies Manager+    Fit Images (restartless for Thunderbird)