Parley
view release on metacpan or search on metacpan
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
- 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
- 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
- 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
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> </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> </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 )