From 714d4b4650c2122c8d4c1a7af02a91eae6790384 Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Tue, 25 Oct 2016 17:51:38 +0900 Subject: [PATCH] add monitoring page for activities (fixes #4027) --- apps/pc_backend/config/routing.yml | 11 +++ apps/pc_backend/i18n/messages.ja.xml | 37 ++++++++ .../monitoring/actions/actions.class.php | 50 +++++++++++ .../templates/activityListSuccess.php | 88 +++++++++++++++++++ lib/config/config/monitoring.yml | 4 + .../doctrine/ActivityDataFormFilter.class.php | 69 +++++++++++++++ 6 files changed, 259 insertions(+) create mode 100644 apps/pc_backend/modules/monitoring/templates/activityListSuccess.php create mode 100644 lib/filter/doctrine/ActivityDataFormFilter.class.php diff --git a/apps/pc_backend/config/routing.yml b/apps/pc_backend/config/routing.yml index 61aa0aac3..abe451271 100644 --- a/apps/pc_backend/config/routing.yml +++ b/apps/pc_backend/config/routing.yml @@ -3,6 +3,17 @@ homepage: url: / param: { module: default, action: top } +monitoring_activity_list: + url: /monitoring/activityList + params: { module: monitoring, action: activityList } + +monitoring_activity_delete: + class: sfDoctrineRoute + url: /monitoring/activity/:id + params: { module: monitoring, action: activityDelete } + options: { model: ActivityData, type: object } + requirements: { sf_method: [delete], id: \d+ } + # mail rules mail_config: url: /mail diff --git a/apps/pc_backend/i18n/messages.ja.xml b/apps/pc_backend/i18n/messages.ja.xml index d6717b4a5..c49924f31 100644 --- a/apps/pc_backend/i18n/messages.ja.xml +++ b/apps/pc_backend/i18n/messages.ja.xml @@ -612,6 +612,10 @@ Uploaded file list アップロードファイルリスト + + %Activity% list + %Activity%リスト + Cache Clear キャッシュの削除 @@ -1469,6 +1473,39 @@ %Community% Sub Administrator %Community%副管理者 + + + Created Date + 作成日時 + + + Author + 投稿者 + + + Public Flag + 公開範囲 + + + Body + 本文 + + + Foreign Table + 外部テーブル + + + Foreign ID + 外部ID + + + Foreign Table / ID + 外部テーブル / ID + + + Reply To ID + 返信先ID + diff --git a/apps/pc_backend/modules/monitoring/actions/actions.class.php b/apps/pc_backend/modules/monitoring/actions/actions.class.php index 1849b65e0..90a139c92 100644 --- a/apps/pc_backend/modules/monitoring/actions/actions.class.php +++ b/apps/pc_backend/modules/monitoring/actions/actions.class.php @@ -132,4 +132,54 @@ public function executeFileDownload(sfWebRequest $request) $file->getFileBin()->getBin() ); } + + /** + * Executes activityList action + * + * @param opWebRequest $request A request object + */ + public function executeActivityList(opWebRequest $request) + { + $query = Doctrine_Core::getTable('ActivityData')->createQuery('r') + ->select('r.*, m.name') + ->innerJoin('r.Member m') + ->orderBy('r.id DESC'); + + $form = new ActivityDataFormFilter(); + $form->setQuery($query); + + if ($request->isMethod(sfWebRequest::POST)) + { + $form->bind($request->getParameter($form->getName())); + if ($form->isValid()) + { + $query = $form->getQuery(); + } + } + + $maxPerPage = 20; + $pager = new sfDoctrinePager('ActivityData', $maxPerPage); + $pager->setQuery($query); + $pager->setPage((int)$request->getParameter('page', 1)); + $pager->init(); + + $this->form = $form; + $this->pager = $pager; + } + + /** + * Executes activityDelete action + * + * @param opWebRequest $request A request object + */ + public function executeActivityDelete(opWebRequest $request) + { + $request->checkCSRFProtection(); + + $activity = $this->getRoute()->getObject(); + $activity->delete(); + + $this->getUser()->setFlash('notice', 'Deleted.'); + $this->redirect(array('sf_route' => 'monitoring_activity_list')); + } } diff --git a/apps/pc_backend/modules/monitoring/templates/activityListSuccess.php b/apps/pc_backend/modules/monitoring/templates/activityListSuccess.php new file mode 100644 index 000000000..0a6ccd808 --- /dev/null +++ b/apps/pc_backend/modules/monitoring/templates/activityListSuccess.php @@ -0,0 +1,88 @@ + + + + + + +renderFormTag(url_for(array('sf_route' => 'monitoring_activity_list'))) ?> +renderHiddenFields() ?> + + + + + + + + + +
+ + +hasErrors()): ?> + +

true)) ?>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + in_reply_to_activity_id): ?> + + + + + + + foreign_table): ?> + + + + + + + + + + + +
id ?>
created_at ?>
ID: member_id ?> (Member->name ?>)
getPublicFlagCaption() ?>
body ?>
+ renderFormTag(url_for(array('sf_route' => 'monitoring_activity_list'))) ?> + + + + +
foreign_table ?> / foreign_id ?>
+ 'monitoring_activity_delete', 'sf_subject' => $activity), array( + 'method' => 'delete', + 'confirm' => __('本当に削除してもよろしいですか?'), + )) ?> +
+ + +

true)) ?>

+ + diff --git a/lib/config/config/monitoring.yml b/lib/config/config/monitoring.yml index 2e3d168af..363ed6e9b 100644 --- a/lib/config/config/monitoring.yml +++ b/lib/config/config/monitoring.yml @@ -9,3 +9,7 @@ editImage: fileList: caption: "Uploaded file list" url: "monitoring/fileList" + +fileList: + caption: "%Activity% list" + url: "monitoring/activityList" diff --git a/lib/filter/doctrine/ActivityDataFormFilter.class.php b/lib/filter/doctrine/ActivityDataFormFilter.class.php new file mode 100644 index 000000000..5a60cc676 --- /dev/null +++ b/lib/filter/doctrine/ActivityDataFormFilter.class.php @@ -0,0 +1,69 @@ + + */ +class ActivityDataFormFilter extends BaseActivityDataFormFilter +{ + public function configure() + { + $this->setWidget('id', new sfWidgetFormFilterInput(array('with_empty' => false))); + $this->setValidator('id', new sfValidatorSchemaFilter('text', new sfValidatorDoctrineChoice(array( + 'model' => 'ActivityData', + 'column' => 'id', + 'required' => false, + )))); + + $dateParams = array( + 'culture' => sfContext::getInstance()->getUser()->getCulture(), + 'month_format' => 'number', + 'can_be_empty' => true, + ); + $this->setWidget('created_at', new sfWidgetFormFilterDate(array( + 'from_date' => new opWidgetFormDate($dateParams), + 'to_date' => new opWidgetFormDate($dateParams), + 'template' => '%from_date% 〜 %to_date%', + 'with_empty' => false, + ))); + + $this->setWidget('foreign_table', new sfWidgetFormFilterInput(array( + 'empty_label' => 'NULL', + 'template' => '%input% %empty_checkbox% %empty_label%', + ))); + $this->setValidator('foreign_table', new sfValidatorSchemaFilter('text', new opValidatorString(array('required' => false)))); + + $this->setWidget('foreign_id', new sfWidgetFormFilterInput(array('with_empty' => false))); + + $this->setWidget('in_reply_to_activity_id', new sfWidgetFormInput()); + + $this->widgetSchema->setLabels(array( + 'id' => 'ID', + 'created_at' => 'Created Date', + 'member_id' => 'Author', + 'body' => 'Body', + 'foreign_table' => 'Foreign Table', + 'foreign_id' => 'Foreign ID', + 'in_reply_to_activity_id' => 'Reply To ID', + )); + + $this->useFields(array('id', 'created_at', 'member_id', 'body', 'foreign_table', 'foreign_id', 'in_reply_to_activity_id')); + } + + protected function addForeignTableColumnQuery(Doctrine_Query $query, $field, $values) + { + $fieldName = $this->getFieldName($field); + + if (isset($values['is_empty']) && $values['is_empty']) + { + $query->addWhere(sprintf('%s.%s IS NULL', $query->getRootAlias(), $fieldName)); + } + elseif (isset($values['text']) && '' !== $values['text']) + { + $query->addWhere(sprintf('%s.%s = ?', $query->getRootAlias(), $fieldName), $values['text']); + } + } +}