use Newslash::Model::Users::Prefs;
use Newslash::Model::Users::Configs;
+use Newslash::Model::Users::Achievements;
use Newslash::Util::Timezones;
# sub models
sub prefs { return shift->new_instance_of('::Users::Prefs'); }
sub configs { return shift->new_instance_of('::Users::Configs'); }
+sub achievements { return shift->new_instance_of('::Users::Achievements'); }
# auth related
sub authentification {
--- /dev/null
+package Newslash::Model::Users::Achievements;
+use Newslash::Model::Base -base;
+
+sub select {
+ my $self = shift;
+ my $params = {@_};
+
+ my $uid = $params->{id} || $params->{uid} || $params->{user_id};
+ return if !$uid;
+
+ my $keys = { uid => "user_achievements.uid",
+ aid => "user_achievements.aid",
+ exponent => "user_achievements.exponent",
+ id => "user_achievements.id",
+ };
+ my $datetime_keys = { create_time => "user_achievements.createtime" };
+
+ my ($where_clause, $where_values, $unique) = $self->build_where_clause(keys => $keys,
+ datetime_keys => $datetime_keys,
+ params => $params);
+ my ($limit_clause, $limit_values) = $self->build_limit_clause(params => $params);
+ my ($orderby_clause, $orderby_values) = $self->build_order_by_clause(keys => $keys,
+ datetime_keys => $datetime_keys,
+ params => $params);
+
+ my $sql = <<"EOSQL";
+SELECT * FROM user_achievements
+ LEFT JOIN achievements ON user_achievements.aid = achievements.aid
+ $where_clause
+ $orderby_clause
+ $limit_clause
+EOSQL
+
+ my $dbh = $self->connect_db;
+ my $sth = $dbh->prepare($sql);
+
+ my @attrs;
+ push @attrs, @$where_values, @$limit_values, @$orderby_values;
+
+ $sth->execute(@attrs);
+ my $rs = $sth->fetchall_arrayref({});
+ if (!defined $rs) {
+ $self->set_error($dbh->errstr, $dbh->err);
+ $self->disconnect_db;
+ return;
+ }
+ $self->disconnect_db;
+ return $rs;
+}
+
+
+1;
$user->get('/foes' => [nickname => qr/~.*/])->to('user#foes');
$user->get('/fans' => [nickname => qr/~.*/])->to('user#fans');
$user->get('/freaks' => [nickname => qr/~.*/])->to('user#freaks');
- #$user->get('/achievements' => [nickname => qr/~.*/])->to('user#achievements');
+ $user->get('/achievements' => [nickname => qr/~.*/])->to('user#achievements');
#$r->get('/:user_name/journal' => [user_name => qr/~.*/])->to('journal#user_journals');
}
}
sub achievements {
+ my $c = shift;
+ my $query_func = sub {
+ my ($c, $the_user) = @_;
+ my $items = $c->model('users')->achievements->select(uid => $the_user->{uid});
+ return $items;
+ };
+ $c->_base_render(achievements => $query_func);
}
ok($rs, "update_acl2_by_srcid (2)");
};
+subtest 'achievements' => sub {
+ my $rs = $users->achievements->select(uid => $uid);
+ ok($rs, "select achievements");
+};
+
subtest 'update users' => sub {
plan skip_all => "mode is not 'test'" if ($t->app->mode ne 'test');
--- /dev/null
+<article type="achievements">
+ <header>
+ <h1>[% IF item.exponent > 0 %][% item.exponent %]件の[% END %][% item.description %]</h1>
+
+ <div class="property">
+ <span class="content-type">実績</span>
+ <span class="create-time">[% dtf.mysql_to_user(item.createtime, user.config.offset_sec, user.config.time_format) %]</span>
+ </div>
+ </header>
+</article>
<li[% IF user_tab == "foes" %] class="active"[% END %]><a href="/~[% the_user.nickname %]/foes">テキ</a></li>
<li[% IF user_tab == "fans" %] class="active"[% END %]><a href="/~[% the_user.nickname %]/fans">ファン</a></li>
<li[% IF user_tab == "freaks" %] class="active"[% END %]><a href="/~[% the_user.nickname %]/freaks">アンチ</a></li>
- <!--
- <li[% IF user_tab == "achievements" %] class="active"[% END %]><a href="/~[% the_user.nickname %]/achievements">功績</a></li>
- -->
+ <li[% IF user_tab == "achievements" %] class="active"[% END %]><a href="/~[% the_user.nickname %]/achievements">実績</a></li>
</ul>
</div>
<div class="user [%- page.content_type -%]">
[%- SWITCH user_tab %]
- [%- CASE ['friends', 'foes', 'fans', 'freaks' ] -%]
- [%- FOREACH user IN items -%]
- [% INCLUDE common/user the_user=user no_form=1 %]
- [%- END -%]
-
- [%- CASE DEFAULT -%]
- [%- FOREACH item IN items -%]
- [%- INCLUDE common/article/article hide_bodytext=1 %]
- [%- END -%]
+ [%- CASE ['friends', 'foes', 'fans', 'freaks'] -%]
+ [%- FOREACH user IN items -%]
+ [% INCLUDE common/user the_user=user no_form=1 %]
+ [%- END -%]
+
+ [%- CASE 'achievements' -%]
+ [%- FOREACH item IN items -%]
+ [% INCLUDE common/achievements %]
+ [%- END -%]
+
+ [%- CASE DEFAULT -%]
+ [%- FOREACH item IN items -%]
+ [%- INCLUDE common/article/article hide_bodytext=1 %]
+ [%- END -%]
</div><!-- .index -->
[%- END -%]
</div>