/**
  * @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];
 }