public function print_field($field, $data, $object) { $value = 0; if (isset($data[strval($field['name'])])) { $value = $data[strval($field['name'])]; } else { if (isset($field['default_self'])) { $user = FW4_User::get_user(); $value = $user['id']; } } $user = FW4_User::get_user(); if (isset($field['limit']) && $user['id'] != 0) { $dolimit = true; if (isset($field['limit_condition'])) { $invert = false; if (substr($field['limit_condition'], 0, 1) == '!') { $invert = true; $field['limit_condition'] = substr($field['limit_condition'], 1); } $limit_fields = explode('.', $field['limit_condition']); $limit_field = $user; foreach ($limit_fields as $current_field) { if (isset($limit_field[$current_field])) { $limit_field = $limit_field[$current_field]; } else { if (isset($limit_field[$current_field])) { $limit_field = false; break; } else { $limit_field = true; break; } } } $dolimit = $invert ? !$limit_field : $limit_field; } if ($dolimit) { $limit_fields = explode('.', $field['limit']); $limit_field = $user; foreach ($limit_fields as $current_field) { if (isset($limit_field[$current_field])) { $limit_field = $limit_field[$current_field]; } else { $limit_field = false; break; } } $limitvalue = $limit_field; $data[strval($field['name'])] = $limitvalue; } } if ($dolimit) { return false; } if (isset($field['readonly']) && !$data['id']) { return false; } ?> <div class="input"><label for="<?php echo $field['name']; ?> "<?php echo isset($field['invalid']) && $field['invalid'] ? ' class="invalid"' : ''; ?> ><?php echo isset($field['label']) ? $field['label'] : ucwords(preg_replace("/[^\\w-]+/i", " ", $field['name'])); ?> </label> <?php if (isset($field['readonly']) || isset($object['editing_disabled'])) { ?> <?php $user = FW4_User::get_user_by_id($value); ?> <div class="value"> <?php if ($user) { ?> <?php echo isset($user['firstname']) && $user['lastname'] ? $user['firstname'] . ' ' . $user['lastname'] : $user['name']; ?> <?php } else { ?> Niemand <?php } ?> </div> <?php } else { ?> <select name="<?php echo $field['name']; ?> "> <?php if (!isset($field['required'])) { ?> <option value=""></option> <?php } ?> <?php foreach (FW4_User::get_users('user', 'firstname,lastname') as $user) { ?> <?php if (!$user['id']) { continue; } ?> <?php if (isset($field['where'])) { $condition = explode('=', $field['where']); $condition_fields = explode('.', trim($condition[0])); $condition_field = $user; foreach ($condition_fields as $current_field) { if (isset($condition_field[$current_field]) && $condition_field[$current_field]) { $condition_field = $condition_field[$current_field]; } else { $condition_field = 0; break; } } if ($condition_field != trim($condition[1])) { continue; } } ?> <option value="<?php echo $user['id']; ?> "<?php echo $user['id'] == $value ? ' selected="selected"' : ''; ?> ><?php echo $user['firstname']; ?> <?php echo $user['lastname']; ?> </option> <?php } ?> </select> <?php } ?> </div> <?php }
private static function edit_object($object, $data = false, $parent = array()) { global $config; $types = FW4_Type_Manager::get_instance(); $user = FW4_User::get_user(); $error = $success = false; if ($data === false) { $data = new stdClass(); } if (count($_POST) || count($_FILES)) { $newdata = self::prepare_posted_data($object, $data); $has_changed = $is_new = false; foreach ($newdata as $key => $value) { if (!isset($data->{$key}) || $newdata[$key] != $data->{$key}) { $has_changed = true; } } if ($has_changed) { $newdata['edited_by_user'] = $user->id; $newdata['edited_at_date'] = time(); $rightless_data = self::process_rightless_values($object); if (count($rightless_data)) { $newdata = array_merge($newdata, $rightless_data); } } if (isset($data->id)) { where('id = %d', intval($data->id))->update(strval($object['stack']), $newdata); $_SESSION['successmessage'] = 'De wijzigingen werden succesvol opgeslagen.'; $newdata['id'] = $data->id; } else { $is_new = true; if (isset($object['sortable'])) { $maxsorting = pick('MAX(_sort_order) as maxorder')->get_row($object['stack']); $newdata['_sort_order'] = $maxsorting->maxorder + 1; } $newdata['created_by_user_id'] = $user->id; $newdata['created_at_date'] = time(); $newdata = array_merge($newdata, self::$parent); if (isset($object['label'])) { $_SESSION['successmessage'] = 'Uw ' . strtolower($object['label']) . ' werd succesvol toegevoegd.'; } else { $_SESSION['successmessage'] = 'Het item werd succesvol toegevoegd.'; } $newdata['id'] = insert($object['stack'], $newdata, false); } if (isset($object['onsave'])) { $classname = ucfirst($object['contentname']); $function_name = strval($object['onsave']); if (class_exists($classname) && method_exists($classname, $function_name)) { View_Loader::get_instance()->set_path(CONTENTPATH . str_replace(' ', '', strtolower(strval($object['contentname'])))); try { $result = call_user_func_array($classname . '::' . $function_name, array($object, $data, array_merge($newdata, self::$parent))); if (is_string($result)) { $success = $result; } } catch (Exception $e) { $error = $e->getMessage(); } View_Loader::get_instance()->set_path(BASEPATH . 'admin/'); } } $data = where('id = %d', $newdata['id'])->get_row(strval($object['stack'])); self::post_process_fields($object, $object, $data); if (!$is_new) { if (isset($object['archived']) && $has_changed) { $versiondata = where('id = %d', $data->id)->translate(false)->get_row($object['stack']); $version_id = insert($object['stack'] . '>_versions', $versiondata->to_array()); } $search_index = array(); $search_index_languages = array(); self::post_process_searchable_fields($object, $object, $data, $search_index_languages, $search_index); if (!count($search_index_languages)) { $search_index_languages[language()] = array(); } if (count($search_index)) { foreach ($search_index_languages as $language => $searchdata) { foreach ($search_index as $key => $index) { $search_index_languages[$language][$key] = $index; } } } foreach ($search_index_languages as $language => &$searchdata) { if (count($searchdata)) { $searchdata['object_id'] = $data->id; $searchdata['object_name'] = strval($object['stack']); $searchdata['_language'] = $language; if (isset($object['archived'])) { $searchdata['_version_id'] = $version_id; insert('_search_index', $searchdata); } else { $existing = where('object_id = %d', $searchdata['object_id'])->where('_language = %s', $searchdata['_language'])->where('object_name = %s', $searchdata['object_name'])->get_row('_search_index'); if ($existing) { where('id = %d', $existing->id)->update('_search_index', $searchdata); } else { insert('_search_index', $searchdata); } } } } } if ($_SESSION['error']) { $error = $_SESSION['error']; unset($_SESSION['error']); } if (!$error && !$result) { if ($object->getName() == 'page') { redirect($_SERVER['REQUEST_URI']); } else { redirect(preg_replace('/[^\\/]+\\/[^\\/]+(\\/|\\/duplicate|\\/duplicate\\/)?$/', '', $_SERVER['REQUEST_URI'])); } } } $label = $object['label']; if (!$label) { $label = ucwords($object['name']); } $translatable = false; foreach ($object->children() as $type => $field) { if (in_array($type, array('string', 'text')) && isset($field['translatable']) && $field['translatable']) { $translatable = true; } } $actionlabel = l(array('nl' => $label . (isset($data->id) ? ' bewerken' : ' toevoegen'), 'en' => (isset($data->id) ? 'Edit ' : 'Add ') . strtolower($label), 'fr' => (isset($data->id) ? 'Modifier ' : 'Ajouter ') . strtolower($label))); if (isset($object['editing_disabled'])) { $actionlabel = l(array('nl' => $label . ' bekijken', 'en' => 'View ' . strtolower($label), 'fr' => 'Voir ' . strtolower($label))); } // Define title for breadcrumb $navstacktitle = strval($label); // Determine if we can show something more specific as a title // Does the object have a title format defined? if (isset($object['format']) && isset($data->id)) { // Replace placeholders with data $displayvalue = strval($object['format']); preg_match_all('/\\[([a-z0-9\\_]+)\\]/is', $displayvalue, $matches, PREG_SET_ORDER); foreach ($matches as $match) { $fieldname = strval($match[1]); $displayvalue = str_ireplace($match[0], $data->{$fieldname}, $displayvalue); } $actionlabel = $displayvalue; $navstacktitle = $displayvalue; } else { $titlefields = $object->xpath('string'); if ($titlefield = reset($titlefields)) { $titlefield = strval($titlefield['name']); if (isset($data->{$titlefield}) && $data->{$titlefield}) { $actionlabel = $data->{$titlefield}; $navstacktitle = $data->{$titlefield}; } } } if (self::$duplicating) { $navstacktitle = l(array('nl' => 'Dupliceren', 'en' => 'Duplicate')); } echo view('head', array('pages' => self::get_pages(), 'title' => $actionlabel, 'navstacktitle' => $navstacktitle, 'user' => $user, 'site' => current_site())); $showtitle = true; if (count($object->children()) > 1) { $first = $object->children(); $first = $first[0]; if ($first->getName() == 'header') { $showtitle = false; } } if ($showtitle) { echo '<h2>' . $actionlabel . '</h2>'; } if (isset($object['archived']) && isset($data->id)) { echo '<a class="button versions" href="#"><img src="' . url(ADMINRESOURCES . 'images/versions.png', false) . '" width="16" height="14"/>' . l(array('nl' => 'Vorige versies')) . '</a>'; $versions = where('id = %d', $data->id)->order_by('version_id desc')->limit(11)->get($object['stack'] . '>_versions'); $versions->shift(); echo '<div class="versionsmenu">'; if ($versions->count()) { $users = FW4_User::get_users(); foreach ($versions as $version) { $versionuser = isset($users[$version->edited_by_user]) ? $users[$version->edited_by_user] : ''; if (is_object($versionuser) && isset($versionuser->name)) { $versionuser = $versionuser->name; } else { if (is_object($versionuser) && isset($versionuser->lastname)) { $versionuser = $versionuser->firstname . ' ' . $versionuser->lastname; } else { if (is_object($versionuser)) { $versionuser = ''; } } } echo '<div class="version"><a href="_version/' . $version->version_id . '">' . strftime('%a %e %B %k:%M', $version->edited_at_date) . ($versionuser ? ' - ' . $versionuser : '') . '</a></div>'; } } else { echo '<div class="note">' . l(array('nl' => 'Er zijn geen vorige versies gekend.')) . '</div>'; } echo '</div>'; } echo '<form enctype="multipart/form-data" method="post" autocomplete="off">'; if ($error) { echo '<div class="usernote error">' . $error . '</div>'; } if ($success) { echo '<div class="usernote success">' . $success . '</div>'; } $iseditable = false; $scripts = ''; $included_scripts = array(); foreach ($object->children() as $type => $field) { $user = FW4_User::get_user(); if (isset($field['hidden'])) { continue; } if (isset($field['superadmin_only']) && $user['id'] != 0) { continue; } if (self::print_field($field, $data, $object)) { $iseditable = true; } else { if ($type_obj = $types->get_type($type)) { $type_obj->print_field($field, $data, $object); if ($type != 'header') { $iseditable = true; } if (!in_array($type, $included_scripts)) { $included_scripts[] = $type; $scripts .= $type_obj->get_scripts(); } } } } echo '<div class="controls' . (self::$has_headers && ($iseditable || isset($object['editing_disabled'])) ? ' with-headers' : '') . '"><input type="hidden" name="_starttime" value="' . time() . '"/>'; if (isset($object['editing_disabled'])) { if ($object->getName() == 'object') { echo '<a class="button save" href="' . preg_replace('/[^\\/]+\\/[^\\/]+\\/?$/', '', $_SERVER['REQUEST_URI']) . '">' . l(array('nl' => 'Terug', 'fr' => 'Retourner', 'en' => 'Back')) . '</a>'; } } else { if ($iseditable && isset($data->id) && isset($object['duplicatable'])) { echo '<a class="button right" href="duplicate/">' . l(array('nl' => 'Dupliceer', 'fr' => 'Duplicer', 'en' => 'Duplicate')) . '</a>'; } if ($iseditable) { echo '<a class="button save" href="#" onclick="$(\'form\').submit();return false;">' . l(array('nl' => 'Opslaan', 'fr' => 'Sauvegarder', 'en' => 'Save')) . '</a>'; } if ($object->getName() == 'object') { echo '<a class="button" href="' . (preg_match('/\\/duplicate\\/?$/is', $_SERVER['REQUEST_URI']) ? preg_replace('/\\/duplicate\\/?$/', '', $_SERVER['REQUEST_URI']) : preg_replace('/[^\\/]+\\/[^\\/]+\\/?$/', '', $_SERVER['REQUEST_URI'])) . '">' . l(array('nl' => 'Annuleren', 'fr' => 'Annuler', 'en' => 'Cancel')) . '</a>'; } } echo '</div></form>'; echo view("foot", array('config' => $config, 'scripts' => $scripts)); }