| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- package Trog::Data::DUMMY;
- use strict;
- use warnings;
- no warnings 'experimental';
- use feature qw{signatures};
- =head1 QUERY FORMAT
- The $query_language and $query_help variables are presented to the user as to how to use the search box in the tCMS header.
- =cut
- our $query_language = 'Perl Regex in Quotemeta';
- our $query_help = 'https://perldoc.perl.org/functions/quotemeta.html';
- =head1 POST STRUCTURE
- Posts generally need to have the following:
- data: Brief description of content, or the content itself.
- content_type: What this content actually is. Used to filter into the appropriate pages.
- href: Primary link. This is the subject of a news post, or a link to the item itself. Can be local or remote.
- local_href: Backup link. Automatically created link to a static cache of the content.
- title: Title of the content. Used as link name for the 'href' attribute.
- user: User was banned for this post
- id: Internal identifier in datastore for the post.
- tags: array ref of appropriate tags.
- created: timestamp of creation of this version of the post
- version: revision # of this post.
- =cut
- my $example_posts = [
- {
- content_type => "text/html",
- data => "Here, caveman",
- href => '/',
- local_href => "/assets/today.html",
- title => 'Example Post',
- user => 'Nobody',
- id => 665,
- tags => ['news', 'public'],
- created => time(),
- version => 0,
- },
- {
- content_type => "text/html",
- data => "Is amazing",
- href => '/',
- local_href => "/assets/blog/Muh Blog.html",
- title => 'Muh Blog',
- user => 'Nobody',
- id => 666,
- tags => ['blog', 'public'],
- created => time(),
- version => 0,
- },
- {
- content_type => "text/html",
- data => "Vote for Nobody, nobody really cares!",
- href => '/',
- local_href => "/assets/about/Nobody.html",
- title => 'Nobody',
- user => 'Nobody',
- id => 669,
- tags => ['about', 'profile', 'public'],
- created => time(),
- version => 0,
- },
- {
- content_type => "image/gif",
- data => "Default avatar for new users",
- href => "/img/avatar/humm.gif",
- local_href => "/img/avatar/humm.gif",
- title => "humm.gif",
- user => 'Nobody',
- id => 420,
- tags => ['image', 'files', 'profile-image', 'public'],
- created => time(),
- version => 0,
- preview => '/img/avatar/humm.gif',
- },
- {
- content_type => "image/jpeg",
- data => "Test Pattern",
- href => "/img/sys/testpattern.jpg",
- local_href => "/img/sys/testpattern.jpg",
- title => "testpattern.jpg",
- user => 'Nobody',
- id => 90210,
- tags => ['image', 'files', 'public'],
- created => time(),
- version => 0,
- preview => '/img/sys/testpattern.jpg',
- },
- {
- content_type => "audio/mpeg",
- data => "Test recording for tCMS",
- href => "/assets/audio/test.mp3",
- local_href => "/assets/audio/test.mp3",
- title => "test.mp3",
- user => "Nobody",
- id => 111,
- tags => ["audio", "files", 'public'],
- created => time(),
- version => 0,
- preview => '/img/sys/testpattern.jpg',
- },
- {
- content_type => "video/ogg",
- data => "Test video for tCMS",
- href => "/assets/video/test.ogv",
- local_href => "/assets/video/test.ogv",
- title => "test.ogv",
- user => "Nobody",
- id => "222",
- tags => ["video", "files", 'public'],
- created => time(),
- version => 0,
- preview => '/img/sys/testpattern.jpg',
- },
- {
- content_type => 'text/plain',
- data => "Admin ACL",
- href => "/config",
- local_href => '/config',
- title => 'admin',
- user => 'Nobody',
- id => "900",
- tags => ['acl'],
- created => time(),
- version => 0,
- preview => '/img/sys/testpattern.jpg',
- }
- ];
- =head1 CONSTRUCTOR
- =head2 new(Config::Simple $config)
- Try not to do expensive things here.
- =cut
- sub new ($class, $config) {
- $config = $config->vars();
- $config->{lang} = $query_language;
- $config->{help} = $query_help;
- return bless($config,__PACKAGE__);
- }
- =head1 METHODS
- =cut
- # These have to be sorted as requested by the client
- sub get ($self, %request) {
- my @filtered = @$example_posts;
- # If an ID is passed, just get that
- @filtered = grep { $_->{id} eq $request{id} } @filtered if $request{id};
- # First, paginate
- my $offset = int($request{limit});
- $offset = @filtered < $offset ? @filtered : $offset;
- @filtered = splice(@filtered, ( int($request{page}) -1) * $offset, $offset) if $request{page} && $request{limit};
- # Next, handle the query
- @filtered = grep { my $tags = $_->{tags}; grep { my $t = $_; grep {$t eq $_ } @{$request{tags}} } @$tags } @filtered if @{$request{tags}};
- @filtered = grep { $_->{data} =~ m/\Q$request{like}\E/i } @filtered if $request{like};
- # Next, go ahead and build the "post type"
- @filtered = _add_post_type(@filtered);
- # Next, add the type of post this is
- @filtered = _add_media_type(@filtered);
- return \@filtered;
- }
- sub total_posts {
- return scalar(@$example_posts);
- }
- sub _add_post_type (@posts) {
- return map {
- my $post = $_;
- my $type = 'file';
- $type = 'blog' if grep { $_ eq 'blog' } @{$post->{tags}};
- $type = 'microblog' if grep { $_ eq 'news' } @{$post->{tags}};
- $type = 'profile' if grep { $_ eq 'profile' } @{$post->{tags}};
- $post->{type} = $type;
- $post
- } @posts;
- }
- sub _add_media_type (@posts) {
- return map {
- my $post = $_;
- $post->{is_video} = 1 if $post->{content_type} =~ m/^video\//;
- $post->{is_audio} = 1 if $post->{content_type} =~ m/^audio\//;
- $post->{is_image} = 1 if $post->{content_type} =~ m/^image\//;
- $post
- } @posts;
- }
- sub add ($self, @posts) {
- return 1;
- }
- sub update($self, @posts) {
- return 1;
- }
- sub delete($self, @ids) {
- return 1;
- }
- 1;
|