/**
  * importファイルフォーマットのダウンロード
  *
  * @return void
  */
 public function download_import_format()
 {
     App::uses('CsvFileWriter', 'Files.Utility');
     $header = $this->User->getCsvHeader();
     $csvWriter = new CsvFileWriter(array('header' => $header));
     $csvWriter->close();
     return $csvWriter->download('export_user.csv');
 }
示例#2
0
 /**
  * エクスポート処理
  *
  * @param Model $model 呼び出しもとのModel
  * @param array $options エクスポートのオプション
  * @param array $queryParams 絞り込みによる条件配列(リクエストデータ)
  * @return bool
  */
 public function exportUsers(Model $model, $options = array(), $queryParams = array())
 {
     App::uses('CsvFileWriter', 'Files.Utility');
     $model->loadModels(['UserSearch' => 'Users.UserSearch']);
     $this->_bindModel($model, false);
     $header = $this->getCsvHeader($model);
     $defaultConditions = $model->UserSearch->cleanSearchFields($queryParams);
     $conditions = Hash::merge($defaultConditions, Hash::get($options, 'conditions', []));
     $joins = $model->UserSearch->getSearchJoinTables(Hash::get($options, 'joins', array()), $conditions);
     $conditions = $model->UserSearch->getSearchConditions(Hash::get($options, 'conditions', []));
     $userIds = $model->find('list', array('recursive' => -1, 'conditions' => $conditions, 'joins' => $joins, 'group' => 'User.id', 'limit' => self::MAX_LIMIT, 'order' => array('Role.id' => 'asc')));
     $users = $model->find('all', array('fields' => array_keys($header), 'recursive' => 0, 'conditions' => array('User.id' => array_values($userIds)), 'order' => array('Role.id' => 'asc')));
     $csvWriter = new CsvFileWriter(array('header' => $header));
     if (!$users && !is_array($users)) {
         $csvWriter->close();
         return false;
     }
     foreach ($users as $user) {
         $user = Hash::insert($user, 'User.password', '');
         $csvWriter->addModelData($user);
     }
     $csvWriter->close();
     return $csvWriter;
 }
 /**
  * download
  *
  * @return file
  * @throws InternalErrorException
  */
 public function download()
 {
     App::uses('TemporaryFolder', 'Files.Utility');
     App::uses('CsvFileWriter', 'Files.Utility');
     App::uses('ZipDownloader', 'Files.Utility');
     $zipPassword = $this->__getCompressPassword();
     if ($zipPassword === false) {
         return false;
     }
     try {
         $userId = Current::read('User.id');
         $contentKey = $this->request->params['key'];
         $this->CircularNotice->initCircularNotice($this);
         // 回覧を取得
         $content = $this->CircularNoticeContent->getCircularNoticeContent($contentKey, $userId);
         if (!$content) {
             return $this->throwBadRequest();
         }
         $contentId = $content['CircularNoticeContent']['id'];
         // Paginator経由で回覧先一覧を取得
         $this->Paginator->settings = $this->CircularNoticeTargetUser->getCircularNoticeTargetUsersForPaginator($contentId, $this->params['named'], $userId, 0);
         $targetUsers = $this->Paginator->paginate('CircularNoticeTargetUser');
         $tmpFolder = new TemporaryFolder();
         $csvFile = new CsvFileWriter(array('folder' => $tmpFolder->path));
         // ヘッダ取得
         $header = $this->CircularNotice->getTargetUserHeader();
         $csvFile->add($header);
         // 回答データ整形
         $content = $content['CircularNoticeContent'];
         foreach ($targetUsers as $targetUser) {
             $answer = $this->__parseAnswer($content['reply_type'], $targetUser);
             $readDatetime = __d('circular_notices', 'Unread');
             if ($targetUser['CircularNoticeTargetUser']['read_datetime']) {
                 $readDatetime = $this->CircularNotice->getDisplayDateFormat($targetUser['CircularNoticeTargetUser']['read_datetime']);
             }
             $replyDatetime = __d('circular_notices', 'Unreply');
             if ($targetUser['CircularNoticeTargetUser']['reply_datetime']) {
                 $replyDatetime = $this->CircularNotice->getDisplayDateFormat($targetUser['CircularNoticeTargetUser']['reply_datetime']);
             }
             $data = array(h($targetUser['User']['handlename']), h($readDatetime), h($replyDatetime), h($answer));
             $csvFile->add($data);
         }
     } catch (Exception $e) {
         $this->NetCommons->setFlashNotification(__d('circular_notices', 'download error'), array('interval' => NetCommonsComponent::ALERT_VALIDATE_ERROR_INTERVAL));
         $this->redirect(NetCommonsUrl::actionUrl(array('controller' => 'circular_notices', 'action' => 'view', 'block_id' => Current::read('Block.id'), 'frame_id' => Current::read('Frame.id'), 'key' => $contentKey)));
         return false;
     }
     $this->autoRender = false;
     $zipFileName = $content['subject'] . CircularNoticeComponent::EXPORT_COMPRESS_FILE_EXTENSION;
     $downloadFileName = $content['subject'] . CircularNoticeComponent::EXPORT_FILE_EXTENSION;
     return $csvFile->zipDownload(rawurlencode($zipFileName), $downloadFileName, $zipPassword);
 }
 /**
  * download
  *
  * @return void
  * @throws InternalErrorException
  */
 public function download()
 {
     // NetCommonsお約束:コンテンツ操作のためのURLには対象のコンテンツキーが必ず含まれている
     // まずは、そのキーを取り出す
     // 登録フォームキー
     $registrationKey = $this->_getRegistrationKeyFromPass();
     // キー情報をもとにデータを取り出す
     $registration = $this->RegistrationAnswerSummaryCsv->getRegistrationForAnswerCsv($registrationKey);
     if (!$registration) {
         $this->_setFlashMessageAndRedirect(__d('registrations', 'Designation of the registration does not exist.'));
         return;
     }
     // 圧縮用パスワードキーを求める
     if (!empty($this->request->data['AuthorizationKey']['authorization_key'])) {
         $zipPassword = $this->request->data['AuthorizationKey']['authorization_key'];
     } else {
         $this->_setFlashMessageAndRedirect(__d('registrations', 'Setting of password is required always to download answers.'));
         return;
     }
     try {
         $tmpFolder = new TemporaryFolder();
         $csvFile = new CsvFileWriter(array('folder' => $tmpFolder->path));
         // 登録データを一気に全部取得するのは、データ爆発の可能性があるので
         // REGISTRATION_CSV_UNIT_NUMBER分に制限して取得する
         $offset = 0;
         do {
             $datas = $this->RegistrationAnswerSummaryCsv->getAnswerSummaryCsv($registration, self::REGISTRATION_CSV_UNIT_NUMBER, $offset);
             // CSV形式で書きこみ
             foreach ($datas as $data) {
                 $csvFile->add($data);
             }
             $dataCount = count($datas);
             // データ数カウント
             $offset += $dataCount;
             // 次の取得開始位置をずらす
         } while ($dataCount == self::REGISTRATION_CSV_UNIT_NUMBER);
         // データ取得数が制限値分だけとれている間は繰り返す
     } catch (Exception $e) {
         // NetCommonsお約束:エラーメッセージのFlash表示
         $this->_setFlashMessageAndRedirect(__d('registrations', 'download error'));
         return;
     }
     // Downloadの時はviewを使用しない
     $this->autoRender = false;
     // ダウンロードファイル名決定 登録フォーム名称をつける
     $zipFileName = $registration['Registration']['title'] . '.zip';
     $downloadFileName = $registration['Registration']['title'] . '.csv';
     // 出力
     return $csvFile->zipDownload(rawurlencode($zipFileName), $downloadFileName, $zipPassword);
 }