DrupalBin
Submit Code
About
Recent Posts
Code
Fix for Fix for Code
Fix for Code
Code
Node type whitelist
an axe coach accessories
coach purses married
Fix for de las ghd alturas
de las ghd alturas
Code
more
User login
Log in using OpenID:
What is OpenID?
Username:
*
Password:
*
Log in using OpenID
Cancel OpenID login
Create new account
Request new password
Tags
CCK
drupal
fapi
jquery
menu
module
php
simpletest
taxonomy
test
theme
views
more tags
Home
Fix for nodequeuelock.module
View
Fix
August 19, 2010 - 9:00pm — Anonymous
<?php
/*
* hook_nodequeue_add
*/
function
nodequeuelock_nodequeue_add
(
$sqid
,
$nid
)
{
nodequeuelock_enforce
(
$sqid
,
$nid
)
;
}
/*
* hook_nodequeue_remove
*/
function
nodequeuelock_nodequeue_remove
(
$sqid
,
$nid
)
{
nodequeuelock_enforce
(
$sqid
,
$nid
)
;
}
/*
* Ensure that everything is where it should be and stuff
*/
function
nodequeuelock_enforce
(
$sqid
,
$nid
)
{
$subqueue
= nodequeue_load_subqueue
(
$sqid
)
;
$queue
= nodequeue_load
(
$subqueue
-
>
qid
)
;
$nodes
= nodequeuelock_load_queue
(
$sqid
)
;
$sql
=
db_query
(
"SELECT * FROM {nodequeue_lock} WHERE sqid = %d AND locked = 1"
,
$sqid
)
;
while
(
$result
=
db_fetch_object
(
$sql
)
)
{
$locked
[
$result
-
>
nid
]
=
$result
-
>
position
;
}
foreach
(
$locked
as
$nid
=
>
$position
)
{
$nodes
= nodequeuelock_load_queue
(
$sqid
)
;
// sometimes our node was removed
if
(
!
$nodes
[
$nid
]
)
{
nodequeue_subqueue_add
(
$queue
,
$subqueue
,
$nid
)
;
$nodes
= nodequeuelock_load_queue
(
$sqid
)
;
}
$suspect_nid
=
array_search
(
$locked
[
$nid
]
,
$nodes
)
;
// and sometimes its been misplaced
if
(
$suspect_nid
!
=
$nid
)
{
$new_position
=
$nodes
[
$nid
]
;
if
(
!
$new_position
)
{
while
(
$i
<
$queue
-
>
size
)
{
$i
++;
$exists
=
array_search
(
$i
,
$nodes
)
;
if
(
!
$exists
)
{
$new_postion
=
$i
;
}
}
}
db_query
(
"UPDATE {nodequeue_nodes} SET position = %d WHERE nid = %d AND sqid = %d"
,
$new_position
,
$suspect_nid
,
$sqid
)
;
}
db_query
(
"UPDATE {nodequeue_nodes} SET position = %d WHERE nid = %d AND sqid = %d"
,
$locked
[
$nid
]
,
$nid
,
$sqid
)
;
}
}
function
nodequeuelock_form_alter
(
&
$form
,
&
$form_state
,
$form_id
)
{
switch
(
$form_id
)
{
case
'nodequeue_arrange_subqueue_form'
:
$sql
=
db_query
(
"SELECT * FROM {nodequeue_lock} WHERE sqid = %d"
,
$form
[
'#subqueue'
]
[
'sqid'
]
)
;
while
(
$result
=
db_fetch_object
(
$sql
)
)
{
$locked
[
$result
-
>
nid
]
[
$result
-
>
position
]
=
$result
-
>
locked
;
}
$form
[
'sqid'
]
=
array
(
'#type'
=
>
'hidden'
,
'#value'
=
>
$form
[
'#subqueue'
]
[
'sqid'
]
)
;
foreach
(
element_children
(
$form
)
as
$key
)
{
if
(
$form
[
$key
]
[
'#node'
]
)
{
$nid
=
$form
[
$key
]
[
'#node'
]
[
'nid'
]
;
$pos
=
$form
[
$key
]
[
'position'
]
[
'#default_value'
]
;
$form
[
$key
]
[
'title'
]
[
'lock'
]
=
array
(
'#type'
=
>
'checkbox'
,
'#title'
=
>
'Lock'
,
'#default_value'
=
>
$locked
[
$nid
]
[
$pos
]
)
;
}
}
$form
[
'#submit'
]
[
]
=
'nodequeuelock_subqueue_form_submit'
;
break
;
}
}
function
nodequeuelock_subqueue_form_submit
(
&
$form
,
&
$form_state
)
{
foreach
(
$form_state
[
'values'
]
as
$nid
=
>
$value
)
{
if
(
is_numeric
(
$nid
)
)
{
$update
=
null
;
$result
=
db_fetch_object
(
db_query
(
"SELECT * FROM {nodequeue_lock} WHERE sqid = %d AND nid = %d"
,
$form_state
[
'values'
]
[
'sqid'
]
,
$nid
)
)
;
if
(
$result
-
>
sqid
)
{
$update
=
array
(
'sqid'
,
'nid'
,
'position'
)
;
}
$record
=
array
(
'sqid'
=
>
$form_state
[
'values'
]
[
'sqid'
]
,
'nid'
=
>
$nid
,
'position'
=
>
$form_state
[
'values'
]
[
$nid
]
[
'position'
]
,
'locked'
=
>
$form_state
[
'values'
]
[
$nid
]
[
'title'
]
[
'lock'
]
,
'expire'
=
>
time
(
)
+
(
3600
*
48
)
)
;
drupal_write_record
(
'nodequeue_lock'
,
$record
,
$update
)
;
}
}
}
function
nodequeuelock_load_queue
(
$sqid
)
{
$sql
=
db_query
(
"
SELECT n.nid, nn.position FROM {node} n
INNER JOIN {nodequeue_nodes} nn ON n.nid = nn.nid
WHERE nn.sqid = %d
ORDER BY nn.position DESC"
,
$sqid
)
;
while
(
$result
=
db_fetch_object
(
$sql
)
)
{
$nodes
[
$result
-
>
nid
]
=
$result
-
>
position
;
}
return
$nodes
;
}
function
nodequeuelock_schema
(
)
{
$schema
=
array
(
)
;
$schema
[
'nodequeue_lock'
]
=
array
(
'description'
=
>
t
(
'Indicates which nodes should remain locked in position'
)
,
'fields'
=
>
array
(
'sqid'
=
>
array
(
'description'
=
>
t
(
'Subqueue this node is in'
)
,
'type'
=
>
'int'
,
'unsigned'
=
>
TRUE
,
'not null'
=
>
TRUE
,
)
,
'position'
=
>
array
(
'description'
=
>
t
(
'The position of the node in this subqueue.'
)
,
'type'
=
>
'int'
,
'unsigned'
=
>
TRUE
,
'not null'
=
>
FALSE
)
,
'nid'
=
>
array
(
'description'
=
>
t
(
'The position of the node in this subqueue.'
)
,
'type'
=
>
'int'
,
'unsigned'
=
>
TRUE
,
'not null'
=
>
FALSE
)
,
'locked'
=
>
array
(
'description'
=
>
t
(
'The position of the node in this subqueue.'
)
,
'type'
=
>
'int'
,
'unsigned'
=
>
TRUE
,
'not null'
=
>
FALSE
)
,
'expire'
=
>
array
(
'description'
=
>
t
(
''
)
,
'type'
=
>
'int'
,
'unsigned'
=
>
TRUE
,
'not null'
=
>
TRUE
,
'default'
=
>
0
,
)
,
)
,
// fields
'primary key'
=
>
array
(
'sqid'
,
'nid'
)
)
;
// nodequeue_nodes
return
$schema
;
}
function
nodequeuelock_install
(
)
{
drupal_install_schema
(
'nodequeuelock'
)
;
}
function
nodequeuelock_uninstall
(
)
{
drupal_uninstall_schema
(
'nodequeuelock'
)
;
}
module
Submit Fix
Summary:
Tags:
Any tags you'd like to associate with your code, delimitered by commas (example: Views, CCK, Module, etc).
Show summary in full view
<?php /* * hook_nodequeue_add */ function nodequeuelock_nodequeue_add($sqid, $nid) { nodequeuelock_enforce($sqid, $nid); } /* * hook_nodequeue_remove */ function nodequeuelock_nodequeue_remove($sqid, $nid) { nodequeuelock_enforce($sqid, $nid); } /* * Ensure that everything is where it should be and stuff */ function nodequeuelock_enforce($sqid, $nid) { $subqueue = nodequeue_load_subqueue($sqid); $queue = nodequeue_load($subqueue->qid); $nodes = nodequeuelock_load_queue($sqid); $sql = db_query("SELECT * FROM {nodequeue_lock} WHERE sqid = %d AND locked = 1",$sqid); while($result = db_fetch_object($sql)) { $locked[$result->nid] = $result->position; } foreach($locked as $nid => $position) { $nodes = nodequeuelock_load_queue($sqid); // sometimes our node was removed if(!$nodes[$nid]) { nodequeue_subqueue_add($queue, $subqueue, $nid); $nodes = nodequeuelock_load_queue($sqid); } $suspect_nid = array_search($locked[$nid],$nodes); // and sometimes its been misplaced if($suspect_nid != $nid) { $new_position = $nodes[$nid]; if(!$new_position) { while($i < $queue->size) { $i++; $exists = array_search($i,$nodes); if(!$exists) { $new_postion = $i; } } } db_query("UPDATE {nodequeue_nodes} SET position = %d WHERE nid = %d AND sqid = %d",$new_position, $suspect_nid, $sqid); } db_query("UPDATE {nodequeue_nodes} SET position = %d WHERE nid = %d AND sqid = %d", $locked[$nid], $nid, $sqid); } } function nodequeuelock_form_alter(&$form, &$form_state, $form_id) { switch($form_id) { case 'nodequeue_arrange_subqueue_form': $sql = db_query("SELECT * FROM {nodequeue_lock} WHERE sqid = %d",$form['#subqueue']['sqid']); while($result = db_fetch_object($sql)) { $locked[$result->nid][$result->position] = $result->locked; } $form['sqid'] = array( '#type' => 'hidden', '#value' => $form['#subqueue']['sqid'] ); foreach(element_children($form) as $key) { if($form[$key]['#node']) { $nid = $form[$key]['#node']['nid']; $pos = $form[$key]['position']['#default_value']; $form[$key]['title']['lock'] = array( '#type' => 'checkbox', '#title' => 'Lock', '#default_value' => $locked[$nid][$pos] ); } } $form['#submit'][] = 'nodequeuelock_subqueue_form_submit'; break; } } function nodequeuelock_subqueue_form_submit(&$form, &$form_state) { foreach($form_state['values'] as $nid => $value) { if(is_numeric($nid)) { $update = null; $result = db_fetch_object(db_query("SELECT * FROM {nodequeue_lock} WHERE sqid = %d AND nid = %d", $form_state['values']['sqid'], $nid)); if($result->sqid) { $update = array('sqid', 'nid','position'); } $record = array( 'sqid' => $form_state['values']['sqid'], 'nid' => $nid, 'position' => $form_state['values'][$nid]['position'], 'locked' => $form_state['values'][$nid]['title']['lock'], 'expire' => time() + (3600 * 48) ); drupal_write_record('nodequeue_lock', $record, $update); } } } function nodequeuelock_load_queue($sqid) { $sql = db_query(" SELECT n.nid, nn.position FROM {node} n INNER JOIN {nodequeue_nodes} nn ON n.nid = nn.nid WHERE nn.sqid = %d ORDER BY nn.position DESC", $sqid ); while($result = db_fetch_object($sql)) { $nodes[$result->nid] = $result->position; } return $nodes; } function nodequeuelock_schema() { $schema = array(); $schema['nodequeue_lock'] = array( 'description' => t('Indicates which nodes should remain locked in position'), 'fields' => array( 'sqid' => array( 'description' => t('Subqueue this node is in'), 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, ), 'position' => array( 'description' => t('The position of the node in this subqueue.'), 'type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE ), 'nid' => array( 'description' => t('The position of the node in this subqueue.'), 'type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE ), 'locked' => array( 'description' => t('The position of the node in this subqueue.'), 'type' => 'int', 'unsigned' => TRUE, 'not null' => FALSE ), 'expire' => array( 'description' => t(''), 'type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'default' => 0, ), ), // fields 'primary key' => array('sqid','nid') ); // nodequeue_nodes return $schema; } function nodequeuelock_install() { drupal_install_schema('nodequeuelock'); } function nodequeuelock_uninstall() { drupal_uninstall_schema('nodequeuelock'); }
Syntax highlighting mode:
ActionScript
ColdFusion
Diff
Drupal 5
Drupal 6
HTML
INI
Javascript
MySQL
PHP
Python
robots.txt
SQL
Text
Select the syntax highlighting mode to use.
See Also:
Order
Title:
URL:
-1
0
1
Title:
URL:
-1
0
1
Any links you'd like to have associated with the post (Drupal.org issue, Wikipedia article, etc).
File attachments
Changes made to the attachments are not permanent until you save this post. The first "listed" file will be included in RSS feeds.
Attach new file:
The maximum upload size is
1 MB
. Only files with the following extensions may be uploaded:
jpg jpeg gif png txt doc xls pdf ppt pps odt ods odp phps
.