Parley

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

0.53    Wed Jul  4 08:55:12 BST 2007
    - added a basic profile page for users
    - added more missing dependencies to Makefile.PL
    - added more time/TZ options for user
    - automatically add thread-watch on new thread/post
      (checkbox value defaults to appropriate pref value for user)
    - fixed output when no threads are watched (Watches in Preferences)
    - fix for bug with person.preference not being set when new user is created
    - improved preference screen (time, watch info, notifications)
    - improved Template::Plugin::ForumCode (markup and docs)
    - improve form handling for prefs
    - navigation is now through the dojo menu widget; #navigation and #extra areas are now empty
    - person preference data now created at sign-up time
    - preferences are now in a tabbed container
    - reimplemented post/edit
    - reimplemented post/edit (lost in the 0.5 rewrite)
    - schema tweaks and fixes
    - store the IP address of each post author
    - tidied up CSS and layout

0.52    Fri May  4 19:00:32 BST 2007

Changes  view on Meta::CPAN

    - if we have a post when viewing thread, go to last page in thread
      [ideally we'd like to go to the page containing the post, but we don't
      know how to work this out yet]

0.07  Thu Jan 26 08:49:19 GMT 2006
    - added preference table to main schema
    - added patch file for moving from 0.06 to 0.07 db schema
    - nicedate() sets timezone to value in user's preference
    - added my/preferences page, to allow setting of timezone area
    - fixed behaviour with login_if_required() in auto()
    - store updated and valid timezone prefs
    - update schema to include new columns (post.reply_to, person.last_post,
      person.post_count)
    - update person.count after a new post or reply
    - alter thread view layout and include post count for person
    - store user's last post (not sure why we might want this, it just feels
      useful)
    - make "reply to post" button work as expected
    - allow users to quote a previous reply, and display quoted text with post
      in thread view

ROADMAP  view on Meta::CPAN


    - move tables into 'parley.*' namespace
    - upgrade to YUI 2.7.x

1.3.0:

    - admin: add/edit/order forums

1.4.0:

    - user prefs:
        - language preference
        - password management
        - resend auth mail(s)
        - realtime time-format example update
        - gravatar support

1.5.0:

    - quick reply
    - quick help

TODO  view on Meta::CPAN

  - investigate in-application language preference/choice
  - write some sensible T&Cs
  - update avatar update response to force a No-Cache?
  - proper moderator support/management
     - forum creation
     - abuse handling
     - post editing (other users)
     - IP/user reporting
  - voting?
  - 'smileys'?
  - realtime time-format example update (my/prefs - tab_time)
  - timezone menu usability
  - posting page ForumCode help/tips
  - database versioning
  - ForumCode: thumbnail image, lightbox view?
  - investigate: package Your::Schema; sub connect { do the check; next::method }
  - investigate: DBIx::Class::Schema::Versioned
  - investigate: t/model_Post.t / distinct count
D - optional google ads
D - update i18n from Advanced Search additions
D - optional ReCAPTCHA during sign-up

TODO  view on Meta::CPAN

D - use HTML::ForumCode::Cookbook::Recipe1 for message preview(s)
D - fix <ul>/<ol> CSS
D - setup guide; add mailing list details
D - get latest i18n from DJ
D - Parley::Version (a la SVK)
D - login form flickers on IE7 page load
D - [bug] user/profile doesn't show avatar
D - add i18n for 'or'
D - more visible Create New Thread
D - [bug] can't logout
D - styling: user prefs
D - styling: user profile
D - disabled menu items don't look disabled
D - more visible Login/Register
D - [bug] fix email notification for thread notification emails
D - application logo
D - styling: thread/reply
D - styling: post/edit
D - styling: user/login
D - styling: thread/add
D - post/edit: preview (message) code

lib/Parley/Controller/My.pm  view on Meta::CPAN


sub update :Path('/my/preferences/update') {
    my ($self, $c) = @_;
    my $form_name = $c->request->param('form_name');

    # use the my/preferences template
    $c->stash->{template} = 'my/preferences';

    # make sure the form name matches something we have a DFV profile for
    if (not exists $dfv_profile_for{ $form_name }) {
        # if there's no form, detach back to prefs
        if ($form_name =~ m{\A\s*\z}xms) {
            $c->response->redirect( $c->uri_for('/my/preferences') );
            return;
        }

        # otherwise notify user about the unknown form
        parley_warn(
            $c,
              $c->localize(qq{No Such Form}) 
            . qq{: $form_name}

lib/Parley/Controller/Root.pm  view on Meta::CPAN


    # preserve cookies
    if ($c->request->cookie($cookie_name)) {
        $c->response->cookies->{ $cookie_name } = {
            value       => $c->request->cookie($cookie_name)->value,
            expires     => '+14d',
        };

        # push cookie saved languages onto list of i18n languages the user accepts
        my (@languages);
        # fetch cookie language prefs (if any)
        push @languages,
            split(
                /\s+/,
                $c->request->cookie($cookie_name)->value
            )
        ;
        # get current list of accepted languages
        push @languages, @{$c->languages};
        # make the list have unique entries
        @languages = uniq @languages;

lib/Parley/Controller/User/SignUp.pm  view on Meta::CPAN

    $new_person = $c->model('ParleyDB')->resultset('Person')->create(
        {
            first_name          => $valid_results->{first_name},
            last_name           => $valid_results->{last_name},
            forum_name          => $valid_results->{forum_name},
            email               => $valid_results->{email},
            authentication_id   => $new_auth->id(),
        }
    );

    # add (default) prefs for new person
    $new_preference = $c->model('ParleyDB')->resultset('Preference')->create(
        {
            # default everything
            show_tz => 1,
        }
    );
    # and link to the new person
    $new_person->preference_id( $new_preference->id() );
    $new_person->update;

root/base/my/preferences  view on Meta::CPAN

<div class="error_feedback">
    [% view.error.message %]
    <ul>
        [% FOREACH message IN view.error.messages %]
            <li>[% message %]</li>
        [% END %]
    </ul>
</div>
[% END %]

<div id="tabbed_prefs" class="yui-navset" style="max-width: 80%; margin-left: auto; margin-right: auto;">
    [% tab_info = [
            { label => l('Your Details'),       tab_name => 'tab_you' },
            { label => l('Time'),               tab_name => 'tab_time' },
            { label => l('Notifications'),      tab_name => 'tab_notifications' },
            { label => l('Avatar'),             tab_name => 'tab_avatar' },
            { label => l('Skin'),               tab_name => 'tab_skin' },
       ]
    %]
    [% SET selected_tab = c.session.show_pref_tab || 'tab_you' %]
    <!-- selected_tab = [%selected_tab%] -->

root/base/my/preferences  view on Meta::CPAN

    [% END %]
    </ul>            

    <div class="yui-content" style="min-height: 200px;">
    [% FOR tab IN tab_info %]
        <div id="[% tab.tab_name %]"><p>[% PROCESS "my/${tab.tab_name}" %]</p></div>
    [% END %]
    </div>
</div>
<script type="text/javascript">
    var tabView = new YAHOO.widget.TabView('tabbed_prefs');
</script>

[% IF c.session.my_pref_came_from %]
<p>
<a href="[% c.session.my_pref_came_from %]">[%l('Return to the forum')%]</a>
</p>
[% ELSE %]
<p>&nbsp;</p>
[% END %]

root/skin2/my/preferences  view on Meta::CPAN

<div class="error_feedback">
    [% view.error.message %]
    <ul>
        [% FOREACH message IN view.error.messages %]
            <li>[% message %]</li>
        [% END %]
    </ul>
</div>
[% END %]

<div id="tabbed_prefs" class="yui-navset" style="max-width: 80%; margin-left: auto; margin-right: auto;">
    [% tab_info = [
            { label => l('Your Details'),       tab_name => 'tab_you' },
            { label => l('Time'),               tab_name => 'tab_time' },
            { label => l('Notifications'),      tab_name => 'tab_notifications' },
            { label => l('Avatar'),             tab_name => 'tab_avatar' },
            { label => l('Skin'),               tab_name => 'tab_skin' },
       ]
    %]
    [% SET selected_tab = c.session.show_pref_tab || 'tab_you' %]
    <!-- selected_tab = [%selected_tab%] -->

root/skin2/my/preferences  view on Meta::CPAN

    [% END %]
    </ul>            

    <div class="yui-content" style="min-height: 200px;">
    [% FOR tab IN tab_info %]
        <div id="[% tab.tab_name %]"><p>[% PROCESS "my/${tab.tab_name}" %]</p></div>
    [% END %]
    </div>
</div>
<script type="text/javascript">
    var tabView = new YAHOO.widget.TabView('tabbed_prefs');
</script>

[% IF c.session.my_pref_came_from %]
<p>
<a href="[% c.session.my_pref_came_from %]">[%l('Return to the forum')%]</a>
</p>
[% ELSE %]
<p>&nbsp;</p>
[% END %]

root/static/css/common.css  view on Meta::CPAN


.user_profile {
    margin-left:        auto;
    margin-right:       auto;
    width:              80%;
}
.user_profile td {
    vertical-align:     top;
}

.prefs_notification {
    margin-left:        auto;
    margin-right:       auto;
    width:              80%;
}

.user_profile_key {
    font-weight:        bold;
    text-align:         right;
    vertical-align:     top;
}

root/static/css/parley.css  view on Meta::CPAN



/* YUI CSS overrides */

/* make disabled menuitems look 'different' */
.yuimenuitem .disabled {
    color:              #A6A6A6;
    cursor:             default;
}

/* tabview (user prefs) */

/* .yui-navset defaults to .yui-navset-top */ 
.yui-skin-sam .yui-navset .yui-nav, 
.yui-skin-sam .yui-navset .yui-navset-top .yui-nav { /* protect nested tabviews from other orientations */ 
    border:solid #333; /* color between tab list and content */ 
    border-width:0 0 5px; 
    Xposition:relative; 
    zoom:1; 
}



( run in 1.271 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )