View source
<?php
include_once 'timeline_bookmark.features.inc';
function timeline_bookmark_menu() {
$items['timeline_bookmark/%user/%/%/%'] = array(
'title' => 'Timeline Bookmark',
'page callback' => 'timeline_bookmark_create',
'page arguments' => array(
1,
2,
3,
4,
),
'access callback' => 'user_access',
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['timeline_bookmark/%user/%/%/%/delete'] = array(
'page callback' => 'drupal_get_form',
'page arguments' => array(
'timeline_bookmark_delete_confirm',
1,
2,
3,
4,
),
'access callback' => 'user_access',
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['timeline_resume/%user/%/%/%'] = array(
'title' => 'Timeline Resume',
'page callback' => 'timeline_bookmark_resume',
'page arguments' => array(
1,
2,
3,
4,
),
'access callback' => 'user_access',
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
$items['timeline_resume_get/%user/%/%'] = array(
'title' => 'Retrieve a timeline resume',
'page callback' => 'timeline_bookmark_resume_get',
'page arguments' => array(
1,
2,
3,
),
'access callback' => 'user_access',
'access arguments' => array(
'access content',
),
'type' => MENU_CALLBACK,
);
return $items;
}
function timeline_bookmark_osmplayer_info() {
$path = drupal_get_path('module', 'timeline_bookmark');
return array(
'plugins' => array(
'timeline_bookmark' => array(
'title' => 'Timeline Bookmark',
'description' => 'Allows you to create timeline bookmarks. NOTE: You must also have Timeline Indicator plugin enabled.',
'js' => array(
$path . '/js/timeline_bookmark.js' => array(
'group' => JS_LIBRARY,
),
),
'css' => array(
$path . '/css/timeline_bookmark.css' => array(
'group' => CSS_THEME,
),
),
),
'timeline_resume' => array(
'title' => 'Timeline Resume',
'description' => 'Allows you to resume media from where you left off.',
'js' => array(
$path . '/js/timeline_resume.js' => array(
'group' => JS_LIBRARY,
),
),
),
),
);
}
function timeline_bookmark_osmplayer_params($params) {
global $user;
if (!empty($user->uid)) {
$link = '/timeline_bookmark/' . $user->uid;
drupal_add_js(array(
'timeline_bookmark_link' => $link,
), 'setting');
drupal_add_js(array(
'timeline_resume' => array(
'url' => '/timeline_resume/' . $user->uid,
'get' => '/timeline_resume_get/' . $user->uid,
'refresh' => 2000,
),
), 'setting');
}
return array();
}
function timeline_bookmark_get_bookmark($account, $entity_type, $entity_id, $mediatime) {
$bookmark = null;
if (!empty($account->uid) && !empty($entity_type) && !empty($entity_id) && !empty($mediatime)) {
$bookmark = (object) array(
'entity_type' => check_plain($entity_type),
'entity_id' => intval($entity_id),
'uid' => intval($account->uid),
'mediatime' => intval($mediatime),
);
}
return $bookmark;
}
function timeline_bookmark_search($account, $entity_type, $entity_id, $mediatime) {
if ($bookmark = timeline_bookmark_get_bookmark($account, $entity_type, $entity_id, $mediatime)) {
return timeline_bookmark_get($bookmark);
}
return null;
}
function timeline_bookmark_create($account, $entity_type, $entity_id, $mediatime) {
global $user;
$error = '';
if ($bookmark = timeline_bookmark_get_bookmark($account, $entity_type, $entity_id, $mediatime)) {
if (!timeline_bookmark_get($bookmark)) {
if ($user->uid == $account->uid || user_access("administer nodes")) {
if ($bookmark = timeline_bookmark_save($bookmark)) {
drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
print drupal_json_encode($bookmark);
drupal_exit();
}
else {
$error = 'Unable to save bookmark.';
}
}
else {
$error = 'Permission Denied.';
}
}
else {
$error = 'Bookmark already exists.';
}
}
else {
$error = 'Unknown parameters';
}
drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
print drupal_json_encode(array(
'status' => FALSE,
'errorMessage' => $error,
));
drupal_exit();
}
function timeline_bookmark_save($bookmark) {
$bid = !empty($bookmark->bid) ? array(
'bid',
) : array();
if (empty($bid)) {
$bookmark->timestamp = time();
}
if (drupal_write_record('timeline_bookmark', $bookmark, $bid)) {
return $bookmark;
}
else {
return null;
}
}
function timeline_bookmark_delete_check($account, $bookmark) {
global $user;
if (empty($bookmark->bid)) {
drupal_set_message("No bookmark provided", "error");
return FALSE;
}
if (empty($account->uid)) {
drupal_set_message("No account provided", "error");
return FALSE;
}
if ($user->uid != $account->uid && !user_access("administer nodes")) {
drupal_set_message("You do not have permission to delete this bookmark.", "error");
return FALSE;
}
return TRUE;
}
function timeline_bookmark_delete_confirm($form, $form_state, $account, $entity_type, $entity_id, $mediatime) {
if ($bookmark = timeline_bookmark_search($account, $entity_type, $entity_id, $mediatime)) {
if (timeline_bookmark_delete_check($account, $bookmark)) {
$form = array(
'bookmark' => array(
'#type' => 'value',
'#value' => $bookmark,
),
'account' => array(
'#type' => 'value',
'#value' => $account,
),
);
$question = "Are you sure you want to delete this bookmark?";
$dest = drupal_get_destination();
return confirm_form($form, $question, $dest['destination']);
}
}
return drupal_access_denied();
}
function timeline_bookmark_delete_confirm_submit($form, &$form_state) {
$account = $form_state['values']['account'];
$bookmark = $form_state['values']['bookmark'];
if (timeline_bookmark_delete_check($account, $bookmark)) {
if (timeline_bookmark_delete($bookmark)) {
drupal_set_message("Bookmark deleted.");
}
}
}
function timeline_bookmark_delete($bookmark) {
if (!empty($bookmark->bid)) {
db_delete('timeline_bookmark')
->condition('bid', intval($bookmark->bid))
->execute();
return true;
}
return false;
}
function timeline_bookmark_get($bookmark) {
if (!empty($bookmark->bid)) {
return timeline_bookmark_load($bookmark->bid);
}
else {
if (!empty($bookmark->entity_type) && !empty($bookmark->entity_id) && !empty($bookmark->uid)) {
$query = db_select('timeline_bookmark', 'tb');
$query
->fields('tb');
$query
->condition('tb.entity_type', check_plain($bookmark->entity_type));
$query
->condition('tb.entity_id', intval($bookmark->entity_id));
$query
->condition('tb.uid', intval($bookmark->uid));
if (!empty($bookmark->type)) {
$query
->condition('tb.type', check_plain($bookmark->type));
}
if (!empty($bookmark->mediatime)) {
$query
->condition('tb.mediatime', intval($bookmark->mediatime));
}
return $query
->execute()
->fetchObject();
}
}
}
function timeline_bookmark_load($bid) {
if (!empty($bid)) {
return db_select('timeline_bookmark', 'tb')
->fields('tb')
->condition('tb.bid', intval($bid))
->execute()
->fetchObject();
}
else {
return null;
}
}
function timeline_bookmark_resume_get($account, $entity_type, $entity_id) {
global $user;
$error = '';
if ($user->uid == $account->uid || user_access("administer nodes")) {
$bookmark = new stdClass();
$bookmark->uid = $account->uid;
$bookmark->entity_type = $entity_type;
$bookmark->entity_id = $entity_id;
$bookmark->type = 'resume';
$bookmark = timeline_bookmark_get($bookmark);
if ($bookmark) {
drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
print drupal_json_encode($bookmark);
drupal_exit();
}
else {
$error = 'Bookmark does not exist.';
}
}
else {
$error = 'Permission Denied.';
}
drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
print drupal_json_encode(array(
'status' => FALSE,
'errorMessage' => $error,
));
drupal_exit();
}
function timeline_bookmark_resume($account, $entity_type, $entity_id, $mediatime) {
global $user;
$error = '';
if ($user->uid == $account->uid || user_access("administer nodes")) {
$bookmark = new stdClass();
$bookmark->uid = $account->uid;
$bookmark->entity_type = $entity_type;
$bookmark->entity_id = $entity_id;
$bookmark->type = 'resume';
$existing = timeline_bookmark_get($bookmark);
if ($existing) {
$bookmark = $existing;
}
$bookmark->timestamp = time();
$bookmark->mediatime = $mediatime;
if ($bookmark = timeline_bookmark_save($bookmark)) {
drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
print drupal_json_encode($bookmark);
drupal_exit();
}
else {
$error = 'Unable to save bookmark.';
}
}
else {
$error = 'Permission Denied.';
}
drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
print drupal_json_encode(array(
'status' => FALSE,
'errorMessage' => $error,
));
drupal_exit();
}