49267e52 |
<?php
/*
* Plugin Name: Rucy
* Plugin URI: https://github.com/gips/rucy |
0f52aed2 |
* Description: Reservation Update (Published) Content. |
468efc5c |
* Version: 0.1.2 |
49267e52 |
* Author: Nita
* License: GPLv2 or later
* Text Domain: rucy
* Domain Path: /lang
*/
define('RC_PLUGIN_URL', plugin_dir_url(__FILE__));
define('RC_SETTING_OPTION_KEY', 'rucy_post_type');
define('RC_TXT_DOMAIN', 'rucy');
define('RC_POSTTYPE_DEFAULT','post,page'); |
81f9bb6c |
define('RC_CRON_HOOK', 'rucy_update_reserved_content'); |
b4c3c653 |
load_plugin_textdomain( RC_TXT_DOMAIN, false, 'rucy/lang'); |
49267e52 |
add_action('admin_enqueue_scripts','rc_load_jscss');
function rc_load_jscss()
{
global $hook_suffix; |
e7e80c88 |
if(in_array($hook_suffix, array('post.php','post-new.php',))) |
49267e52 |
{ |
e7e80c88 |
wp_register_style('rucy.css', RC_PLUGIN_URL . '/css/rucy.css',array(),'0.0.1'); |
49267e52 |
wp_enqueue_style('rucy.css'); |
e7e80c88 |
wp_register_script('rucy.js', RC_PLUGIN_URL . '/js/rucy.js', array('jquery'), '0.0.1'); |
49267e52 |
wp_enqueue_script('rucy.js');
}
}
|
b4c3c653 |
/**
* get rucy post_metas or post_meta keys.
* @param int $post_id
* @return array
*/ |
e7e80c88 |
function getRcMetas($post_id = "")
{ |
b4c3c653 |
$base = array( |
765926c5 |
'accept' => 'rc_reserv_accept',
'content' => 'rc_reserv_content',
'date' => 'rc_reserv_date' |
b4c3c653 |
);
if($post_id > 0)
{
foreach ($base as $key => $value)
{
$res[$key] = get_post_meta($post_id, $value, true);
}
} else {
$res = $base; |
e7e80c88 |
} |
b4c3c653 |
return $res; |
e7e80c88 |
}
// add reserv_metabox
add_action('admin_menu', 'add_rucy_metabox_out');
function add_rucy_metabox_out()
{
$acceptPostType = getRcSetting();
foreach ($acceptPostType as $postType)
{ |
765926c5 |
add_meta_box('rucy_metabox','Rucy','add_rucy_metabox_inside',$postType,'normal','high'); |
e7e80c88 |
}
function add_rucy_metabox_inside()
{ |
765926c5 |
global $post; |
e7e80c88 |
$rcKeys = getRcMetas();
$rc_content_name = $rcKeys['content'];
$rc_accept_name = $rcKeys['accept'];
$rcMetas = getRcMetas($post->ID);
$reserv_accept = $rcMetas['accept'];
$reserv_date = $rcMetas['date'];
if("" == $reserv_date)
{
$reserv_date = $post->post_date;
}
$reserv_date_arr = getdate(strtotime($reserv_date));
$reserv_content = $rcMetas['content'];
if("" == $reserv_content)
{
$reserv_content = $post->post_content; |
765926c5 |
} |
e7e80c88 |
?>
<div id="rc-post-wrap" class="curtime"> |
765926c5 |
<input type="hidden" name="schroeder" id="schroeder" value="<?php echo wp_create_nonce(plugin_basename(__FILE__)); ?>"/> |
e7e80c88 |
<label class="rc_accept">
<input type="checkbox" name="<?php echo $rc_accept_name; ?>" value="1" <?php echo ($reserv_accept == "1") ? "checked" : ""; ?>> <?php _e('Accept reserve update content.',RC_TXT_DOMAIN) ?>
</label>
<div class="rc-datetime" id="timestamp">
<?php _e('UpdateTime',RC_TXT_DOMAIN) ?>:<b><?php echo date("Y/m/d @ H:i", strtotime($reserv_date)); ?></b>
</div>
<a href="#edit-reservdate" class="edit-timestamp rc-datetime-edit"><?php _e('Edit') ?></a>
<div class="rc-datetime-wrap">
<input type="text" size="4" maxlength="4" name="rc_year" value="<?php echo date('Y',$reserv_date_arr[0]); ?>"><?php echo '/' ?>
<select name="rc_month">
<?php
for($i=1;$i<=12;$i++)
{
$m = sprintf("%02d",$i);
$selected = ($m == date('m',$reserv_date_arr[0])) ? "selected" : "";
echo '<option value="'.$m.'" '.$selected.'>'.$m.'</option>';
}
?>
</select><?php echo '/' ?>
<input type="text" size="2" maxlength="2" name="rc_day" value="<?php echo date('d',$reserv_date_arr[0]); ?>">
@ <input type="text" size="2" maxlength="2" name="rc_hour" value="<?php echo date('H',$reserv_date_arr[0]); ?>">:<input type="text" size="2" maxlength="2" name="rc_minutes" value="<?php echo date('i',$reserv_date_arr[0]); ?>">
<a href="#edit-reservdate" class="rc-datetime-update button"><?php _e('OK',RC_TXT_DOMAIN) ?></a>
<a href="#edit-reservdate" class="rc-datetime-cancel"><?php _e('Cancel',RC_TXT_DOMAIN) ?></a>
</div>
<?php
$dateArr = array(
'rc_year' => date('Y',$reserv_date_arr[0]),
'rc_month' => date('m',$reserv_date_arr[0]),
'rc_day' => date('d',$reserv_date_arr[0]),
'rc_hour' => date('H',$reserv_date_arr[0]),
'rc_minutes' => date('i',$reserv_date_arr[0])
);
foreach ($dateArr as $k => $v)
{
echo '<input type="hidden" name="'.$k.'_cr" id="'.$k.'_cr" value="'.$v.'">';
}
?>
</div>
<?php
wp_editor($reserv_content, $rc_content_name);
}
}
// save post meta
add_action('save_post','savePostmeta');
function savePostmeta($post_id)
{
if(isset($_POST) && isset($_POST['post_type']))
{ |
765926c5 |
if(isset($_POST['schroeder']) && !wp_verify_nonce($_POST['schroeder'], plugin_basename(__FILE__))){
return;
}
if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE){
return;
} |
e7e80c88 |
$rcKeys = getRcMetas(); |
b4c3c653 |
$acceptPostType = getRcSetting(); |
a12e515d |
if(in_array($_POST['post_type'], $acceptPostType)) |
e7e80c88 |
{ |
a12e515d |
$date = mktime($_POST['rc_hour'], $_POST['rc_minutes'], 00, $_POST['rc_month'], $_POST['rc_day'], $_POST['rc_year']);
if($date) |
e7e80c88 |
{ |
a12e515d |
$_POST[$rcKeys['date']] = date('Y-m-d H:i:s',$date);
} else {
$_POST[$rcKeys['date']] = "";
}
if(!isset($_POST[$rcKeys['accept']])){
$_POST[$rcKeys['accept']] = "0";
} else if($_POST[$rcKeys['accept']] != "1"){
$_POST[$rcKeys['accept']] = "0"; |
e7e80c88 |
}
} |
44e6ce1f |
if($_POST[$rcKeys['accept']] == "1") |
e7e80c88 |
{ |
a12e515d |
foreach ($rcKeys as $key => $val)
{
savePostMetaBase($post_id, $val);
} |
e7e80c88 |
$reservDate = strtotime(get_gmt_from_date($_POST[$rcKeys['date']]) . " GMT"); |
44e6ce1f |
if(in_array($_POST['post_type'], $acceptPostType) || $_POST['post_type'] != 'revision') |
e7e80c88 |
{ |
81f9bb6c |
wp_schedule_single_event($reservDate, RC_CRON_HOOK, array($post_id)); |
e7e80c88 |
} |
44e6ce1f |
} else if($_POST[$rcKeys['accept']] == "0") {
// delete schedule |
81f9bb6c |
wp_clear_scheduled_hook(RC_CRON_HOOK, array($post_id)); |
e7e80c88 |
}
}
}
|
b4c3c653 |
/**
* save, update, delete post_meta
*
* @param int $post_id
* @param string $post_metakey
*/ |
e7e80c88 |
function savePostMetaBase($post_id, $post_metakey)
{
if(isset($_POST))
{
$post_data = "";
if(isset($_POST[$post_metakey]))
{
$post_data = $_POST[$post_metakey];
} |
765926c5 |
$meta = get_post_meta($post_id, $post_metakey,true);
if ($post_data != $meta) {
update_post_meta($post_id, $post_metakey, $post_data, $meta); |
e7e80c88 |
} elseif("" == $post_data) {
delete_post_meta($post_id, $post_metakey);
}
}
}
// update post for wp-cron
add_action('wp_reserv_content_update', 'updateReservedContent','10',1);
function updateReservedContent($post_id)
{
$rcMetas = getRcMetas($post_id);
if("1" == $rcMetas['accept'])
{
$updates = array(
'ID' => $post_id,
'post_content' => $rcMetas['content'],
);
wp_update_post($updates,true);
} |
81f9bb6c |
wp_clear_scheduled_hook(RC_CRON_HOOK, array($post_id)); |
e7e80c88 |
$dels = getRcMetas(); |
765926c5 |
foreach ($dels as $key => $del) |
e7e80c88 |
{
delete_post_meta($post_id, $del);
}
}
|
a91b433a |
// add update message
add_filter('post_updated_messages','addRcMessage');
function addRcMessage($messages)
{
global $post, $post_ID;
$arrPostTypes = getRcSetting(true);
$postType = get_post_type($post);
if(in_array($postType, $arrPostTypes))
{
$rcMetas = getRcMetas($post_ID);
if("1" == $rcMetas['accept'])
{ |
468efc5c |
$addMessageDate = date('Y/m/d @ H:i', strtotime($rcMetas['date']));
$str = __('registered reservation update content _RC_DATETIME_',RC_TXT_DOMAIN);
$addMessage = '<br>' . strtr($str, array('_RC_DATETIME_' => $addMessageDate)); |
a91b433a |
// published
$messages[$postType][1] .= $addMessage;
$messages[$postType][4] .= $addMessage;
$messages[$postType][6] .= $addMessage;
// saved
$messages[$postType][7] .= $addMessage;
// submited
$messages[$postType][8] .= $addMessage;
// scheduled
$messages[$postType][9] .= $addMessage;
}
}
return $messages;
}
|
e7e80c88 |
// add reservation info at postlist
function manageRucyCols($columns) { |
765926c5 |
$columns['subtitle'] = __("Reservation Update DateTime", RC_TXT_DOMAIN); |
e7e80c88 |
return $columns;
}
function addRucyCol($column_name, $post_id) {
$rcMetas = getRcMetas($post_id); |
765926c5 |
$s = ""; |
e7e80c88 |
if($column_name == 'subtitle')
{
$s = $rcMetas['accept'];
}
if($s == "1")
{
echo $rcMetas['date'];
} else {
echo __('None');
}
}
|
765926c5 |
foreach (array('pages','posts') as $p){
add_filter('manage_'.$p.'_columns', 'manageRucyCols');
add_action('manage_'.$p.'_custom_column', 'addRucyCol', 10, 2);
} |
e7e80c88 |
|
49267e52 |
// setting page
add_action('admin_menu','admin_menu_rucy');
function admin_menu_rucy()
{
add_options_page('Rucy', 'Rucy', 'manage_options', 'rucy', 'addRcSetting');
}
function addRcSetting()
{
$post = $_POST;
$isCheckedPost = "";
$isCheckedPage = "";
$customPostTypes = ""; |
8d113771 |
$errorClass = "form-invalid"; |
81f9bb6c |
$basicPostTypes = array('page','post');
$invalidPostTypes = array('attachment','revision'); |
8d113771 |
$message = array();
$error = 0; |
49267e52 |
if(isset($post['page_options']))
{
$res = "";
if(isset($post['rc_post']) && $post['rc_post'] == 'post')
{
$res .= $post['rc_post'];
$isCheckedPost = "checked"; |
8d113771 |
} else {
$error += 1; |
49267e52 |
}
if(isset($post['rc_page']) && $post['rc_page'] == 'page') {
$res .= "," . $post['rc_page'];
$isCheckedPage = "checked"; |
44e6ce1f |
} else { |
8d113771 |
$error += 1;
}
if($error == 2){
$message['post_page'] = __("post or page is not allow.", RC_TXT_DOMAIN); |
49267e52 |
}
if(isset($post['rc_custom_post']) && $post['rc_custom_post'] != "") {
$customCheck = explode(',', $post['rc_custom_post']); |
81f9bb6c |
foreach ($customCheck as $check)
{
if(in_array($check, $basicPostTypes)) |
49267e52 |
{ |
8d113771 |
$message['custom_post'] = __('Do not input "post" or "page". ', RC_TXT_DOMAIN);
} else if(!preg_match('/[a-zA-Z0-9_-]/', $check)) {
$message['custom_post'] = __("Please input alphabet or numeric. And do not input sequencial commas.", RC_TXT_DOMAIN); |
81f9bb6c |
} else if(in_array($check, $invalidPostTypes)){
$message['custom_post'] = __('Do not input "attachment" or "revision". ',RC_TXT_DOMAIN); |
49267e52 |
}
}
$res .= "," . $post['rc_custom_post'];
$customPostTypes = $post['rc_custom_post'];
} |
8d113771 |
if($res != "" && count($message) == 0) |
49267e52 |
{ |
8d113771 |
update_option(RC_SETTING_OPTION_KEY, $res); |
49267e52 |
}
} else { |
8d113771 |
$message = array(); |
49267e52 |
$arrSetting = getRcSetting();
$isCheckedPost = (in_array('post', $arrSetting) == TRUE) ? 'checked' : "";
$isCheckedPage = (in_array('page', $arrSetting) == TRUE) ? 'checked' : "";
$arrCustomPostTypes = array();
foreach ($arrSetting as $v)
{ |
a12e515d |
if(!in_array($v, $basicPostTypes)) |
49267e52 |
{
array_push($arrCustomPostTypes, $v);
}
}
$customPostTypes = implode(',', $arrCustomPostTypes);
}
?>
<div class="wrap">
<h2>Rucy Settings</h2> |
765926c5 |
<p><?php _e('Configure content types reservation update.',RC_TXT_DOMAIN); ?></p> |
49267e52 |
<form method="post" action="#">
<?php wp_nonce_field('update-options'); ?>
<table class="form-table"> |
8d113771 |
<tr class="<?php echo (isset($message['post_page']) == true) ? $errorClass : ""; ?>"> |
765926c5 |
<th><?php _e('post type',RC_TXT_DOMAIN) ?><br><small>*<?php _e('Require',RC_TXT_DOMAIN) ?></small></th> |
49267e52 |
<td>
<ul> |
8d113771 |
<li><label for="rc_post"><input type="checkbox" id="rc_post" name="rc_post" value="post" <?php echo $isCheckedPost ?>><?php _e('post',RC_TXT_DOMAIN) ?></label></li>
<li><label for="rc_page"><input type="checkbox" id="rc_page" name="rc_page" value="page" <?php echo $isCheckedPage ?>><?php _e('page',RC_TXT_DOMAIN) ?></label></li> |
49267e52 |
</ul> |
8d113771 |
<?php
if(isset($message['post_page']))
{
echo '<p>'.$message['post_page'].'</p>';
}
?> |
49267e52 |
</td>
</tr> |
8d113771 |
<tr class="<?php echo (isset($message['custom_post']) == true) ? $errorClass : ""; ?>">
<th><?php _e('custom post type',RC_TXT_DOMAIN) ?></th> |
49267e52 |
<td> |
8d113771 |
<input type="text" value="<?php echo $customPostTypes ?>" name="rc_custom_post" placeholder="<?php _e('Separated by commas',RC_TXT_DOMAIN) ?>">
<?php
if(isset($message['custom_post']))
{
echo '<p>'.$message['custom_post'].'</p>';
}
?> |
49267e52 |
</td>
</tr>
</table>
<input type="hidden" name="action" value="update" /> |
8d113771 |
<input type="hidden" name="page_options" value="<?php echo RC_SETTING_OPTION_KEY ?>"/> |
49267e52 |
<p class="submit">
<input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
</p>
</form> |
0f52aed2 |
<h3><?php _e("Contact",RC_TXT_DOMAIN) ?></h3>
<p>
<?php _e('Rucy is maintained by <a href="http://profiles.wordpress.org/gips-nita/">nita</a>.<br>', RC_TXT_DOMAIN) ?> |
44e6ce1f |
<?php _e('If you have found a bug or would like to make a suggestion or contribution why not join the <a href="https://wordpress.org/support/plugin/rucy">Support Form @ wordpress.org</a><br />',RC_TXT_DOMAIN);?>
<?php _e("Please consider donating if you like this plugin. I've put a lot of my free time into this plugin and donations help to justify it.<br />",RC_TXT_DOMAIN); ?> |
0f52aed2 |
</p> |
44e6ce1f |
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_donations">
<input type="hidden" name="business" value="J2GV73KGN5MKN">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif"border="0" name="submit"alt="PayPal - The safer, easier way to pay online!">
</form> |
49267e52 |
</div>
<?php
} |
b4c3c653 |
/**
* get post type allowed rucy
*
* @param boolean $isArray
* @return string
*/ |
49267e52 |
function getRcSetting($isArray = true)
{
$rc_setting = get_option(RC_SETTING_OPTION_KEY);
$res = "";
if(!$rc_setting)
{
$rc_setting = RC_POSTTYPE_DEFAULT;
}
if($isArray)
{
$res = explode(',', $rc_setting);
} else {
$res = $rc_setting;
}
return $res;
}
|
e7e80c88 |
// uninstall
if(function_exists('register_uninstall_hook'))
{ |
b4c3c653 |
register_uninstall_hook(__FILE__, 'goodbyeRucy'); |
e7e80c88 |
}
|
b4c3c653 |
function goodbyeRucy() |
e7e80c88 |
{ |
81f9bb6c |
wp_clear_scheduled_hook(RC_CRON_HOOK); |
e7e80c88 |
delete_option(RC_SETTING_OPTION_KEY);
$allposts = get_posts('numberposts=-1&post_status=');
$meta_keys = getRcMetas();
foreach ($allposts as $postinfo)
{ |
765926c5 |
foreach ($meta_keys as $k => $val) |
e7e80c88 |
{ |
765926c5 |
delete_post_meta($postinfo->ID, $val); |
e7e80c88 |
}
}
} |
0f52aed2 |
// link to setting
add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'helloRucy');
function helloRucy($links){
$links[] = '<a href="' . get_admin_url(null, 'options-general.php?page=rucy') . '">' . __('Settings') . '</a>';
return $links;
} |