|
From: <bi...@us...> - 2013-06-08 05:58:34
|
Revision: 11639
http://sourceforge.net/p/xoops/svn/11639
Author: bitc3r0
Date: 2013-06-08 05:58:31 +0000 (Sat, 08 Jun 2013)
Log Message:
-----------
Finished save blocks positions for the new block manager with drag and drop features.
Modified Paths:
--------------
RMC/rmcommon/trunk/rmcommon/ajax/blocks.php
RMC/rmcommon/trunk/rmcommon/blocks.php
RMC/rmcommon/trunk/rmcommon/class/blockposition.php
RMC/rmcommon/trunk/rmcommon/css/blocks.css
RMC/rmcommon/trunk/rmcommon/include/js/blocks.js
RMC/rmcommon/trunk/rmcommon/templates/rmc_blocks.php
Added Paths:
-----------
RMC/rmcommon/trunk/rmcommon/images/ok.png
Modified: RMC/rmcommon/trunk/rmcommon/ajax/blocks.php
===================================================================
--- RMC/rmcommon/trunk/rmcommon/ajax/blocks.php 2013-06-08 05:57:03 UTC (rev 11638)
+++ RMC/rmcommon/trunk/rmcommon/ajax/blocks.php 2013-06-08 05:58:31 UTC (rev 11639)
@@ -14,15 +14,17 @@
error_reporting(0);
$xoopsLogger->activated = false;
-function response($data, $error=0, $token=0){
+function response($message, $data = array(), $error=0, $token=0){
global $xoopsSecurity;
-
- if($token)
- $data = array_merge($data, array('token'=>$xoopsSecurity->createToken()));
-
- $data = array_merge($data, array('error'=>$error));
-
- echo json_encode($data);
+
+ $response = array(
+ 'message' => $message,
+ 'data' => $data,
+ 'error' => $error,
+ 'token' => $token==1 ? $xoopsSecurity->createToken() : '',
+ );
+
+ echo json_encode($response);
die();
}
@@ -292,34 +294,46 @@
*/
function save_block_order(){
global $xoopsSecurity;
-
- if(!$xoopsSecurity->check())
- response(array('message'=>__('Session token expired!','rmcommon')), 1, 0);
-
- parse_str(rmc_server_var($_POST, 'items', ''));
-
- if(!isset($item))
- response(array('message'=>__('No items has been specified!','rmcommon')), 1, 1);
-
+
+ $blocks = rmc_server_var($_POST, 'blocks', '');
+ $pos_id = rmc_server_var($_POST, 'position', '');
+
+ if(!$xoopsSecurity->check(false, false))
+ response(__('Blocks order could not be saved!','rmcommon'), array('error' => __('Session token expired!','rmcommon')), 1, 0);
+
+ if($pos_id<=0)
+ response(__('Position not specified!','rmcommon'), array('error' => ''), 1, 0);
+
+ $blocks = json_decode($blocks, true);
+
+ if(empty($blocks))
+ response('', array('position' => $pos_id), 0, 0);
+
$db = XoopsDatabaseFactory::getDatabaseConnection();
-
- $i = 0;
- foreach($item as $id => $v){
- $sql = "UPDATE ".$db->prefix("rmc_blocks")." SET weight=$i WHERE bid=$id";
- $db->queryF($sql);
- $i++;
+ $ids = array();
+ $sql = "UPDATE ".$db->prefix("rmc_blocks")." SET canvas = $pos_id, weight = CASE bid\n";
+ foreach($blocks as $i => $block){
+ $sql .= "WHEN $block[id] THEN $i\n";
+ $ids[] = $block['id'];
}
-
- showMessage(__('Blocks order saved successfully!','rmcommon'), 0);
-
- response(array(
- 'message' => __('Changes saved successfully!','rmcommon')
- ), 0, 1);
-
+ $sql .= "END\n WHERE bid IN (".implode(",",$ids).");";
+
+ if($db->queryF($sql))
+ response(__('Blocks order saved successfully!','rmcommon'), array('position'=>$pos_id), 0, 0);
+ else
+ response(
+ __('Blocks order could ot be saved!','rmcommon'),
+ array(
+ 'position' => $pos_id,
+ 'error' => $db->error()
+ ),
+ 1, 0
+ );
+
}
-$action = rmc_server_var($_REQUEST, 'action', '');
+$action = rmc_server_var($_POST, 'action', '');
switch($action){
case 'insert':
@@ -334,7 +348,7 @@
case 'savepos':
save_block_position();
break;
- case 'save_orders':
+ case 'save-orders':
save_block_order();
break;
}
\ No newline at end of file
Modified: RMC/rmcommon/trunk/rmcommon/blocks.php
===================================================================
--- RMC/rmcommon/trunk/rmcommon/blocks.php 2013-06-08 05:57:03 UTC (rev 11638)
+++ RMC/rmcommon/trunk/rmcommon/blocks.php 2013-06-08 05:58:31 UTC (rev 11639)
@@ -72,6 +72,8 @@
$db = XoopsDatabaseFactory::getDatabaseConnection();
$modules = RMFunctions::get_modules_list(1);
+
+ $from = rmc_server_var($_GET, 'from', '');
// ** API Event **
// Allows other methods to add o modify the list of available widgets
@@ -194,10 +196,13 @@
$name = rmc_server_var($_POST, 'posname', '');
$tag = rmc_server_var($_POST, 'postag', '');
- if($name=='' || $tag==''){
- redirectMsg(__('Please provide a name and tag for this new position!','rmcommon'));
+ if($name==''){
+ redirectMsg('blocks.php', __('Please provide a name and tag for this new position!','rmcommon'), RMMSG_ERROR);
die();
}
+
+ if($tag=='')
+ $tag = str_replace("-", "_", TextCleaner::getInstance()->sweetstring($name));
if($edit){
@@ -300,7 +305,7 @@
function delete_positions(){
global $xoopsSecurity;
-
+
if (!$xoopsSecurity->check()){
redirectMsg('blocks.php?from=positions', __('You are not allowed to do this action!','rmcommon'), 1);
die();
@@ -313,14 +318,14 @@
die();
}
- $error = '';
+ $errors = '';
foreach ($ids as $id){
$pos = new RMBlockPosition($id);
$pos = RMEvents::get()->run_event('rmcommon.deleting.block.position',$pos);
- if (!$pos->delete()) $error .= $pos->errors();
+ if (!$pos->delete()) $errors .= $pos->errors();
}
-
+
if ($errors!=''){
redirectMsg('blocks.php?from=positions', __('There was some errors:','rmcommon').'<br />'.$error, 1);
} else {
Modified: RMC/rmcommon/trunk/rmcommon/class/blockposition.php
===================================================================
--- RMC/rmcommon/trunk/rmcommon/class/blockposition.php 2013-06-08 05:57:03 UTC (rev 11638)
+++ RMC/rmcommon/trunk/rmcommon/class/blockposition.php 2013-06-08 05:58:31 UTC (rev 11639)
@@ -62,19 +62,30 @@
while($row = $this->db->fetchArray($result)){
$ids[] = $row['bid'];
}
-
- if (!$this->db->queryF("DELETE FROM ".$this->db->prefix("rmc_bkmod")." WHERE bid IN(". implode(',', $ids) .")")){
- $this->addError($this->db->error());
- return false;
+
+ // If there exists blocks assigned to positions
+ // then delete them
+ if(!empty($ids)){
+
+ // Delete associations
+ if (!$this->db->queryF("DELETE FROM ".$this->db->prefix("rmc_bkmod")." WHERE bid IN(". implode(',', $ids) .")")){
+ $this->addError($this->db->error());
+ return false;
+ }
+
+ // Delete permissions
+ if (!$this->db->queryF("DELETE FROM ".$this->db->prefix("group_permission")." WHERE gperm_itemid IN (".implode(',',$ids).") AND gperm_name='block_read'")){
+ $this->addError($this->db->error());
+ return false;
+ }
+
+ // Delete blocks
+ if (!$this->db->queryF("DELETE FROM ".$this->db->prefix("rmc_blocks")." WHERE bid IN (".implode(',',$ids).")")){
+ $this->addError($this->db->error());
+ return false;
+ }
+
}
- if (!$this->db->queryF("DELETE FROM ".$this->db->prefix("group_permission")." WHERE gperm_itemid IN (".implode(',',$ids).") AND gperm_name='block_read'")){
- $this->addError($this->db->error());
- return false;
- }
- if (!$this->db->queryF("DELETE FROM ".$this->db->prefix("rmc_blocks")." WHERE bid IN (".implode(',',$ids).")")){
- $this->addError($this->db->error());
- return false;
- }
return $this->deleteFromTable();
Modified: RMC/rmcommon/trunk/rmcommon/css/blocks.css
===================================================================
--- RMC/rmcommon/trunk/rmcommon/css/blocks.css 2013-06-08 05:57:03 UTC (rev 11638)
+++ RMC/rmcommon/trunk/rmcommon/css/blocks.css 2013-06-08 05:58:31 UTC (rev 11639)
@@ -24,6 +24,11 @@
background-color: #ebebeb;
background-color: rgba(0,0,0,0.05);
}
+.rmc-position-item h3 > img{
+ float: right;
+ margin-top: 5px;
+ display: none;
+}
.rmc-position-item ol{
list-style: none;
padding: 5px;
@@ -37,21 +42,21 @@
margin: 0 0 6px 0;
background-color: #fff;
}
-.rmc-position-item ol li > .dd-handle > a{
+.rmc-position-item ol li > .row-fluid > a{
display: inline-block;
line-height: 30px;
padding: 0 7px;
border-left: 1px solid #ddd;
box-shadow: inset 1px 1px 1px rgba(255,255,255,0.5);
}
-.rmc-position-item ol li > .dd-handle > a:last-child{
+.rmc-position-item ol li > .row-fluid > a:last-child{
border-radius: 0 0 0 2px;
}
-.rmc-position-item ol li > .dd-handle > a:hover{
+.rmc-position-item ol li > .row-fluid > a:hover{
background-color: rgba(255,255,255,0.5);
text-decoration: none;
}
-.rmc-position-item ol li > .dd-handle{
+.rmc-position-item ol li > .item-controls{
border-bottom: 1px solid #ddd;
box-shadow: 0 1px 1px rgba(255,255,255,0.5);
border-radius: 2px 2px 0 0;
@@ -64,11 +69,11 @@
background: linear-gradient(to bottom, #ffffff 0%,#e5e5e5 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#e5e5e5',GradientType=0 ); /* IE6-9 */
}
-.rmc-position-item ol li > .dd-handle > strong{
+.rmc-position-item ol li .dd-handle{
line-height: 30px;
display: inline-block;
padding: 0 5px;
- max-width: 190px;
+ width: 190px;
text-shadow: 1px 1px 0 rgba(255,255,255,0.5);
font-size: 1.1em;
cursor: move;
@@ -87,10 +92,6 @@
font-size: 14px;
}
-#bks-and-pos{
- display: none;
-}
-
/* NESTABLE */
.dd-item,
.dd-empty,
@@ -124,51 +125,13 @@
display: block;
font-family: monospace;
}
-.bkbk_forms{
- overflow: hidden;
- width: 320px;
+
+.hidden-control{
display: none;
- float: left;
- margin: 0 10px 0 0;
- border-radius: 5px;
- -moz-border-radius: 5px;
}
-.bkbk_forms label{
- font-weight: bold;
+.visible-control{
display: block;
- margin: 0 0 3px 0;
}
-.bkbk_forms input[type='text'],
-.bkbk_forms select{
- width: 95%;
- margin: 0 0 10px 0;
-}
-.bkbk_forms .desc{
- font-size: 0.9em;
- color: #666;
- display: block;
- margin: -8px 0 10px 0;
-}
-.bkbk_forms .other_options{
- display: block;
- margin: 10px 0;
-}
-#existing-positions{
- display: none;
- padding: 10px;
- font-size: 0.9em;
- line-height: 140%;
-}
-#existing-positions span{
- display: block;
- overflow: hidden;
- border-bottom: 1px dotted #CCC;
- padding: 3px 0;
-}
-#existing-positions span a{
- display: block;
- float: right;
-}
/** Menus **/
.megamenu{
Added: RMC/rmcommon/trunk/rmcommon/images/ok.png
===================================================================
(Binary files differ)
Index: RMC/rmcommon/trunk/rmcommon/images/ok.png
===================================================================
--- RMC/rmcommon/trunk/rmcommon/images/ok.png 2013-06-08 05:57:03 UTC (rev 11638)
+++ RMC/rmcommon/trunk/rmcommon/images/ok.png 2013-06-08 05:58:31 UTC (rev 11639)
Property changes on: RMC/rmcommon/trunk/rmcommon/images/ok.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Modified: RMC/rmcommon/trunk/rmcommon/include/js/blocks.js
===================================================================
--- RMC/rmcommon/trunk/rmcommon/include/js/blocks.js 2013-06-08 05:57:03 UTC (rev 11638)
+++ RMC/rmcommon/trunk/rmcommon/include/js/blocks.js 2013-06-08 05:58:31 UTC (rev 11639)
@@ -163,6 +163,57 @@
}, 'json');
+ },
+
+ saveOrder: function(e){
+
+ var list = e.length ? e : $(e.target);
+
+ var params = {
+ position: list.data("pos"),
+ blocks: window.JSON.stringify(list.nestable('serialize')),
+ action: 'save-orders',
+ XOOPS_TOKEN_REQUEST: $("#token-positions").val()
+ };
+
+ $.post('ajax/blocks.php', params, function(data){
+
+ if(data.error == 1){
+ blocksAjax.addMessage(data.message + '<br>' + data.data.error, 'alert-error');
+ if(data.token!='')
+ $("#token-"+data.data.position).val(data.token);
+ return;
+ }
+
+ if(data.message != ''){
+ // Position changes applied
+ $("#position-"+data.data.position+" h3 > img").fadeIn('fast', function(){
+
+ var idstr = "#position-"+data.data.position+" h3 > img";
+ setTimeout(function(){
+ $(idstr).fadeOut('fast')
+ }, 1000);
+
+ });
+ }
+
+ // Update token
+ if(data.token!='')
+ $("#token-"+data.data.position).val(data.token);
+
+ }, 'json');
+
+ },
+
+ addMessage: function(message, type){
+
+ var html = '<div class="row-fluid">';
+ html += '<div class="alert '+type+'">';
+ html += '<button type="button" class="close" data-dismiss="alert">×</button>';
+ html += message+'</div></div>';
+
+ $("#bk-messages").append(html);
+
}
}
@@ -281,9 +332,9 @@
});
- $("li.dd-item .dd-handle a").click(function(){
+ $("li.dd-item .item-controls a").click(function(){
- alert($(this).data("block")); return;
+ alert($(this).data("action")); return;
blocksAjax.loadForm(id,'');
return false;
Modified: RMC/rmcommon/trunk/rmcommon/templates/rmc_blocks.php
===================================================================
--- RMC/rmcommon/trunk/rmcommon/templates/rmc_blocks.php 2013-06-08 05:57:03 UTC (rev 11638)
+++ RMC/rmcommon/trunk/rmcommon/templates/rmc_blocks.php 2013-06-08 05:58:31 UTC (rev 11639)
@@ -1,4 +1,5 @@
<h1 class="rmc_titles"><?php _e('Blocks Administration','rmcommon'); ?></h1>
+
<?php $from = rmc_server_var($_REQUEST,'from', '')=='positions'?true:false; ?>
<div class="rmc_blocks_options row-fluid">
<a href="#" id="newban" class="rmc_menus"><?php _e('Add New Block','rmcommon'); ?></a>
@@ -19,34 +20,31 @@
<?php endforeach; ?>
</div>
</div>
- <a href="#" id="newpos" class="rmc_menus"><?php _e('Show Positions','rmcommon'); ?></a>
+ <a href="#" id="newpos" class="rmc_menus"><?php empty($positions) ? _e('Show Blocks','rmcommon') : _e('Show Positions','rmcommon'); ?></a>
</div>
-<div id="bk-messages" style="display: none;">
- <span class="msg-close"></span>
- <span class="msg"></span>
-</div>
+<div id="bk-messages"></div>
<!-- Positions Grid -->
-<div class="row-fluid" id="blocks-list">
+<div class="row-fluid<?php echo empty($positions) || $from=='positions' ? ' hidden-control' : ''; ?>" id="blocks-list">
<?php foreach($positions as $pos): ?>
- <div id="position-<?php echo $pos['id']; ?>" class="dd rmc-position-item <?php echo tpl_cycle("green,blue,gold,orange"); ?>">
- <h3><?php echo $pos['name']; ?></h3>
+ <div id="position-<?php echo $pos['id']; ?>" class="dd rmc-position-item <?php echo tpl_cycle("green,blue,gold,orange"); ?>" data-pos="<?php echo $pos['id']; ?>">
+ <h3><?php echo $pos['name']; ?><img src="images/ok.png"></h3>
<?php if(!isset($used_blocks[$pos['id']])): ?>
<div class="dd-empty"><?php _e('Drag and drop blocks here','rmcommon'); ?></div>
<?php else: ?>
<ol class="dd-list">
<?php foreach($used_blocks[$pos['id']] as $block): ?>
<li class="dd-item" data-id="<?php echo $block['id']; ?>">
- <div class="row-fluid">
+ <div class="row-fluid item-controls">
<strong class="dd-handle"><?php echo $block['title']; ?></strong>
- <a href="#" class="pull-right text-error" data-block="<?php echo $block['id']; ?>" title="<?php _e('Delete Block','rmcommon'); ?>"><i class="icon-remove-sign"></i></a>
+ <a href="#" class="pull-right text-error" data-block="<?php echo $block['id']; ?>" data-action="delete" title="<?php _e('Delete Block','rmcommon'); ?>"><i class="icon-remove-sign"></i></a>
<?php if($block['visible']): ?>
- <a href="#" class="pull-right text-warning" data-block="<?php echo $block['id']; ?>" title="<?php _e('Hide block','rmcommon'); ?>"><i class="icon-eye-close"></i></a>
+ <a href="#" class="pull-right text-warning" data-block="<?php echo $block['id']; ?>" data-action="hide" title="<?php _e('Hide block','rmcommon'); ?>"><i class="icon-eye-close"></i></a>
<?php else: ?>
- <a href="#" class="pull-right text-success" data-block="<?php echo $block['id']; ?>" title="<?php _e('Show block','rmcommon'); ?>"><i class="icon-eye-open"></i></a>
+ <a href="#" class="pull-right text-success" data-block="<?php echo $block['id']; ?>" data-action="show" title="<?php _e('Show block','rmcommon'); ?>"><i class="icon-eye-open"></i></a>
<?php endif; ?>
- <a href="#" class="pull-right" data-block="<?php echo $block['id']; ?>" title="<?php _e('Block Settings','rmcommon'); ?>"><i class="icon-wrench"></i></a>
+ <a href="#" class="pull-right" data-block="<?php echo $block['id']; ?>" data-action="settings" title="<?php _e('Block Settings','rmcommon'); ?>"><i class="icon-wrench"></i></a>
</div>
<div class="row-fluid block-data">
<span class="text-info"><?php echo $block['module']['name']; ?></span>
@@ -60,35 +58,40 @@
</div>
<?php endforeach; ?>
</div>
+<input type="hidden" value="<?php echo $xoopsSecurity->createToken(); ?>" id="token-positions" name="token_positions">
<!--// End positions grid -->
-<div id="bks-and-pos">
-<div id="form-pos" class="bkbk_forms"<?php echo $from ? ' style="display: block;"' : ''; ?>>
- <div class="formposcontainer">
- <h3>Add Position</h3>
- <form name="frmaddpos" id="frm-add-pos" method="post" action="blocks.php" />
- <label><?php _e('Name','rmcommon'); ?></label>
- <input type="text" name="posname" value="" />
- <span class="desc"><?php _e('Input a name to identify this position (<em>eg. Left blocks</em>)','rmcommon'); ?></span>
- <label><?php _e('Tag Name','rmcommon'); ?></label>
- <input type="text" name="postag" value="" />
- <span class="desc"><?php _e('Specify a name for the smarty tag to use in templates (eg. left_blocks). This tag will be used as Smarty tag (eg. <{$left_blocks}>).','rmcommon'); ?></span>
- <input type="submit" name="bk_add_pos" id="add-position" value="<?php _e('Add Position','rmcommon'); ?>" />
- <input type="hidden" name="action" value="save_position" />
- <?php echo $xoopsSecurity->getTokenHTML(); ?>
- </form>
- <h4><?php _e('How to implement blocks','rmcommon'); ?></h4>
- <div class="code">
- <code><{foreach item="block" from=$xoBlocks.<em>tag</em>}><br 7>
- <{$block.title}><br />
- <{$block.content}><br />
- <{/foreach}></code>
- </div>
- </div>
+<div id="bks-and-pos" class="row-fluid<?php echo empty($positions) || $from=='positions' ? ' visible-control' : ' hidden-control'; ?>">
+<div id="form-pos" class="span4">
+ <form name="frmaddpos" id="frm-add-pos" method="post" action="blocks.php" />
+ <fieldset>
+ <legend>Add Position</legend>
+
+ <label><strong><?php _e('Name','rmcommon'); ?></strong></label>
+ <input type="text" name="posname" value="" class="input-block-level required" />
+ <span class="help-block"><?php _e('Input a name to identify this position (<em>eg. Left blocks</em>)','rmcommon'); ?></span>
+
+ <label><strong><?php _e('Tag Name','rmcommon'); ?></strong></label>
+ <input type="text" name="postag" value="" class="input-block-level required" />
+ <span class="help-block"><?php _e('Specify a name for the smarty tag to use in templates (eg. left_blocks). This tag will be used as Smarty tag (eg. <{$left_blocks}>).','rmcommon'); ?></span>
+
+ <input type="submit" class="btn btn-info btn-large" name="bk_add_pos" id="add-position" value="<?php _e('Add Position','rmcommon'); ?>" />
+ <input type="hidden" name="action" value="save_position" />
+ <?php echo $xoopsSecurity->getTokenHTML(); ?>
+
+ <div class="page-header">
+ <h4><?php _e('How to implement blocks','rmcommon'); ?></h4>
+ </div>
+ <pre><{foreach item="block" from=$xoBlocks.<em><strong>tag_name</strong></em>}>
+ <{$block.title}>
+ <{$block.content}>
+<{/foreach}></pre>
+ </fieldset>
+ </form>
</div>
<!-- Positions -->
-<div id="blocks-positions" style="overflow: hidden;<?php echo $from ? ' display: block;' : 'display: none;'; ?>">
+<div id="blocks-positions" class="span8">
<form name="formPos" id="frm-positions" method="post" action="blocks.php">
<div class="rmc_bulkactions">
<select name="action" id="bulk-topp">
@@ -119,6 +122,17 @@
</tr>
<tfoot>
<tbody>
+
+ <?php if(empty($positions)): ?>
+ <tr>
+ <td colspan="5" class="text-center">
+ <span class="label label-info">
+ <?php _e('There are not positions created yet!','rmcommon'); ?>
+ </span>
+ </td>
+ </tr>
+ <?php endif; ?>
+
<?php foreach($positions as $pos): ?>
<tr class="<?php echo tpl_cycle('even,odd'); ?>" id="ptr-<?php echo $pos['id']; ?>" valign="top">
<td align="center"><input type="checkbox" name="ids[]" id="itemp-<?php echo $pos['id']; ?>" value="<?php echo $pos['id']; ?>" /></td>
@@ -167,7 +181,7 @@
$("#position-<?php echo $pos['id']; ?>").nestable({
group: 1,
maxDepth: 1
- });
+ }).on('change', blocksAjax.saveOrder);
<?php endforeach; ?>
});
</script>
|