Ejemplo n.º 1
0
    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 
    }
Ejemplo n.º 2
0
 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));
 }