public static function getAverageFields(CustomDataPosition $pos, array $params = array())
 {
     $filter = new CustomDataFilter($pos);
     $filter->field(null);
     $fields = $pos->getFieldsForClassPath(self::$classPath);
     foreach ($fields as $field) {
         $fieldName = Sanitize::saveDb($field->getFieldName());
         $filter->fieldCalculation($fieldName, "AVG({$fieldName})");
     }
     foreach ($params as $field => $value) {
         $filter->condition($field, $value);
     }
     $result = $filter->execute();
     if ($result) {
         $data = new CustomData($pos);
         $row = Database::getObject()->fetchAssoc($result);
         if ($row) {
             $data = new CustomData($pos);
             $data->set($row, true, $fields);
             return $data->getFields(array_keys($fields));
         }
     }
     return array();
 }
 public function write($onlyCreate = false, $tpl = null)
 {
     $id = Request::get(1, VAR_INT);
     $isSent = Request::get(2, VAR_URI) == 'send';
     $data = new CustomData($this->position);
     if ($id > 0 && $onlyCreate && Session::getObject()->getSetting('last_added') != $id) {
         CmsPage::error('Die Bearbeitungszeit ist abgelaufen. Bitte wenden Sie sich an den Administrator.');
     } else {
         if ($id > 0 && !$data->load($id)) {
             CmsPage::error('Der gewählte Datensatz wurde leider nicht gefunden.');
         } else {
             if ($id == 0) {
                 $data->setToDefault();
             }
             $fields = $data->getFields();
             if ($isSent) {
                 $options = array();
                 foreach ($fields as $field) {
                     if ($field->canWrite()) {
                         if ($field->getField() instanceof CustomExternalFields) {
                             $options = array_merge($options, $field->getValidation());
                         } else {
                             $options[$field->getFieldName()] = $field->getValidation();
                         }
                     }
                 }
                 $result = Validator::checkRequest($options);
                 foreach ($fields as $field) {
                     if ($field->canWrite()) {
                         $name = $field->getFieldName();
                         if (isset($result['data'][$name])) {
                             $field->setData($result['data'][$name]);
                         }
                     }
                 }
                 if (count($result['error']) > 0) {
                     CmsPage::error($result['error']);
                 } else {
                     $success = false;
                     if ($id > 0) {
                         $success = $data->edit($id);
                     } else {
                         $id = $data->add();
                         if ($onlyCreate) {
                             Session::getObject()->setSetting('last_added', $id);
                         }
                         if ($id > 0) {
                             $success = true;
                         } else {
                             $id = 0;
                             $success = false;
                         }
                     }
                     if ($success) {
                         CmsPage::ok("Der Datensatz wurde erfolgreich gespeichert.");
                     } else {
                         CmsPage::error("Der Datensatz konnt leider nicht gespeichert werden.");
                     }
                 }
             }
             $html = array();
             foreach ($fields as $field) {
                 if ($field->canWrite()) {
                     $html[] = array('field' => Sanitize::saveHTML($field->getFieldName()), 'name' => Sanitize::saveHTML($field->getName()), 'description' => Sanitize::saveHTML($field->getDescription()), 'code' => $field->getInputCode(), 'label' => !$field->noLabel());
                 }
             }
             $tpl = Response::getObject()->appendTemplate($tpl ? $tpl : '/Cms/fields/data_categories_write');
             $tpl->assign('data', $data, false);
             $tpl->assign('fields', $html, false);
             $tpl->assign('id', $id);
             $tpl->assign('baseUri', $this->baseUri);
             $tpl->output();
         }
     }
 }