Skip to content

stoneapptech/cavern

Repository files navigation

Cavern

Explore those deep inside the cave.

A simple blog system.

Feature

Able to make comments and like posts Distributes users onto different classes, each had its own permissions

Requirements

  • php-mbstring

Install

  1. Set database information. connection/SQL.php
  2. Set blog config. config.php
  3. Import SQL file. cavern.sql
  4. Done!

Libraries

  • editormd

Cavern API Quick Start

To get data from Cavern, a recommended way is to use the Cavern API.

Following are 2 commonly used api endpoints to create a viewer for the Cavern website.

To see full documentation, please visit reference.

Posts

Posts list

In order to get posts, the following endpoint is used

/ajax/posts.php

The reponse of the api call contains

  • fetch series(fetch)
  • number of posts(page_limit)
  • current page(page)
  • number of all posts(all_posts_count)
  • posts list(posts)

and each post inside posts list contains

  • author's username(author)
  • author's displayed name(or nickname)(name)
  • the PID of the post(pid)
  • the title of the post(title)
  • the time when the post is sent(time)
  • the number of likes the post received(likes_count)
  • the number of comments about the post(comments_count)
  • whether the current user has liked it(note: if it isn't logged, the result will be false)(islike)
{
    "fetch":1570115846126,
    "page_limit":1,
    "page":3,
    "all_posts_count":200,
    "posts":
    [
        {
            "author":"ExampleAuthor", 
            "name":"AuthorName",
            "pid":300,
            "title":"ExampleTitle",
            "time":"2019-08-29 13:00:00",
            "likes_count":"1",
            "comments_count":"3",
            "islike":false
            
        }
    ]
}

To change the number of posts you want to receive or current page, you can specify the limit and page arguments.

/ajax/posts.php?limit={number of posts}&&page={page number}

Post Content of a Specific PID

To get an post's content, you must access it with its PID.

/ajax/posts.php?pid={PID}

The response contains

  • fetch series(fetch)
  • post content(post)

The body of post contains

  • author's username(author)
  • author's diaplyed name(or nickname)(name)
  • the title of the post(title)
  • the content of the post(content)
  • the time when the post is sent(time)
  • the number of likes the post received(likes_count)
  • the number of comments about the post(comments_count)
  • whether the current user has liked it(note: if it isn't logged in, the result will be false)(islike)
{
    "fetch":1570117194098,
    "post":
    {
        "author":"ExampleAuthor",
        "name":"ExampleAuthorName",
        "title":"ExampleTitle",
        "content":"ExampleContent",
        "time":"2019-06-01 12:00:00",
        "likes_count":"0",
        "comments_count":"10",
        "islike":false
    }
}

User Profile

User's level

In Cavern API, we use different level number to represent the ability to access resources and functionality. The following table is the level numbers and its permissions.

Level Displayed Name View post Comment Like Receive notification Create new posts Edit posts Delete posts
0 會員
1 作者 him/herself him/herself
8 管理員 all all
9 站長 all all

Get User's Profile with a Specific Username

Use the following endpoint to get a user's profile with a specific username.

/ajax/user.php?username={username}

The response contains

  • the username(username)
  • the displayed name(name)
  • user's level number(level)
  • displayed name of the user's level number(note: in unicode)(role)
  • the hash value of the user's email(for surcurity reason, Cavern API won't provide developers with user's email)(hash)
  • whether the user is muted(muted)
  • the number of posts the user created(posts_count)
  • whether you are in a logged in state(login)
  • fetch series(fetch)
{
    "username":"ExampleUsername",
    "name":"ExampleName",
    "level":8,
    "role":"\u7ba1\u7406\u54e1",
    "hash":"32c018e02c34cf3fddfbebba6b44c5fc",
    "muted":false,
    "posts_count":25,
    "login":false,
    "fetch":1570285748411
}

Again, to see full documentation, please visit our reference