$r['content_type'] = $content_type; $r['content_ignored'] = false; $content_infile = $r; $r = node_get_contents($lang, $node_id); dump($r); $content_text['content_ignored'] = false; $content_text['content_text_text'] = '<p>Some \'text\' which is "very" interesting! ;)</p>'; $content_text['content_text_eval'] = false; $lang = 'en'; $r = node_set_contents($lang, $node_id, array($content_download, $content_file, $content_text, $content_infile)); dump($r); $content_text['content_ignored'] = true; $content_text['content_text_text'] = '<p>Un peu de \'texte\' qui est "très" intéressant ! ;)</p>'; $content_text['content_text_eval'] = true; $lang = 'fr'; $r = node_set_contents($lang, $node_id, array($content_download, $content_file, $content_text, $content_infile)); dump($r); $r = node_get_contents($lang, $node_id); dump($r); $content_id = $content_file['content_id']; $content_type = $content_file['content_type']; $r = node_delete_content($node_id, $content_id, $content_type); dump($r); $r = node_get_contents($lang, $node_id); dump($r); $text = 'Rien à dire de spécial LOL !'; $locale = 'fr'; $r = node_add_comment($node_id, 1, '192.168.1.2', $text, $locale); dump($r); $comment_id = $r; $r = node_get_comment($node_id, $comment_id, $locale);
function nodecontenteditor($lang, $clang, $node_id, $content_types) { global $contents_model; $action = 'init'; if (isset($_POST['content_modify'])) { $action = 'modify'; } else { if (isset($_POST['content_create'])) { $action = 'create'; } else { if (isset($_POST['content_delete'])) { $action = 'delete'; } } } $new_content_type = $new_content_number = false; $old_content_number = false; $node_contents = false; $id = false; $p = false; switch ($action) { case 'init': case 'reset': $r = node_get_contents($clang, $node_id); if ($r) { $pos = 1; $node_contents = array(); foreach ($r as $c) { $c['content_pos'] = $c['content_number']; $node_contents[$pos] = $c; $pos++; } } break; case 'modify': case 'create': case 'delete': if (isset($_POST['content_new_type'])) { $new_content_type = readarg($_POST['content_new_type']); } if (isset($_POST['content_new_number'])) { $new_content_number = readarg($_POST['content_new_number']); } if (isset($_POST['content_old_number'])) { $old_content_number = readarg($_POST['content_old_number']); } if (isset($_POST['content_id'])) { $id = $_POST['content_id']; // DON'T readarg! } if (isset($_POST['content_p'])) { $p = $_POST['content_p']; // DON'T readarg! } if (isset($_POST['content_ignored'])) { $ignored = $_POST['content_ignored']; // DON'T readarg! } break; default: break; } $bad_contents = false; switch ($action) { case 'create': case 'delete': case 'modify': if (!$id or !$p and !(is_array($id) and is_array($p) and count($id) == count($p))) { $bad_contents = true; } else { foreach ($id as $i => $v) { if (!is_numeric($v) or !(isset($p[$i]) and is_numeric($p[$i]))) { $bad_contents = true; break; } } } if ($bad_contents) { break; } $node_contents = array(); foreach ($contents_model as $type => $fields) { foreach ($fields as $fname => $props) { $fieldname = "content_{$type}_{$fname}"; if (isset($_POST[$fieldname]) and is_array($_POST[$fieldname])) { foreach ($_POST[$fieldname] as $i => $value) { $v = readarg($value, true, false); // trim but DON'T strip_tags! if (!isset($node_contents[$i])) { $content_ignored = isset($ignored[$i]) && $ignored[$i] == 'on'; $node_contents[$i] = array('content_id' => $id[$i], 'content_pos' => $p[$i], 'content_ignored' => $content_ignored, 'content_type' => $type, $fieldname => $v); } else { $node_contents[$i][$fieldname] = $v; } } } } } if (!$node_contents) { $bad_contents = true; break; } ksort($node_contents); break; default: break; } $missing_new_content_type = false; $bad_new_content_type = false; $bad_new_content_number = false; $missing_old_content_number = false; $bad_old_content_number = false; switch ($action) { case 'create': if (empty($new_content_type)) { $missing_new_content_type = true; } else { if (!$content_types or !in_array($new_content_type, $content_types)) { $bad_new_content_type = true; } } if (empty($new_content_number)) { $new_content_number = false; } else { if (!is_numeric($new_content_number)) { $bad_new_content_number = true; } else { if ($new_content_number < 1) { $bad_new_content_number = true; } else { if ($new_content_number > count($node_contents)) { $new_content_number = false; } } } } break; case 'delete': if (empty($old_content_number)) { $missing_old_content_number = true; } else { if (!is_numeric($old_content_number)) { $bad_old_content_number = true; } else { if ($old_content_number < 1 or $old_content_number > count($node_contents)) { $bad_old_content_number = true; } } } break; default: break; } switch ($action) { case 'create': if ($missing_new_content_type or $bad_new_content_type or $bad_new_content_number) { break; } $nc = node_create_content($clang, $node_id, $new_content_type, $new_content_number); if (!$nc) { break; } $content_id = $nc['content_id']; $content_pos = $nc['content_number']; $content_type = $new_content_type; $content_ignored = false; $fields = compact('content_pos', 'content_id', 'content_type', 'content_ignored'); foreach ($contents_model[$content_type] as $fname => $props) { $fieldname = "content_{$content_type}_{$fname}"; $fields[$fieldname] = isset($props['default']) ? $props['default'] : false; } if ($node_contents) { foreach ($node_contents as &$c) { if ($c['content_pos'] >= $content_pos) { $c['content_pos']++; } } array_splice($node_contents, $content_pos - 1, 0, array($fields)); } else { $content_pos = 1; $node_contents = array($content_pos => $fields); } if ($new_content_number) { $new_content_number++; } $new_content_type = false; break; case 'delete': if ($missing_old_content_number or $bad_old_content_number) { break; } $c = $node_contents[$old_content_number]; $content_id = $c['content_id']; $content_type = $c['content_type']; $r = node_delete_content($node_id, $content_id, $content_type); if (!$r) { break; } unset($node_contents[$old_content_number]); $node_contents = array_values($node_contents); foreach ($node_contents as &$c) { if ($c['content_pos'] >= $old_content_number) { $c['content_pos']--; } } $old_content_number = false; break; case 'modify': if ($bad_contents) { break; } $neworder = range(1, count($p)); array_multisort($p, SORT_NUMERIC, $neworder); $number = 1; $nc = array(); foreach ($neworder as $i) { $c =& $node_contents[$i]; $c['content_pos'] = $number; $nc[$number++] = $c; } $node_contents = $nc; $r = node_set_contents($clang, $node_id, $node_contents); if (!$r) { break; } break; default: break; } $errors = compact('missing_new_content_type', 'bad_new_content_type', 'bad_new_content_number', 'missing_old_content_number', 'bad_old_content_number'); $output = view('editing/nodecontenteditor', $lang, compact('clang', 'content_types', 'new_content_type', 'new_content_number', 'old_content_number', 'node_contents', 'errors')); return $output; }