/** * @Access("formmaker: manage submissions") * @Route("/", methods="GET") * @Request({"filter": "array", "page":"int"}) */ public function indexAction($filter = [], $page = 0) { $query = Submission::query(); $filter = array_merge(array_fill_keys(['status', 'form', 'order', 'limit'], ''), $filter); extract($filter, EXTR_SKIP); if (is_numeric($status)) { $query->where('status = ?', [(int) $status]); } elseif ($status != 'all') { $query->where(['status > 0']); } if ($form) { $query->where(function ($query) use($form) { //todo why nesting if (is_array($form)) { $form = [2, 1]; // $query->orWhere('form_id IN(?)', [implode(',', $form)]); //todo selects only first id $query->orWhere('form_id IN(' . implode(',', $form) . ')'); } else { $query->orWhere(['form_id' => (int) $form]); } }); } if (!preg_match('/^(created|ip|email)\\s(asc|desc)$/i', $order, $order)) { $order = [1 => 'created', 2 => 'desc']; } $limit = (int) $limit ?: App::module('formmaker')->config('submissions_per_page'); $count = $query->count(); $pages = ceil($count / $limit); $page = max(0, min($pages - 1, $page)); $submissions = array_values($query->offset($page * $limit)->limit($limit)->related('form')->orderBy($order[1], $order[2])->get()); return compact('submissions', 'pages', 'count'); }
/** * @Route("/csv", methods="POST") * @Request({"options": "array"}, csrf=true) */ public function exportCsvAction($options = []) { $csvString = ''; $options = new ArrObject($options); if ($form_id = $options->get('form_id', 0)) { //get forminfo $form = Form::find($form_id); //get submissions $query = Submission::query(); $query->where(['form_id = ?'], [$form_id])->whereIn('status', $options->get('status', [])); //input cleaned? $submissions = $query->orderBy('created', 'desc')->get(); $csvString = (new CsvHelper($submissions, $form, $options))->toCsv(); if ($options->get('mark_archived', false)) { Submission::query()->whereIn('id', array_keys($submissions))->update(['status' => Submission::STATUS_ARCHIVED]); } } else { App::abort(404, 'Not a single form was given.'); } return ['csv' => $csvString]; }