plugin fixes

This commit is contained in:
Joey Kimsey
2024-12-09 19:59:59 -05:00
parent 66383d8d96
commit b575fe82aa
19 changed files with 151 additions and 58 deletions

View File

@ -0,0 +1,71 @@
<?php
/**
* app/plugins/bookmarks/controllers/api/bookmark_folders.php
*
* This is the api bookmark folders controller.
*
* @version 3.0
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
*/
namespace TheTempusProject\Controllers\Api;
use TheTempusProject\Models\User;
use TheTempusProject\Classes\ApiController;
use TheTempusProject\Houdini\Classes\Views;
use TheTempusProject\Canary\Bin\Canary as Debug;
use TheTempusProject\Bedrock\Functions\Input;
use TheTempusProject\Models\Folders;
class BookmarkFolders extends ApiController {
protected static $folders;
public function __construct() {
parent::__construct();
self::$folders = new Folders;
}
public function create() {
header('Access-Control-Allow-Origin: *');
$user = self::$authToken->createdBy;
$payload = @file_get_contents('php://input');
$payload = json_decode( $payload, true );
$result = self::$folders->create(
$payload['name'],
$payload['folder'] ?? 0,
$payload['notes'] ?? '',
$payload['color'] ?? 'default',
$payload['privacy'] ?? 'private',
$user
);
if ( ! $result ) {
$responseType = 'error';
$response = 'There was an error creating your folder.';
} else {
$responseType = 'success';
$response = 'success';
}
Views::view( 'api.response', ['response' => json_encode( [ $responseType => $response ], true )]);
}
public function list( $id = '' ) {
header('Access-Control-Allow-Origin: *');
$user = self::$authToken->createdBy;
$folders = self::$folders->bySpecificUser( $user );
if ( ! $folders ) {
$responseType = 'error';
$response = 'There was an error creating your folder.';
} else {
$responseType = 'folders';
$response = $folders;
}
Views::view( 'api.response', ['response' => json_encode( [ $responseType => $response ], true )]);
}
}

View File

@ -33,25 +33,22 @@ class Bookmarks extends ApiController {
$payload = @file_get_contents('php://input');
$payload = json_decode( $payload, true );
Debug::error($payload['name']);
$result = self::$bookmarks->create(
$payload['name'],
$payload['url'],
0,
$payload['notes'],
'default',
'private',
'external',
$user
$payload['folder'] ?? 0,
$payload['notes'] ?? '',
$payload['color'] ?? 'default',
$payload['privacy'] ?? 'private',
);
if ( ! $result ) {
$responseType = 'error';
$response = 'There was an error creating your bookmark.';
$response = 'There was an error creating your folder.';
} else {
$responseType = 'success';
$response = 'success';
$responseType = 'data';
$response = $result;
}
Views::view( 'api.response', ['response' => json_encode( [ $responseType => $response ], true )]);
}

View File

@ -320,34 +320,34 @@ class Bookmarks extends DatabaseModel {
}
if ( empty( $instance->hiddenAt ) ) {
$instance->hideBtn = '
<a href="{ROOT_URL}bookmarks/hideBookmark/'.$instance->ID.'" class="btn btn-sm btn-warning" role="button">
<a href="{ROOT_URL}bookmarks/hideBookmark/'.$instance->ID.'" class="btn btn-sm btn-warning">
<i class="fa fa-fw fa-eye"></i>
</a>';
} else {
$instance->hideBtn = '
<a href="{ROOT_URL}bookmarks/showBookmark/'.$instance->ID.'" class="btn btn-sm btn-default" role="button">
<a href="{ROOT_URL}bookmarks/showBookmark/'.$instance->ID.'" class="btn btn-sm btn-default">
<i class="fa fa-fw fa-eye"></i>
</a>';
}
if ( empty( $instance->archivedAt ) ) {
$instance->archiveBtn = '
<a href="{ROOT_URL}bookmarks/archiveBookmark/'.$instance->ID.'" class="btn btn-sm btn-info" role="button">
<a href="{ROOT_URL}bookmarks/archiveBookmark/'.$instance->ID.'" class="btn btn-sm btn-info">
<i class="fa fa-fw fa-briefcase"></i>
</a>';
} else {
$instance->archiveBtn = '
<a href="{ROOT_URL}bookmarks/unarchiveBookmark/'.$instance->ID.'" class="btn btn-sm btn-default" role="button">
<a href="{ROOT_URL}bookmarks/unarchiveBookmark/'.$instance->ID.'" class="btn btn-sm btn-default">
<i class="fa fa-fw fa-briefcase"></i>
</a>';
}
if ( ! empty( $instance->refreshedAt ) && time() < ( $instance->refreshedAt + ( 60 * 10 ) ) ) {
$instance->refreshBtn = '
<a href="{ROOT_URL}bookmarks/refreshBookmark/'.$instance->ID.'" class="btn btn-sm btn-danger" role="button">
<a href="{ROOT_URL}bookmarks/refreshBookmark/'.$instance->ID.'" class="btn btn-sm btn-danger">
<i class="fa fa-fw fa-refresh"></i>
</a>';
} else {
$instance->refreshBtn = '
<a href="{ROOT_URL}bookmarks/refreshBookmark/'.$instance->ID.'" class="btn btn-sm btn-success" role="button">
<a href="{ROOT_URL}bookmarks/refreshBookmark/'.$instance->ID.'" class="btn btn-sm btn-success">
<i class="fa fa-fw fa-refresh"></i>
</a>';
}

View File

@ -38,7 +38,10 @@ class Folders extends DatabaseModel {
parent::__construct();
}
public function create( $title, $folderID = 0, $description = '', $color = 'default', $privacy = 'private' ) {
public function create( $title, $folderID = 0, $description = '', $color = 'default', $privacy = 'private', $user = null ) {
if ( empty( $user ) ) {
$user = App::$activeUser->ID;
}
if ( ! Check::dataTitle( $title ) ) {
Debug::info( 'Folders: illegal title.' );
return false;
@ -48,9 +51,10 @@ class Folders extends DatabaseModel {
'description' => $description,
'color' => $color,
'privacy' => $privacy,
'createdBy' => App::$activeUser->ID,
'createdBy' => $user,
'createdAt' => time(),
];
if ( !empty( $folderID ) ) {
$fields['folderID'] = $folderID;
}
@ -102,6 +106,20 @@ class Folders extends DatabaseModel {
return $this->filter( $folders->results() );
}
public function bySpecificUser( $userID, $limit = null ) {
$whereClause = ['createdBy', '=', $userID];
if ( empty( $limit ) ) {
$folders = self::$db->get( $this->tableName, $whereClause );
} else {
$folders = self::$db->get( $this->tableName, $whereClause, 'ID', 'DESC', [0, $limit] );
}
if ( !$folders->count() ) {
Debug::info( 'No Folders found.' );
return false;
}
return $this->filter( $folders->results() );
}
public function getName( $id ) {
$folder = self::findById( $id );
if (false == $folder) {

View File

@ -13,16 +13,16 @@
{LOOP}
<tr>
<td style="text-align: center;">
<a href="{url}" role="button">
<a href="{url}">
{title}
</a>
</td>
<td style="text-align: center;">
{privacy}
</td>
<td><a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="btn btn-sm btn-primary" role="button"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning" role="button"><i class="fa fa-fw fa-pencil-square"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-trash"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</tr>
{/LOOP}
{ALT}
@ -34,4 +34,4 @@
{/ALT}
</tbody>
</table>
<a href="{ROOT_URL}bookmarks/createBookmark" class="btn btn-sm btn-primary" role="button">Create</a>
<a href="{ROOT_URL}bookmarks/createBookmark" class="btn btn-sm btn-primary">Create</a>

View File

@ -76,8 +76,8 @@
{refreshBtn}
{hideBtn}
{archiveBtn}
<a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning" role="button"><i class="fa fa-fw fa-pencil-square"></i></a>
<a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-trash"></i></a>
<a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a>
<a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a>
</div>
</div>
</div>

View File

@ -1,5 +1,5 @@
<div class="card panel-{color}">
<div class="card-header" data-target="#Collapse{ID}" data-toggle="collapse" aria-expanded="true" aria-controls="#Collapse{ID}">
<div class="card-header" data-bs-target="#Collapse{ID}" data-bs-toggle="collapse" aria-expanded="true" aria-controls="#Collapse{ID}">
{title}
</div>
<div id="Collapse{ID}" class="panel-collapse collapse in" style="width:100%; position: relative;" role="tabpanel" aria-expanded="true">
@ -9,12 +9,12 @@
</ul>
</div>
<div class="card-footer">
<a href="{ROOT_URL}bookmarks/createBookmark/{ID}" class="btn btn-sm btn-success" role="button"><i class="fa fa-fw fa-plus"></i></a></td>
<a href="{ROOT_URL}bookmarks/createBookmark/{ID}" class="btn btn-sm btn-success"><i class="fa fa-fw fa-plus"></i></a></td>
<span class="float-right">
<a href="{ROOT_URL}bookmarks/bookmarks/{ID}" class="btn btn-sm btn-primary" role="button"><i class="fa fa-fw fa-list"></i></a>
<a href="{ROOT_URL}bookmarks/folders/{ID}" class="btn btn-sm btn-primary" role="button"><i class="fa fa-fw fa-info-circle"></i></a></td>
<a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-warning" role="button"><i class="fa fa-fw fa-pencil-square"></i></a></td>
<a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-trash"></i></a></td>
<a href="{ROOT_URL}bookmarks/bookmarks/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-list"></i></a>
<a href="{ROOT_URL}bookmarks/folders/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-info-circle"></i></a></td>
<a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
<a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</span>
</div>
</div>

View File

@ -1,13 +1,13 @@
{LOOP}
<li class="list-group-item list-group-item-{color}">
<a href="{ROOT_URL}bookmarks/bookmarks/{ID}" class="btn btn-sm" role="button">{iconHtml}</a>
<a href="{ROOT_URL}bookmarks/bookmarks/{ID}" class="btn btn-sm">{iconHtml}</a>
<a href="{url}" class="list-group"> {title}</a>
<span class="float-right">
{hideBtn}
{archiveBtn}
<a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning" role="button"><i class="fa fa-fw fa-pencil-square"></i></a>
<a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-trash"></i></a>
<a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a>
<a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a>
</span>
</li>
{/LOOP}

View File

@ -16,9 +16,9 @@
<td align="center">{title}</td>
<td align="center">{privacy}</td>
<td>{description}</td>
<td><a href="{ROOT_URL}bookmarks/folders/{ID}" class="btn btn-sm btn-primary" role="button"><i class="fa fa-fw fa-info-circle"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-warning" role="button"><i class="fa fa-fw fa-pencil-square"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-trash"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/folders/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-info-circle"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</tr>
{/LOOP}
{ALT}
@ -30,4 +30,4 @@
{/ALT}
</tbody>
</table>
<a href="{ROOT_URL}bookmarks/createFolder" class="btn btn-sm btn-primary" role="button">Create</a>
<a href="{ROOT_URL}bookmarks/createFolder" class="btn btn-sm btn-primary">Create</a>

View File

@ -38,9 +38,9 @@
</div>
</div>
<div class="card-footer">
<a href="{ROOT_URL}bookmarks/bookmarks/{ID}" class="btn btn-sm btn-primary" role="button"><i class="fa fa-fw fa-list"></i></a>
<a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-warning" role="button"><i class="fa fa-fw fa-pencil-square"></i></a>
<a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-trash"></i></a>
<a href="{ROOT_URL}bookmarks/bookmarks/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-list"></i></a>
<a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil-square"></i></a>
<a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a>
</div>
</div>
</div>

View File

@ -36,6 +36,9 @@ class MembershipProducts extends DatabaseModel {
public function __construct() {
parent::__construct();
if ( ! self::$loaded ) {
$api_key = Config::getValue( 'memberships/stripeSecret' );
if ( $api_key == 'sk_xxxxxxxxxxxxxxx' || empty($api_key) ) {
@ -45,6 +48,8 @@ class MembershipProducts extends DatabaseModel {
}
self::$loaded = true;
}
}
public function create( $name, $description, $monthly_price, $yearly_price ) {

View File

@ -49,6 +49,8 @@ class Memberships extends DatabaseModel {
}
self::$loaded = true;
}
}
public function filter( $postArray, $params = [] ) {

View File

@ -24,8 +24,8 @@
<td>{prettyPrice}</td>
<td>{DTC}{current_period_start}{/DTC}</td>
<td>{DTC}{current_period_end}{/DTC}</td>
<td><a href="{ROOT_URL}admin/records/view/{ID}" class="btn btn-sm btn-primary" role="button"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}admin/records/delete/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-trash"></i></a></td>
<td><a href="{ROOT_URL}admin/records/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}admin/records/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="MP_[]">
</td>

View File

@ -20,8 +20,8 @@
<td>{name}</td>
<td>{monthly_price}</td>
<td>{yearly_price}</td>
<td><a href="{ROOT_URL}admin/products/view/{ID}" class="btn btn-sm btn-primary" role="button"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}admin/products/delete/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-trash"></i></a></td>
<td><a href="{ROOT_URL}admin/products/view/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}admin/products/delete/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
<td>
<input type="checkbox" value="{ID}" name="MP_[]">
</td>
@ -36,6 +36,6 @@
{/ALT}
</tbody>
</table>
<a href="{ROOT_URL}admin/products/create" class="btn btn-sm btn-primary" role="button">Create</a>
<a href="{ROOT_URL}admin/products/create" class="btn btn-sm btn-primary">Create</a>
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger">Delete</button>
</form>

View File

@ -10,10 +10,10 @@
</p>
<div class="row">
<div class="col-md-6">
<a href="{ROOT_URL}member/cancelconfirm/{cancelid}" class="btn btn-lg btn-danger btn-block" role="button">Cancel Subscription</a>
<a href="{ROOT_URL}member/cancelconfirm/{cancelid}" class="btn btn-lg btn-danger btn-block">Cancel Subscription</a>
</div>
<div class="col-md-6">
<a href="{ROOT_URL}member/manage" class="btn btn-lg btn-primary btn-block" role="button">Go Back</a>
<a href="{ROOT_URL}member/manage" class="btn btn-lg btn-primary btn-block">Go Back</a>
</div>
</div>
</div>

View File

@ -27,7 +27,7 @@
<p>Basic bookmark storage</p>
<p>No import/export</p>
<p>Completely free</p>
<a href="{ROOT_URL}member/getmonthly/{ID}" class="btn btn-success" role="button">Sign Up</a>
<a href="{ROOT_URL}member/getmonthly/{ID}" class="btn btn-success">Sign Up</a>
</div>
</div>
</div>
@ -40,7 +40,7 @@
<p>Import/export bookmarks</p>
<p>Advanced curation tools</p>
<p>{prettyPriceMonthly}/month</p>
<a href="{ROOT_URL}member/getmonthly/{ID}" class="btn btn-primary" role="button">Sign Up</a>
<a href="{ROOT_URL}member/getmonthly/{ID}" class="btn btn-primary">Sign Up</a>
</div>
</div>
</div>
@ -53,7 +53,7 @@
<p>Save with annual billing</p>
<p>All features included</p>
<p>{prettyPriceYearly}/year</p>
<a href="{ROOT_URL}member/getyearly/{ID}" class="btn btn-primary" role="button">Sign Up</a>
<a href="{ROOT_URL}member/getyearly/{ID}" class="btn btn-primary">Sign Up</a>
</div>
</div>
</div>

View File

@ -20,7 +20,7 @@
<div class="card-body">
<p>{prettyPriceMonthly}/month</p>
<p>All pro features unlocked</p>
<a href="{ROOT_URL}member/getmonthly/{ID}" class="btn btn-success btn-block" role="button">Get Started</a>
<a href="{ROOT_URL}member/getmonthly/{ID}" class="btn btn-success btn-block">Get Started</a>
</div>
</div>
</div>
@ -30,7 +30,7 @@
<div class="card-body">
<p>{prettyPriceYearly}/year</p>
<p>Save {prettySavings} annually!</p>
<a href="{ROOT_URL}member/getyearly/{ID}" class="btn btn-info btn-block" role="button">Sign Up</a>
<a href="{ROOT_URL}member/getyearly/{ID}" class="btn btn-info btn-block">Sign Up</a>
</div>
</div>
</div>

View File

@ -19,8 +19,8 @@
<td>{prettyPrice}</td>
<td>{DTC=date}{current_period_start}{/DTC}</td>
<td>{DTC=date}{current_period_end}{/DTC}</td>
<td><a href="{ROOT_URL}member/pause/{ID}" class="btn btn-sm btn-primary" role="button"><i class="fa fa-fw fa-pause"></i></a></td>
<td><a href="{ROOT_URL}member/cancel/{ID}" class="btn btn-sm btn-danger" role="button"><i class="fa fa-fw fa-times"></i></a></td>
<td><a href="{ROOT_URL}member/pause/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-pause"></i></a></td>
<td><a href="{ROOT_URL}member/cancel/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-times"></i></a></td>
</tr>
{/LOOP}
{ALT}
@ -32,4 +32,4 @@
{/ALT}
</tbody>
</table>
<a href="{ROOT_URL}member/managepayment" class="btn btn-sm btn-primary" role="button">Manage Payment Method</a>
<a href="{ROOT_URL}member/managepayment" class="btn btn-sm btn-primary">Manage Payment Method</a>

View File

@ -10,10 +10,10 @@
</p>
<div class="row">
<div class="col-md-6">
<a href="{ROOT_URL}member/pauseconfirm/{pauseid}" class="btn btn-lg btn-danger btn-block" role="button">Pause Subscription</a>
<a href="{ROOT_URL}member/pauseconfirm/{pauseid}" class="btn btn-lg btn-danger btn-block">Pause Subscription</a>
</div>
<div class="col-md-6">
<a href="{ROOT_URL}member/manage" class="btn btn-lg btn-primary btn-block" role="button">Go Back</a>
<a href="{ROOT_URL}member/manage" class="btn btn-lg btn-primary btn-block">Go Back</a>
</div>
</div>
</div>