#!/usr/local/bin/perl # $Id$ use strict; BEGIN { package List::Company::Index; use FJ::DateUtil qw(now); use FJ::Controller; use FJ::String qw(make_placeholder); use base qw(FJ::Controller); # # PLUGINS # __PACKAGE__->plugins(qw(List::SEOPage List::Company)); # # TEMPLATES # __PACKAGE__->templates( default => { file => 'tmpl/list/company/index.tmpl' }, ); # # PREPARE # sub prepare { my ($self) = @_; return 'default'; } # # METHODS # sub default { my ($self) = @_; my $seo_page = $self->get_seo_page(); my $index_layout = $seo_page->get_company_initial_layout(); $self->set_common_seo_template_params(); #main $self->template->param( kana_index_initials => $index_layout->{kana}, alphabet_index_initials => $index_layout->{alphabet}, hot_companies => $self->show_hot_companies(), simple_search => $seo_page->show_simple_search(), right_register => $seo_page->show_right_register(), right_search_job_only_by_job_type => $seo_page->show_right_search_job_only_by_job_type(), right_popular_job_category_ranking => $seo_page->show_right_popular_job_category_ranking(), right_work_guide_contents => $seo_page->show_right_work_guide_contents(), _no_escape => 1, ); } sub show_hot_companies { my ($self) = @_; # # 過去1週間の人気のある求人を取得 # FJ::V::SEOPage#show_search_job_by_company_name を参照 my $to = now()->add(days => -1); my $from = $to->clone->add(days => -6); my @job_ids = FJ::M::AdminPopularJob->load_iterator_by_sql( _sql => <<"SQL", SELECT job_id, SUM(apply_count) AS apply_count FROM admin_popular_job WHERE date BETWEEN ? AND ? GROUP BY job_id HAVING apply_count >= 5 ORDER BY apply_count DESC SQL _bind_values => [ $from->ymd, $to->ymd ], )->collect(sub { shift->job_id }); my @job_id_bind_values; my @companies = (); if (@job_ids) { my $job_id_where .= sprintf "\nAND j.id IN (%s)", make_placeholder(@job_ids); push @job_id_bind_values, @job_ids; @companies = FJ::M::Company->load_iterator_by_sql( _sql => <<"SQL", SELECT c.id , c.name , c.kana , c.pic_logo , c.check_logo , cic.initial_id FROM job AS j INNER JOIN billing AS b ON b.companyID=j.companyID INNER JOIN company AS c ON c.id = j.companyID INNER JOIN company_initial_count AS cic ON cic.company_id = c.id WHERE j.permisson = 'allow' $job_id_where GROUP BY c.id ORDER BY c.pic_logo DESC, c.id DESC LIMIT 10 SQL _bind_values => [ @job_id_bind_values ] )->as_array; } if (@companies < 10) { # 10件未満の場合はjob_idの条件をはずして再検索する my $iterator2 = FJ::M::Company->load_iterator_by_sql( _sql => <<"SQL", SELECT c.id , c.name , c.kana , c.pic_logo , c.check_logo , cic.initial_id FROM job AS j INNER JOIN billing AS b ON b.companyID=j.companyID INNER JOIN company AS c ON c.id = j.companyID INNER JOIN company_initial_count AS cic ON cic.company_id = c.id WHERE j.permisson = 'allow' GROUP BY c.id ORDER BY c.pic_logo DESC, c.id DESC LIMIT 10 SQL ); while (my $c = $iterator2->next) { next if (grep { $_->id == $c->id } @companies); push @companies, $c; } } my @logo_companies = (); my @no_logo_companies = (); for my $company (@companies) { last if (@no_logo_companies >= 4); $company->{url} = sprintf( "/list/company-%s-%s/1-1-1/", $company->initial_id, FJ::M::Company->hashed_id($company->id), ); my $logo_url = $company->get_logo_url(); if ( @logo_companies < 3 && $logo_url ) { $company->{logo_url} = $logo_url; push @logo_companies, $company; } else { # ロゴがある企業がいっぱいになったらロゴ無しの方に入れる push @no_logo_companies, $company; } } if (!@logo_companies && !@no_logo_companies) { # データがない場合はブロックごと非表示 return ''; } my $ht = $self->load_sub_template( file => 'tmpl/list/company/_hot_companies.tmpl' ); $ht->param( logo_companies => \@logo_companies, no_logo_companies => \@no_logo_companies, show_line => @logo_companies && @no_logo_companies, ); return $ht->output; } 1; } # End of package definition scope. List::Company::Index->new()->process();