setField( array( "attr" => "name", "type" => "text", "label" => __("Title", "link"), "optional" => true ) ); $this->setField( array( "attr" => "source", "type" => "text", "label" => __("URL", "link") ) ); $this->setField( array( "attr" => "description", "type" => "text_block", "label" => __("Description", "link"), "optional" => true, "preview" => true ) ); $this->setFilter( "name", array("markup_post_title", "markup_title") ); $this->setFilter( "description", array("markup_post_text", "markup_text") ); $this->respondTo("feed_item", "link_related"); } public function submit(): Post { if (empty($_POST['source'])) error( __("Error"), __("URL can't be empty.", "link"), code:422 ); if (!is_url($_POST['source'])) error( __("Error"), __("Invalid URL.", "link") ); fallback($_POST['name'], ""); fallback($_POST['description'], ""); fallback($_POST['slug'], $_POST['name']); fallback($_POST['status'], "public"); fallback($_POST['created_at'], datetime()); fallback($_POST['option'], array()); $_POST['source'] = add_scheme($_POST['source']); return Post::add( values:array( "name" => $_POST['name'], "source" => $_POST['source'], "description" => $_POST['description'] ), clean:sanitize($_POST['slug']), feather:"link", pinned:!empty($_POST['pinned']), status:$_POST['status'], created_at:datetime($_POST['created_at']), pingbacks:true, options:$_POST['option'] ); } public function update($post): Post|false { if (empty($_POST['source'])) error( __("Error"), __("URL can't be empty.", "link"), code:422 ); if (!is_url($_POST['source'])) error( __("Error"), __("Invalid URL.", "link") ); fallback($_POST['name'], ""); fallback($_POST['description'], ""); fallback($_POST['slug'], $post->clean); fallback($_POST['status'], $post->status); fallback($_POST['created_at'], $post->created_at); fallback($_POST['option'], array()); $_POST['source'] = add_scheme($_POST['source']); return $post->update( values:array( "name" => $_POST['name'], "source" => $_POST['source'], "description" => $_POST['description'] ), pinned:!empty($_POST['pinned']), status:$_POST['status'], clean:sanitize($_POST['slug']), created_at:datetime($_POST['created_at']), options:$_POST['option'] ); } public function title($post): string { return oneof( $post->name, $post->title_from_excerpt(), $post->source ); } public function excerpt($post): string { return $post->description; } public function feed_content($post): string { $content = ''. oneof($post->name, $post->source).''; if (!empty($post->description)) $content.= '
'. $post->description. '
'; return '
'.$content.'
'; } public function link_related($post, $feed): void { if ($post->feather != "link") return; $feed->related($post->source); } }