Changeset 3530 for trunk

Show
Ignore:
Timestamp:
03/12/09 06:15:46 (9 months ago)
Author:
fumiakiy
Message:

Merged MT4.24 branch to trunk. "svn merge -r3461:3462 http://code.sixapart.com/svn/movabletype/branches/mt4.24 ."

Also merged MT.pm, and MT/Upgrade/v4.pm.

Location:
trunk
Files:
15 modified
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/default_templates/recover-password.mtml

    r2603 r3530  
    1 <__trans phrase="_USAGE_FORGOT_PASSWORD_1"> 
     1<__trans phrase="A request has been made to change your password in Movable Type. To complete this process click on the link below to select a new password."> 
    22 
    3     <$mt:Var name="user_password"$> 
     3<mt:var name="link_to_login"> 
    44 
    5 <__trans phrase="_USAGE_FORGOT_PASSWORD_2"> 
     5<__trans phrase="If you did not request this change, you can safely ignore this email."> 
    66 
    7     <$mt:Var name="link_to_login"$> 
    8  
    9 <$mt:Include module="<__trans phrase="Mail Footer">"$> 
    10  
     7<mt:include module="<__trans phrase="Mail Footer">"> 
  • trunk/lib/MT.pm

    r3529 r3530  
    20362036    } 
    20372037    undef; 
     2038} 
     2039 
     2040sub load_global_tmpl { 
     2041    my $app = shift; 
     2042    my ( $arg, $blog_id ) = @_; 
     2043    $blog_id ||= '0'; 
     2044 
     2045    my $terms = {}; 
     2046    if ( 'HASH' eq ref($arg) ) { 
     2047        $terms = { %$arg, blog_id => $blog_id }; 
     2048    } 
     2049    else { 
     2050        $terms = { 
     2051            type => $arg, 
     2052            blog_id => $blog_id, 
     2053        } 
     2054    } 
     2055    require MT::Template; 
     2056    my $tmpl = MT::Template->load( $terms ); 
     2057    $app->set_default_tmpl_params($tmpl) if $tmpl; 
     2058    $tmpl; 
    20382059} 
    20392060 
  • trunk/lib/MT/App/CMS.pm

    r3529 r3530  
    141141        'recover' => { 
    142142            code           => "${pkg}Tools::recover_password", 
     143            requires_login => 0, 
     144        }, 
     145        'new_pw' => { 
     146            code => "${pkg}Tools::new_password", 
    143147            requires_login => 0, 
    144148        }, 
  • trunk/lib/MT/App/Comments.pm

    r3529 r3530  
    4040        red              => \&do_red, 
    4141        generate_captcha => \&generate_captcha, 
     42 
     43        start_recover    => \&start_recover, 
     44        recover          => \&recover, 
     45        new_pw           => \&new_pw, 
    4246 
    4347        # deprecated 
     
    18891893} 
    18901894 
     1895sub start_recover { 
     1896    require MT::CMS::Tools; 
     1897    MT::CMS::Tools::start_recover(@_); 
     1898} 
     1899 
     1900sub recover { 
     1901    require MT::CMS::Tools; 
     1902    MT::CMS::Tools::recover_password(@_); 
     1903} 
     1904 
     1905sub new_pw { 
     1906    require MT::CMS::Tools; 
     1907    MT::CMS::Tools::new_password(@_); 
     1908} 
     1909 
    189119101; 
    18921911__END__ 
  • trunk/lib/MT/Author.pm

    r2694 r3530  
    4242        'widgets' => 'hash meta', 
    4343        'favorite_blogs' => 'array meta', 
     44        'password_reset' => 'string meta', 
     45        'password_reset_expires' => 'string meta', 
     46        'password_reset_return_to' => 'string meta', 
    4447    }, 
    4548    defaults => { 
  • trunk/lib/MT/CMS/Tools.pm

    r3219 r3530  
    107107sub start_recover { 
    108108    my $app = shift; 
     109    my ($param) = @_; 
     110    $param ||= {}; 
     111    $param->{'email'} = $app->param('email'); 
     112    $param->{'return_to'} = $app->param('return_to'); 
    109113    $app->add_breadcrumb( $app->translate('Password Recovery') ); 
    110     $app->load_tmpl('dialog/recover.tmpl'); 
     114 
     115    my $blog_id = $app->param('blog_id'); 
     116    my $tmpl = $app->load_global_tmpl( { identifier => 'new_password_reset_form', 
     117            $blog_id ? ( blog_id => $app->param('blog_id') ) : () } ); 
     118    if (!$tmpl) { 
     119        $tmpl = $app->load_tmpl( 'cms/dialog/recover.tmpl' ); 
     120    } 
     121    $tmpl->param($param); 
     122    return $tmpl; 
    111123} 
    112124 
    113125sub recover_password { 
    114     my $app   = shift; 
    115     my $q     = $app->param; 
    116     my $name  = $q->param('name'); 
    117     my $class = ref $app eq 'MT::App::Upgrader' ? 'MT::BasicAuthor' : $app->model('author'); 
     126    my $app      = shift; 
     127    my $email    = $app->param('email'); 
     128    my $username = $app->param('name'); 
     129 
     130    if ( !$email ) { 
     131        return $app->start_recover( 
     132            { error => $app->translate('Email Address is required for password recovery.'), } ); 
     133    } 
     134 
     135    # Searching user by email (and username) 
     136    my $class 
     137        = ref $app eq 'MT::App::Upgrader' 
     138        ? 'MT::BasicAuthor' 
     139        : $app->model('author'); 
    118140    eval "use $class;"; 
    119     my @author = $class->load( { name => $name } ); 
    120     my $author; 
    121     foreach (@author) { 
     141 
     142    my @all_authors = $class->load( 
     143        { email => $email, ( $username ? ( name => $username ) : () ) } ); 
     144    my @authors; 
     145    my $user; 
     146    foreach (@all_authors) { 
    122147        next unless $_->password && ( $_->password ne '(none)' ); 
    123         $author = $_; 
    124     } 
    125  
    126     my ( $rc, $res ) = 
    127       reset_password( $app, $author, $q->param('hint'), $name ); 
    128  
    129     if ($rc) { 
    130         $app->add_breadcrumb( $app->translate('Password Recovery') ); 
    131         $app->load_tmpl( 
    132             'dialog/recover.tmpl', 
    133             { 
    134                 recovered => 1, 
    135                 email     => $author->email 
     148        push( @authors, $_ ); 
     149    } 
     150    if ( !@authors ) { 
     151        return $app->start_recover( 
     152            {   error => $app->translate('User not found'), 
     153                ( $username ? ( not_unique_email => 1 ) : () ), 
    136154            } 
    137155        ); 
    138156    } 
    139     else { 
    140         $app->error($res); 
    141     } 
     157    elsif ( @authors > 1 ) { 
     158        return $app->start_recover( { not_unique_email => 1, } ); 
     159    } 
     160    $user = pop @authors; 
     161 
     162    # Generate Token 
     163    require MT::Util::Captcha; 
     164    my $salt    = MT::Util::Captcha->_generate_code(8); 
     165    my $expires = time + ( 60 * 60 ); 
     166    my $token = MT::Util::perl_sha1_digest_hex( 
     167        $salt . $expires . $app->config->SecretToken ); 
     168 
     169    $user->password_reset($salt); 
     170    $user->password_reset_expires($expires); 
     171    $user->password_reset_return_to($app->param('return_to')) 
     172        if $app->param('return_to'); 
     173    $user->save; 
     174 
     175    # Send mail to user 
     176    my %head = ( 
     177        id      => 'recover_password', 
     178        To      => $email, 
     179        From    => $app->config('EmailAddressMain') || $email, 
     180        Subject => $app->translate("Password Recovery") 
     181    ); 
     182    my $charset = $app->charset; 
     183    my $mail_enc = uc( $app->config('MailEncoding') || $charset ); 
     184    $head{'Content-Type'} = qq(text/plain; charset="$mail_enc"); 
     185 
     186    my $body = $app->build_email( 
     187        'recover-password', 
     188        {         link_to_login => $app->base 
     189                . $app->uri 
     190                . "?__mode=new_pw&token=$token&email=" 
     191                . encode_url($email), 
     192        } 
     193    ); 
     194 
     195    require MT::Mail; 
     196    MT::Mail->send( \%head, $body ) 
     197        or return $app->error( 
     198        $app->translate( 
     199            "Error sending mail ([_1]); please fix the problem, then " 
     200                . "try again to recover your password.", 
     201            MT::Mail->errstr 
     202        ) 
     203        ); 
     204 
     205    return $app->start_recover( { recovered => 1, } ); 
     206} 
     207 
     208sub new_password { 
     209    my $app = shift; 
     210    my ($param) = @_; 
     211    $param ||= {}; 
     212 
     213    my $token = $app->param('token'); 
     214    if ( !$token ) { 
     215        return $app->start_recover( 
     216            { error => $app->translate('Password reset token not found'), } ); 
     217    } 
     218 
     219    my $email = $app->param('email'); 
     220    if ( !$token ) { 
     221        return $app->start_recover( 
     222            { error => $app->translate('Email address not found'), } ); 
     223    } 
     224 
     225    my $class = $app->model('author'); 
     226    my @users = $class->load( { email => $email } ); 
     227    if ( !@users ) { 
     228        return $app->start_recover( 
     229            { error => $app->translate('User not found'), } ); 
     230    } 
     231 
     232    # comparing token 
     233    require MT::Util::Captcha; 
     234    my $user; 
     235    for my $u (@users) { 
     236        my $salt    = $u->password_reset; 
     237        my $expires = $u->password_reset_expires; 
     238        my $compare = MT::Util::perl_sha1_digest_hex( 
     239            $salt . $expires . $app->config->SecretToken ); 
     240        if ( $compare eq $token ) { 
     241            if ( time > $u->password_reset_expires ) { 
     242                return $app->start_recover( 
     243                    {   error => $app->translate( 
     244                            'Your request to change your password has expired.' 
     245                        ), 
     246                    } 
     247                ); 
     248            } 
     249            $user  = $u; 
     250            last; 
     251        } 
     252    } 
     253 
     254    if ( !$user ) { 
     255        return $app->start_recover( 
     256            { error => $app->translate('Invalid password reset request'), } ); 
     257    } 
     258 
     259    # Password reset 
     260    my $new_password = $app->param('password'); 
     261    if ($new_password) { 
     262        my $again = $app->param('password_again'); 
     263        if ( !$again ) { 
     264            $param->{'error'} 
     265                = $app->translate('Please confirm your new password'); 
     266        } 
     267        elsif ( $new_password ne $again ) { 
     268            $param->{'error'} = $app->translate('Passwords do not match'); 
     269        } 
     270        else { 
     271            my $redirect = $user->password_reset_return_to || ''; 
     272            $user->set_password($new_password); 
     273            $user->password_reset(undef); 
     274            $user->password_reset_expires(undef); 
     275            $user->password_reset_return_to(undef); 
     276            $user->save; 
     277            $app->param( 'username', $user->name ) 
     278                if $user->type == MT::Author::AUTHOR(); 
     279            $app->login; 
     280            if ($redirect) { 
     281                return $app->redirect($redirect); 
     282            } else{ 
     283                return $app->return_to_dashboard( redirect => 1 ); 
     284            } 
     285        } 
     286    } 
     287 
     288    $param->{'email'}          = $email; 
     289    $param->{'token'}          = $token; 
     290    $param->{'password'}       = $app->param('password'); 
     291    $param->{'password_again'} = $app->param('password_again'); 
     292    $app->add_breadcrumb( $app->translate('Password Recovery') ); 
     293 
     294    my $blog_id = $app->param('blog_id'); 
     295    my $tmpl = $app->load_global_tmpl( { identifier => 'new_password', 
     296            $blog_id ? ( blog_id => $app->param('blog_id') ) : () } ); 
     297    if (!$tmpl) { 
     298        $tmpl = $app->load_tmpl( 'cms/dialog/new_password.tmpl' ); 
     299    } 
     300    $tmpl->param($param); 
     301    return $tmpl; 
    142302} 
    143303 
     
    15311691      unless $author->email; 
    15321692 
    1533     my @pool = ( 'a' .. 'z', 0 .. 9 ); 
    1534     my $pass = ''; 
    1535     for ( 1 .. 8 ) { $pass .= $pool[ rand @pool ] } 
    1536     $author->set_password($pass); 
     1693    # Generate Token 
     1694    require MT::Util::Captcha; 
     1695    my $salt    = MT::Util::Captcha->_generate_code(8); 
     1696    my $expires = time + ( 60 * 60 ); 
     1697    my $token = MT::Util::perl_sha1_digest_hex( 
     1698        $salt . $expires . $app->config->SecretToken ); 
     1699 
     1700    $author->password_reset($salt); 
     1701    $author->password_reset_expires($expires); 
     1702    $author->password_reset_return_to(undef); 
    15371703    $author->save; 
     1704 
    15381705    my $message = 
    15391706      $app->translate( 
    1540 "Password was reset for user '[_1]' (user #[_2]). Password was sent to the following address: [_3]", 
     1707"A password reset link has been sent to [_3] for user  '[_1]' (user #[_2]).", 
    15411708        $author->name, $author->id, $author->email ); 
    15421709    $app->log( 
     
    15491716    ); 
    15501717 
    1551     my $address = 
    1552       defined $author->nickname 
    1553       ? $author->nickname . ' <' . $author->email . '>' 
    1554       : $author->email; 
     1718    # Send mail to user 
     1719    my $email = $author->email; 
    15551720    my %head = ( 
    15561721        id      => 'recover_password', 
    1557         To      => $address, 
    1558         From    => $app->config('EmailAddressMain') || $address, 
     1722        To      => $email, 
     1723        From    => $app->config('EmailAddressMain') || $email, 
    15591724        Subject => $app->translate("Password Recovery") 
    15601725    ); 
     
    15631728    $head{'Content-Type'} = qq(text/plain; charset="$mail_enc"); 
    15641729 
    1565     my $body = $app->build_email( 'recover-password.tmpl', 
    1566         { user_password => $pass, link_to_login => $app->base . $app->mt_uri }  
     1730    my $body = $app->build_email( 
     1731        'recover-password', 
     1732        {         link_to_login => $app->base 
     1733                . $app->uri 
     1734                . "?__mode=new_pw&token=$token&email=" 
     1735                . encode_url($email), 
     1736        } 
    15671737    ); 
    1568     $body = wrap_text( $body, 72 ); 
     1738 
    15691739    require MT::Mail; 
    15701740    MT::Mail->send( \%head, $body ) 
    1571       or return ( 
    1572         0, 
     1741        or return $app->error( 
    15731742        $app->translate( 
    15741743            "Error sending mail ([_1]); please fix the problem, then " 
    1575               . "try again to recover your password.", 
     1744                . "try again to recover your password.", 
    15761745            MT::Mail->errstr 
    15771746        ) 
    1578       ); 
     1747        ); 
     1748 
    15791749    ( 1, $message ); 
    15801750} 
  • trunk/lib/MT/L10N/de.pm

    r2923 r3530  
    52305230        'Upgrade to Feeds.App' => 'Upgrade auf Feeds.App', 
    52315231        'Create a Feed Widget' => 'Feed-Widget anlegen', 
    5232  
     5232         
     5233       '%f-thumb-%wx%h-%i%x' => '%f-thumb-%wx%h-%i%x', # Translate - New 
     5234       '[_1] contains an invalid character: [_2]' => '[_1] beinhaltet ein ungÃŒltiges Schriftzeichen: [_2]', # Translate - New 
     5235       'Email address is required.' => 'Bitte geben Sie Ihre E-Mail-Adresse ein.', # Translate - New 
     5236       'User not found' => 'Dieser Benutzer wurde nicht gefunden', # Translate - New 
     5237       'Password reset token not found' => 'Der Passwort Reset Token wurde nicht gefunden', # Translate - New 
     5238       'Email address not found' => 'Diese E-Mail-Adresse wurde nicht gefunden', # Translate - New 
     5239       'Your request to change your password has expired.' => 'Ihre Anfrage auf Änderung Ihres Passwortes ist ausgelaufen.', # Translate - New 
     5240       'Invalid password reset request' => 'UngÃŒltige Passwort Reset Anfrage', # Translate - New 
     5241       'Please confirm your new password' => 'Bitte bestÀtigen Sie Ihr neues Passwort', # Translate - New 
     5242       'Password do not match' => 'Die Passwörter stimmen nicht ÃŒberein', # Translate - New 
     5243       'Invalid [_1] parameter.' => 'UngÃŒltiger [_1] Parameter.', # Translate - New 
     5244       'Blog, BlogID or Template param must be specified.' => 'Blog, BlogID oder Template Parameter mÃŒssen spezifiziert werden.', # Translate - New 
     5245       'Error saving [_1] record # [_3]: [_2]...' => 'Error saving [_1] record # [_3]: [_2]...', # Translate - New 
     5246       'The email address provided is not unique.  Please enter your username.' => 'Diese E-Mail-Adresse wird bereits verwendet. Bitte geben Sie Ihren Benutzernamen ein.', # Translate - New 
     5247       'An email with a link to reset your password has been sent to your email address ([_1]).' => 'Es wurde eine E-Mail mit einem Link zur ZurÃŒcksetzung Ihres Passwortes an Ihre Adresse gesendet([_1]).', # Translate - New 
     5248       'Choose New Password' => 'WÀhlen Sie Ihr neues Passwort', # Translate - New 
     5249       'You must set Local Archive Path.' => 'Bitte definieren Sie Ihren Local Archive Path.', # Translate - New 
     5250       'You must set a valid Archive URL.' => 'Bitte definieren Sie eine gÃŒltige Archive URL.', # Translate - New 
     5251       'You must set a valid Local Archive Path.' => 'Bitte definieren Sie einen gÃŒltigen Local Archive Path.', # Translate - New  
     5252       'A request has been made to change your password in Movable Type. To complete this process click on the link below to select a new password.' => 'Es wurde eine Anfrage zur Änderung Ihres Passwortes in Movable Type gestellt. Bitte klicken Sie auf untenstehenden Link und wÀhlen Sie ein neues Passwort aus um diesen Prozess abzuschließen.', 
     5253       'If you did not request this change, you can safely ignore this email.' => 'Wenn Sie diese Änderung nicht wÃŒnschen können Sie diese E-Mail bedenkenlos ignorieren.', 
     5254       'Passwords do not match' => 'Passwörter stimmen nicht ÃŒberein.', 
     5255       'Password reset for user \'[_1]\' (user #[_2]) was successful. Recovery link sent to the following address: [_3]' => 'Das ZurÃŒcksetzen des Passwortes fÃŒr Benutzer \'[_1]\' (Benutzer #[_2]) war erfolgreich. Ein Wiederherstellungs-Link wurde an folgende Adresse gesendet', 
     5256       'Updating password recover email template...' => 'Aktualisierung des Passwort-Wiederherstellungs-Templates...', 
     5257       'The email address provided is not unique.  Please enter your username.' => 'Die angegebene E-Mail-Adresse wird bereits genutzt. Bitte geben Sie Ihren Benutzernamen ein.', 
     5258       '_WARNING_PASSWORD_RESET_MULTI' => 'Sie sind dabei Email(s) an ausgewÀhlte Nutzer zu senden um deren Password zurÃŒck zu setzen. Möchten Sie fortfahren?', 
     5259       "A password reset link has been sent to [_3] for user '[_1]' (user #[_2])." => 'Ein Passwort-Wiederherstellungs-Link fÃŒr den Benutzer \'[_1]\' wurde an [_3] gesendet. (Benutzer #[_2])'  
    52335260); 
    52345261 
  • trunk/lib/MT/L10N/en_us.pm

    r2835 r3530  
    5959    '_USAGE_PASSWORD_RESET' => 'You can initiate password recovery on behalf of this user. If you choose to do so, an email will be sent to directly to <strong>[_1]</strong> with a randomly generated new password.', 
    6060    '_WARNING_PASSWORD_RESET_SINGLE' => 'You are about to reset the password for "[_1]". A new password will be randomly generated and sent directly to their email address ([_2]).  Do you wish to continue?', 
    61     '_WARNING_PASSWORD_RESET_MULTI' => 'You are about to reset the password for the selected users. New passwords will be randomly generated and sent directly to their email address(es). Do you wish to continue?', 
     61    '_WARNING_PASSWORD_RESET_MULTI' => 'You are about to send email(s) to allow the selected user(s) to reset their passwords. Do you wish to continue?', 
    6262    '_USAGE_NEW_AUTHOR' => 'From this screen you can create a new user in the system.', 
    6363    '_USAGE_NEW_GROUP' => 'From this screen you can create a new group in the system.', 
  • trunk/lib/MT/L10N/es.pm

    r2923 r3530  
    52295229        'Create a Feed Widget' => 'Crear un widget de fuente', 
    52305230 
     5231        'A request has been made to change your password in Movable Type. To complete this process click on the link below to select a new password.' => 'Se ha recibido una petición para cambiar su contraseña de Movable Type. Para completar el proceso y seleccionar una nueva contraseña, haga clic en el enlace.', # Translate - New 
     5232        'If you did not request this change, you can safely ignore this email.' => 'Si no solicitó este cambio, ignore este mensaje.', # Translate - New 
     5233        '%f-thumb-%wx%h-%i%x' => '%f-miniatura-%wx%h-%i%x', # Translate - New 
     5234        '[_1] contains an invalid character: [_2]' => '[_1] contiene un caracter no válido: [_2]', # Translate - New 
     5235        'Email address is required.' => 'El correo electrónico es obligatorio.', # Translate - New 
     5236        'User not found' => 'Usuario no encontrado', # Translate - New 
     5237        'Password reset token not found' => 'Token para el reinicio de la contraseña no encontrado', # Translate - New 
     5238        'Email address not found' => 'Dirección de correo no encontrada', # Translate - New 
     5239        'Your request to change your password has expired.' => 'Expiró su solicitud de cambio de contraseña.', # Translate - New 
     5240        'Invalid password reset request' => 'Solicitud de reinicio de contraseña no válida', # Translate - New 
     5241        'Please confirm your new password' => 'Por favor, confirme su nueva contraseña', # Translate - New 
     5242        'Password do not match' => 'La contraseña no coincide', # Translate - New 
     5243        'Invalid [_1] parameter.' => 'Parámetro [_1] no válido', # Translate - New 
     5244        'Blog, BlogID or Template param must be specified.' => 'Debe especificarse el parámetro Blog, BlogID o Template.', # Translate - New 
     5245        'Error saving [_1] record # [_3]: [_2]...' => 'Error guardando registro [_1] # [_3]: [_2]...', # Translate - New 
     5246        'The email address provided is not unique.  Please enter your username.' => 'El correo no es único. Por favor, introduzca el usuario.', # Translate - New 
     5247        'An email with a link to reset your password has been sent to your email address ([_1]).' => 'Se ha enviado a su dirección de correo ([_1]) un correo con el enlace para reiniciar la contraseña', # Translate - New 
     5248        'Choose New Password' => 'Seleccione la nueva contraseña', # Translate - New 
     5249        'You must set Local Archive Path.' => 'Debe indicar la ruta local de archivos.', # Translate - New 
     5250        'You must set a valid Archive URL.' => 'Debe indicar una URL de archivos válida.', # Translate - New 
     5251        'You must set a valid Local Archive Path.' => 'Debe indicar una ruta local de archivos válida.', # Translate - New 
     5252 
    52315253); 
    52325254 
  • trunk/lib/MT/L10N/fr.pm

    r2923 r3530  
    52305230        'Create a Feed Widget' => 'Créer un widget à partir d\'un flux', 
    52315231 
     5232        'A request has been made to change your password in Movable Type. To complete this process click on the link below to select a new password.' => 'Une requête a été faite pour changer votre mot de passe dans Movable Type. Pour terminer cliquez sur le lien ci-dessous pour choisir un nouveau mot de passe.', # Translate - New 
     5233      'If you did not request this change, you can safely ignore this email.' => 'Si vous n\'avez pas demandé ce changement, vous pouvez ignorer cet email.', # Translate - New 
     5234      '%f-thumb-%wx%h-%i%x' => '%f-thumb-%wx%h-%i%x', # Translate - New 
     5235      '[_1] contains an invalid character: [_2]' => '[_1] contient un caractÚre invalide : [_2]', # Translate - New 
     5236      'Email address is required.' => 'Adresse email obligatoire', # Translate - New 
     5237      'User not found' => 'Utilisateur introuvable', # Translate - New 
     5238      'Password reset token not found' => 'Token de remise à zéro du mot de passe introuvable', # Translate - New 
     5239      'Email address not found' => 'Adresse email introuvable', # Translate - New 
     5240      'Your request to change your password has expired.' => 'Votre demande de modification de mot de passe a expirée.', # Translate - New 
     5241      'Invalid password reset request' => 'Requête de modification de mot de passe invalide', # Translate - New 
     5242      'Please confirm your new password' => 'Merci de confirmer votre nouveau mot de passe', # Translate - New 
     5243      'Password do not match' => 'Le mot de passe ne correspond pas', # Translate - New 
     5244      'Invalid [_1] parameter.' => 'ParamÚtre [_1] invalide', # Translate - New 
     5245      'Blog, BlogID or Template param must be specified.' => 'Les paramÚtres Blog, BlogID ou Template doivent être spécifiés.', # Translate - New 
     5246      'Error saving [_1] record # [_3]: [_2]...' => 'Erreur en enregistrant l\'enregistrement [_1] # [_3]: [_2]...', # Translate - New 
     5247      'The email address provided is not unique.  Please enter your username.' => 'Une adresse  email n\'est pas unique. Merci de saisir votre nom de membre.', # Translate - New 
     5248      'An email with a link to reset your password has been sent to your email address ([_1]).' => 'Un email contenant un lien pour réinitialiser votre mot de passe a été envoyé à votre adresse email ([_1]).', # Translate - New 
     5249      'Choose New Password' => 'Choisissez un nouveau mot de passe', # Translate - New 
     5250      'You must set Local Archive Path.' => 'Vous devez renseigner Local Archive Path.', # Translate - New 
     5251      'You must set a valid Archive URL.' => 'Vous devez renseigner une Archive URL valide.', # Translate - New 
     5252      'You must set a valid Local Archive Path.' => 'Vous devez renseigner un Local Archive Path valide.', # Translate - New  
     5253      'Passwords do not match' => 'Les mots de passe ne correspondent pas', # Translate - New 
     5254      'Password reset for user \'[_1]\' (user #[_2]) was successful. Recovery link sent to the following address: [_3]' => 'Réinitialisation du mot de passe pour l\'utilisateur \'[_1]\' (utilisateur #[_2]) a réussi. Lien envoyé à l\'adresse suivante : [_3]', # Translate - New 
     5255      'Updating password recover email template...' => 'Template de réinitialisation du mot de passe en cours de mise à jour...', # Translate - New 
     5256      'The email address provided is not unique.  Please enter your username.' => 'L\'adresse email fournie n\'est pas unique. Merci de saisir votre nom d\'utilisateur.', # Translate - New 
     5257      '_WARNING_PASSWORD_RESET_MULTI' => 'Vous êtes sur le point d\'envoyer des emails pour permettre aux utilisateurs sélectionnés de réinitialiser leurs mots de passe. Voulez-vous continuer ?', 
     5258      "A password reset link has been sent to [_3] for user '[_1]' (user #[_2])." => 'Un lien de réinitialisation de mot de passe envoyé à [_3] pour utilisateur \'[_1]\' (utilisateur #[_2]).',  
    52325259); 
    52335260 
  • trunk/lib/MT/L10N/ja.pm

    r3219 r3530  
    403403        '_USAGE_FORGOT_PASSWORD_2' => '以䞋のURLから、新しいパスワヌドを䜿っおMovable Typeにログむンし、すぐにパスワヌドを倉曎しおください。', 
    404404        'Mail Footer' => 'メヌルフッタヌ', 
     405        'A request has been made to change your password in Movable Type. To complete this process click on the link below to select a new password.' => 'パスワヌドをリセットしようずしおいたす。以䞋のリンクをクリックしお、新しいパスワヌドを蚭定しおください。', 
     406        'If you did not request this change, you can safely ignore this email.' => 'このメヌルに心圓たりがないずきは、䜕もせずに無芖しおください。', 
    405407 
    406408## default_templates/main_index.mtml 
     
    10241026## lib/MT/CMS/Tools.pm 
    10251027        'Password Recovery' => 'パスワヌドの再蚭定', 
     1028        'Email Address is required for password recovery.' => 'メヌルアドレスが忠
     1029芁です。', 
     1030        'User not found' => 'ナヌザヌが芋぀かりたせんでした。', 
     1031        'Error sending mail ([_1]); please fix the problem, then try again to recover your password.' => 'メヌルを送信できたせんでした。問題を解決しおから再床パスワヌドの再蚭定を行っおください: [_1]', 
     1032        'Password reset token not found' => 'パスワヌドをリセットするためのトヌクンが芋぀かりたせんでした。', 
     1033        'Email address not found' => 'メヌルアドレスが芋぀かりたせんでした。', 
     1034        'Your request to change your password has expired.' => 'パスワヌドのリセットを始めおから決められた時間を経過しおしたいたした。', 
     1035        'Invalid password reset request' => '䞍正なリク゚ストです。', 
     1036        'Please confirm your new password' => '新しいパスワヌドを確認しおください。', 
     1037        'Passwords do not match' => 'パスワヌドが䞀臎しおいたせん。', 
    10261038        'That action ([_1]) is apparently not implemented!' => 'アクション([_1])が実裠
    10271039されおいたせん。', 
     
    10741086        'Invalid attempt to recover password (used hint \'[_1]\')' => 'パスワヌドの再蚭定に倱敗したした(フレヌズ: [_1])。', 
    10751087        'User does not have email address' => 'ナヌザヌのメヌルアドレスがありたせん。', 
    1076         'Password was reset for user \'[_1]\' (user #[_2]). Password was sent to the following address: [_3]' => 'ナヌザヌ\'[_1]\'(ID:[_2])のパスワヌドがリセットされ、メヌルアドレス([_3])あおに通知されたした。', 
     1088        'A password reset link has been sent to [_3] for user  \'[_1]\' (user #[_2]).' => 'パスワヌド再蚭定甚のリンクがナヌザヌ\'[_1]\'(ID:[_2])のメヌルアドレス([_3])あおに通知されたした。', 
    10771089        'Error sending mail ([_1]); please fix the problem, then try again to recover your password.' => 'メヌルを送信できたせんでした。問題を解決しおから再床パスワヌドの再蚭定を行っおください: [_1]', 
    10781090        'Some objects were not restored because their parent objects were not restored.  Detailed information is in the <a href="javascript:void(0);" onclick="closeDialog(\'[_1]\');">activity log</a>.' => '芪ずなるオブゞェクトがないため埩å 
     
    19351947の暩限を埩å 
    19361948ƒã—おいたす...', 
     1949        'Updating password recover email template...' => 'パスワヌドの再蚭定メヌル テンプレヌトを曎新しおいたす...', 
    19371950 
    19381951## lib/MT/PluginData.pm 
     
    20592072 
    20602073## lib/MT/App/CMS.pm 
    2061         '_WARNING_PASSWORD_RESET_MULTI' => '遞択されたナヌザヌのパスワヌドを再蚭定しようずしおいたす。パスワヌドはランダムに生成され、盎接それぞれのメヌルアドレスに送られたす。 
     2074        '_WARNING_PASSWORD_RESET_MULTI' => '遞択されたナヌザヌのパスワヌドを再蚭定しようずしおいたす。パスワヌド再蚭定甚のリンクが盎接それぞれのメヌルアドレスに送られたす。 
    20622075 
    20632076実行したすか?', 
     
    22352248 
    22362249## lib/MT/App/Search.pm 
     2250        'Invalid [_1] parameter.' => '[_1]パラメヌタが䞍正です。', 
    22372251        'Invalid type: [_1]' => '䞍正なtypeです: [_1]', 
    22382252        'Search: failed storing results in cache.  [_1] is not available: [_2]' => '結果をキャッシュできたせんでした。[_1]を利甚できたせん: [_2]', 
     
    46154629        'Are you sure you wish to continue?' => '続けおもよろしいですか?', 
    46164630 
     4631## tmpl/cms/dialog/new_password.tmpl 
     4632        'Choose New Password' => '新しいパスワヌドを遞択', 
     4633 
    46174634## tmpl/cms/dialog/refresh_templates.tmpl 
    46184635        'Refresh Template Set' => 'テンプレヌトセットの初期化', 
     
    46544671 
    46554672## tmpl/cms/dialog/recover.tmpl 
     4673        'The email address provided is not unique.  Please enter your username.' => '同じメヌルアドレスを持っおいるナヌザヌがいたす。ナヌザヌ名をå 
     4674¥åŠ›ã—ãŠãã ã•ã„ã€‚', 
     4675        'An email with a link to reset your password has been sent to your email address ([_1]).' => '「[_1]」にパスワヌドをリセットするためのリンクを含むメヌルを送信したした。', 
    46564676        'Your password has been changed, and the new password has been sent to your email address ([_1]).' => 'パスワヌドを倉曎したした。新しいパスワヌドはメヌルアドレス([_1])に送信されたす。', 
    46574677        'Recover (s)' => '再蚭定 (s)', 
    46584678        'Recover' => '再蚭定', 
    46594679        'Go Back (x)' => '戻る (x)', 
     4680        'Go Back' => '戻る', 
    46604681 
    46614682## tmpl/cms/dialog/create_association.tmpl 
  • trunk/lib/MT/L10N/nl.pm

    r2923 r3530  
    52285228        'Upgrade to Feeds.App' => 'Upgraden naar Feeds.App', 
    52295229        'Create a Feed Widget' => 'Feedwidget aanmaken', 
    5230  
     5230        'A request has been made to change your password in Movable Type. To complete this process click on the link below to select a new password.' => 'Er is een verzoek ingediend om uw wachtwoord aan te passen in Movable Type.  Gelieve dit te bevestigen door op onderstaande link te klikken om een nieuw wachtwoord te kiezen.', # Translate - New 
     5231        'If you did not request this change, you can safely ignore this email.' => 'Als u deze wijziging niet heeft aangevraagd, kunt u deze e-mail gerust negeren.', # Translate - New 
     5232        '%f-thumb-%wx%h-%i%x' => '%f-thumb-%wx%h-%i%x', # Translate - New 
     5233        '[_1] contains an invalid character: [_2]' => '[_1] bevat een ongeldig karakter: [_2]', # Translate - New 
     5234        'Email address is required.' => 'E-mail adres is vereist', # Translate - New 
     5235        'User not found' => 'Gebruiker niet gevonden', # Translate - New 
     5236        'Password reset token not found' => 'Wachtwoord reset token niet gevonden', # Translate - New 
     5237        'Email address not found' => 'E-mail adres niet gevonden', # Translate - New 
     5238        'Your request to change your password has expired.' => 'Uw verzoek om uw wachtwoord aan te passen is verlopen', # Translate - New 
     5239        'Invalid password reset request' => 'Ongeldig verzoek om wachtwoord te veranderen', # Translate - New 
     5240        'Please confirm your new password' => 'Gelieve uw nieuwe wachtwoord te bevestigen', # Translate - New 
     5241        'Password do not match' => 'Wachtwoorden komen niet overeen', # Translate - New 
     5242        'Invalid [_1] parameter.' => 'Ongeldige [_1] parameter', # Translate - New 
     5243        'Blog, BlogID or Template param must be specified.' => 'Blog, BlogID of Template parameter moet opgegeven zijn.', # Translate - New 
     5244        'Error saving [_1] record # [_3]: [_2]...' => 'Fout bij opslaan [_1] record # [_3]: [_2]...', # Translate - New 
     5245        'The email address provided is not unique.  Please enter your username.' => 'Een e-mail is niet uniek.  Gelieve uw gebruikersnaam op te geven.', # Translate - New 
     5246        'An email with a link to reset your password has been sent to your email address ([_1]).' => 'Er is een e-mail met een link om uw wachtwoord aan te passen doorgestuurd naar uw e-mail adres ([_1]).', # Translate - New 
     5247        'Choose New Password' => 'Nieuw wachtwoord kiezen', # Translate - New 
     5248        'You must set Local Archive Path.' => 'U moet een lokaal archiefpad instellen.', # Translate - New 
     5249        'You must set a valid Archive URL.' => 'U moet een geldige archief URL instellen.', # Translate - New 
     5250        'You must set a valid Local Archive Path.' => 'U moet een geldig lokaal archiefpad instellen.', # Translate - New 
     5251        'Passwords do not match' => 'Wachtwoorden komen niet overeen', # Translate - New 
     5252        'Password reset for user \'[_1]\' (user #[_2]) was successful. Recovery link sent to the following address: [_3]' => 'Wachtwoord reset voor gebruiker \'[_1]\' (gebruiker #[_2]) geslaagd. Reset link verstuurd naar volgend adres: [_3]', # Translate - New 
     5253        'Updating password recover email template...' => 'Sjabloon wachtwoordrecuperatie e-mail wordt bijgewerkt...', # Translate - New 
     5254        'The email address provided is not unique.  Please enter your username.' => 'Het opgegeven e-mail adres is niet uniek.  Gelieve uw gebruikersnaam op te geven.', # Translate - New 
     5255        '_WARNING_PASSWORD_RESET_MULTI' => 'U staat op het punt e-mails te versturen waarmee de geselecteerde gebruikers hun wachtwoord kunnen aanpassen. Bent u zeker?', 
     5256        "A password reset link has been sent to [_3] for user '[_1]' (user #[_2])." => 'Een link om het wachtwoord opnieuw in te stellen is verzonden naar [_3] voor gebruiker \'[_1]\' (gebruiker #[_2]).',  
    52315257); 
    52325258 
  • trunk/lib/MT/Upgrade/v4.pm

    r3106 r3530  
    463463            }, 
    464464        }, 
     465        'core_update_password_recover_template' => { 
     466            version_limit => 4.0068, 
     467            code => \&core_update_password_recover_template, 
     468        }, 
    465469    }; 
    466470} 
     
    12171221} 
    12181222 
     1223sub core_update_password_recover_template { 
     1224    my $self = shift; 
     1225    $self->progress($self->translate_escape("Updating password recover email template...")); 
     1226    require MT::DefaultTemplates; 
     1227    my $recover_tmpl = MT::DefaultTemplates->load ({ identifier => 'recover-password' }); 
     1228    my $recover_text = MT->instance->translate_templatized($recover_tmpl->{text}); 
     1229    require MT::Template; 
     1230    my @tmpls = MT::Template->load ({ type => 'email', identifier => 'recover-password' }); 
     1231    for my $tmpl (@tmpls) { 
     1232        my $backup = $tmpl->clone; 
     1233        delete $backup->{column_values} 
     1234          ->{id};    # make sure we don't overwrite original 
     1235        delete $backup->{changed_cols}->{id}; 
     1236        $backup->name( 
     1237            $backup->name . ' (Backup during upgrade to version 4.24)' ); 
     1238        $backup->type('backup'); 
     1239        $backup->identifier(undef); 
     1240        $backup->save; 
     1241 
     1242        $tmpl->text ($recover_text); 
     1243        $tmpl->save; 
     1244    } 
     1245} 
     1246 
    121912471; 
  • trunk/tmpl/cms/dialog/recover.tmpl

    r1101 r3530  
    11<mt:setvarblock name="page_title"><__trans phrase="Password Recovery"></mt:setvarblock> 
    22<mt:setvar name="complete" value="1"> 
    3 <mt:include name="include/chromeless_header.tmpl"> 
     3<mt:include name="cms/include/chromeless_header.tmpl"> 
    44 
     5<mt:if name="error"> 
     6        <mtapp:statusmsg 
     7            id="error" 
     8            class="error"> 
     9            <mt:var name="error"> 
     10        </mtapp:statusmsg> 
     11</mt:if> 
     12 
     13<mt:If name="not_unique_email"> 
     14        <mtapp:statusmsg 
     15            id="not-unique-email" 
     16            class="alert"> 
     17            <__trans phrase="The email address provided is not unique.  Please enter your username."> 
     18        </mtapp:statusmsg> 
     19</mt:if> 
    520 
    621<mt:if name="recovered"> 
    7 <p><__trans phrase="Your password has been changed, and the new password has been sent to your email address ([_1])." params="<mt:var name="email" escape="html">"></p> 
     22<p><__trans phrase="An email with a link to reset your password has been sent to your email address ([_1]).", params="<mt:var name="email" escape="html">"></p> 
    823 
    924<div class="actions-bar"> 
    1025    <div class="actions-bar-inner pkg actions"> 
     26        <mt:If name="return_to"> 
    1127        <a 
    12             href="<$mt:var name="mt_url"$>" 
     28            href="<$mt:var name="return_to" escape="html" $>" 
     29            accesskey="x" 
     30            title="<__trans phrase="Go Back (x)">" 
     31            class="primary-button" 
     32            ><__trans phrase="Go Back"></a> 
     33        <mt:Else> 
     34        <a 
     35            href="<$mt:var name="script_url"$>" 
    1336            accesskey="s" 
    1437            title="<__trans phrase="Sign in to Movable Type (s)">" 
    1538            class="primary-button" 
    1639            ><__trans phrase="Sign in to Movable Type"></a> 
     40        </a> 
     41        </mt:If> 
    1742    </div> 
    1843</div> 
     
    2247    <form method="post" action="<mt:var name="script_url">"> 
    2348    <input type="hidden" name="__mode" value="recover" /> 
     49    <input type="hidden" name="return_to" value="<mt:Var name="return_to" escape="html">" /> 
    2450<fieldset> 
    2551 
     52<mtapp:setting 
     53    id="email" 
     54    label="<__trans phrase="Email Address">" 
     55    label_class="top-label"> 
     56    <input type="text" name="email" id="email" class="ti" value="<mt:var name="email">" /> 
     57</mtapp:setting> 
     58 
     59<mt:If name="not_unique_email"> 
    2660<mtapp:setting 
    2761    id="name" 
    2862    label="<__trans phrase="Username">" 
    2963    label_class="top-label"> 
    30     <input type="text" name="name" id="name" class="ti" /> 
     64    <input type="text" name="name" id="name" class="ti" value="<mt:var name="name">" /> 
    3165</mtapp:setting> 
    32  
    33 <mtapp:setting 
    34     id="hint" 
    35     label="<__trans phrase="Password recovery word/phrase">" 
    36     label_class="top-label"> 
    37     <input type="text" name="hint" id="hint" class="ti" autocomplete="0" /> 
    38 </mtapp:setting> 
     66</mt:If> 
    3967 
    4068<div class="actions-bar"> 
     
    5987</mt:if> 
    6088 
    61  
    62 <mt:include name="include/chromeless_footer.tmpl"> 
     89<mt:include name="cms/include/chromeless_footer.tmpl"> 
  • trunk/tmpl/comment/login.tmpl

    r3529 r3530  
    8383    </mtapp:setting> 
    8484    <mt:if name="can_recover_password"> 
    85     <div class="right"><a href="<mt:var name="mt_url">?__mode=start_recover"><__trans phrase="Forgot your password?"></a></div> 
     85    <div class="right"><a href="<mt:var name="script_url">?__mode=start_recover<mt:if name="return_url">&return_to=<mt:var name="return_url" escape="url"></mt:if>"><__trans phrase="Forgot your password?"></a></div> 
    8686    </mt:if> 
    8787    <p><label><__trans phrase="Remember me?"></label> <input type="checkbox" name="remember" value="1" accesskey="r" class="cb" /></p>