You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
196 lines
5.0 KiB
PHP
196 lines
5.0 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
class Note {
|
|
|
|
private $noteid;
|
|
private $ownerid;
|
|
private $content = "";
|
|
private $color = "FFFFFF";
|
|
|
|
/**
|
|
* Create a new Note object.
|
|
* @param string $content Note content in Markdown
|
|
* @param string $color Hex color "RRGGBB"
|
|
* @param int $ownerid The owner's user ID
|
|
*/
|
|
public function __construct(string $content, string $color = "FFFFFF", int $ownerid = null, int $noteid = null) {
|
|
$this->content = $content;
|
|
$this->color = $color;
|
|
$this->ownerid = $ownerid;
|
|
$this->noteid = $noteid;
|
|
}
|
|
|
|
/**
|
|
* Load a note from the database and return it.
|
|
* @global type $database
|
|
* @param int $noteid
|
|
* @return \Note
|
|
* @throws NoSuchNoteException When the note ID isn't found.
|
|
*/
|
|
public static function loadNote(int $noteid): Note {
|
|
global $database;
|
|
|
|
if (!$database->has('notes', ['noteid' => $noteid])) {
|
|
throw new NoSuchNoteException();
|
|
}
|
|
|
|
$notedata = $database->get('notes', ['noteid', 'ownerid', 'color', 'content'], ['noteid' => $noteid]);
|
|
|
|
return new Note($notedata['content'], $notedata['color'], $notedata['ownerid'], $notedata['noteid']);
|
|
}
|
|
|
|
/**
|
|
* Save the note to the database.
|
|
* @global type $database
|
|
* @param bool $saveas If true, save the note under a new ID. Forced to
|
|
* true if the current note ID is missing or invalid.
|
|
* @return int The database ID of the saved note
|
|
* @throws Exception If there is no note owner set.
|
|
*/
|
|
public function saveNote(bool $saveas = false): int {
|
|
global $database;
|
|
|
|
$data = [
|
|
'ownerid' => $this->ownerid,
|
|
'color' => $this->color,
|
|
'content' => $this->content
|
|
];
|
|
|
|
// We can't UPDATE the database, so use save as for INSERT
|
|
if (empty($this->noteid) || !$database->has('notes', ['noteid' => $this->noteid])) {
|
|
$saveas = true;
|
|
}
|
|
|
|
if (empty($this->ownerid)) {
|
|
throw new Exception("No owner set.");
|
|
}
|
|
|
|
if ($saveas) {
|
|
$database->insert('notes', $data);
|
|
return $database->id();
|
|
} else {
|
|
$database->update('notes', $data, ['noteid' => $this->noteid]);
|
|
return $this->noteid;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get the Markdown content of the note.
|
|
* @return string
|
|
*/
|
|
public function getText(): string {
|
|
return $this->content;
|
|
}
|
|
|
|
/**
|
|
* Get the HTML render of the note.
|
|
* @param bool $fragment Get just the HTML content, instead of a whole HTML5 file
|
|
* @return string
|
|
*/
|
|
public function getHTML(bool $fragment = true): string {
|
|
$parsedown = new Parsedown;
|
|
$parsedown->setSafeMode(true);
|
|
return $parsedown->text($this->content);
|
|
}
|
|
|
|
/**
|
|
* Get the note ID.
|
|
* @return int
|
|
*/
|
|
public function getID(): int {
|
|
return $this->noteid;
|
|
}
|
|
|
|
/**
|
|
* Get the note color as RRGGBB hex.
|
|
* @return string
|
|
*/
|
|
public function getColor(): string {
|
|
return $this->color;
|
|
}
|
|
|
|
/**
|
|
* Get the owner UID
|
|
* @return int
|
|
*/
|
|
public function getOwnerID(): int {
|
|
return $this->ownerid;
|
|
}
|
|
|
|
/**
|
|
* Get the owner as a User object
|
|
* @return \User
|
|
*/
|
|
public function getOwner(): User {
|
|
return new User($this->ownerid);
|
|
}
|
|
|
|
/**
|
|
* Set the note content
|
|
* @param string $markdown
|
|
*/
|
|
public function setText(string $markdown) {
|
|
$this->content = $markdown;
|
|
}
|
|
|
|
/**
|
|
* Set the note color to a hex string
|
|
* @param string $color "RRGGBB"
|
|
*/
|
|
public function setColor(string $color) {
|
|
$this->color = $color;
|
|
}
|
|
|
|
/**
|
|
* Set the owner by UID
|
|
* @param int $uid
|
|
*/
|
|
public function setOwnerID(int $uid) {
|
|
$this->ownerid = $uid;
|
|
}
|
|
|
|
/**
|
|
* Set the owner
|
|
* @param User $user
|
|
*/
|
|
public function setOwner(User $owner) {
|
|
$this->ownerid = $owner->getUID();
|
|
}
|
|
|
|
/**
|
|
* Get this note as an array.
|
|
* @return string
|
|
*/
|
|
public function toArray(): array {
|
|
$owner = new User($this->ownerid);
|
|
$arr = [
|
|
'noteid' => $this->noteid,
|
|
'color' => $this->color,
|
|
'content' => $this->content,
|
|
'owner' => [
|
|
'uid' => $owner->getUID(),
|
|
'username' => $owner->getUsername(),
|
|
'name' => $owner->getName()
|
|
]
|
|
];
|
|
|
|
return $arr;
|
|
}
|
|
|
|
/**
|
|
* Read an array with the structure from toArray().
|
|
* @param array $arr
|
|
* @return \Note A Note constructed from the array data.
|
|
*/
|
|
public static function fromArray(array $arr): Note {
|
|
return new Note($arr['content'], $arr['color'], $arr['owner']['uid'], $arr['noteid']);
|
|
}
|
|
|
|
}
|