t('Album title'), 'field'=> 'n.title'),
array('data' => t('Image count'), 'field'=> 'p.count'),
array('data' => t('Link')),
array('data' => t('Create time'), 'field'=> 'n.nid', 'sort' => 'desc'),
);
$result = pager_query('SELECT n.*, p.count FROM {node} n INNER JOIN {x_album} p ON n.nid = p.pid WHERE n.uid = %d' .tablesort_sql($header), 20, 0, NULL, $user->uid);
while($node = db_fetch_object($result)){
$table[] = array(
l($node->title, 'node/'.$node->nid),
$node->count,
array(
'data' => l(t('Upload'), "node/$node->nid/photos") . l(t('View'), "photos/album/$node->nid") . l(t('Slideshow'), "photos/Slide/$node->nid"),
'class' => 'photos_album_edit_table_link'
),
format_date($node->created, 'small')
);
}
$v = drupal_get_form('photos_upload_form', 0, array('submit' => true));
if (empty($table)) {
$table[] = array(array('data' => t('Please create a album.'), 'colspan' => 4));
}else{
$v .= t('Or select an album: ');
}
$v .= theme('table', $header, $table);
$v .= theme('pager', NULL, 20);
return $v;
}
//图片上传
function photos_upload_form(& $form_state, $node = false, $edit = array()) {
global $user;
$form['new'] = array(
'#title' => t('Image upload'),
'#weight' => -4,
'#type' => 'fieldset',
'#collapsible' => TRUE,
'#description' => t('Allow the type:').' jpg gif png jpeg '.((variable_get('photos_upzip',0) && $_SESSION['photos_swfu_switch']) ? ' zip': NULL),
);
if($node->type == 'photos' || photos_get_count('user_album', $user->uid)){
for($i =0; $i < variable_get('photos_num',5); ++$i){
$form['new']['images_'.$i] = array(
'#type' => 'file'
);
$form['new']['title_'.$i] = array(
'#type'=> 'textfield',
'#title' => t('Image title'),
);
$form['new']['des_'.$i] = array(
'#type'=> 'textarea',
'#title' => t('Image description'),
'#cols' => 40,
'#rows' => 3,
);
}
}else{
drupal_set_message(t('You must first !create an album to upload images.', array('!create' => l(t('create'), 'node/add/photos', array('query' => drupal_get_destination())))));
return $form;
}
if($node->type == 'photos'){
$form['new']['pid'] = array(
'#type' => 'value',
'#value' => $node->nid
);
}else{
$form['new']['pid'] = array(
'#title' => t('Upload to album'),
'#type' => 'select',
'#options' => _photos_useralbum_option($user->uid),
'#default_value' => $_GET['pid'],
'#required' => TRUE,
'#prefix' => '
',
'#suffix' => '
',
'#weight' => -5,
);
$form['new']['nid'] = array(
'#type' => 'value',
'#value' => $node->nid
);
}
if($edit['submit']){
$form['new']['submit'] = array(
'#type' => 'submit',
'#value' => t('Confirm upload'),
'#weight' => 10,
'#submit' => array('photos_upload_form_submit'),
);
$form['#action'] = url($_GET['q'], array('query' => drupal_get_destination()));
$form['#attributes']['enctype'] = 'multipart/form-data';
}
return $form;
}
//hook_form_submit
function photos_upload_form_submit($form, & $form_state) {
global $user;
$limits = _upload_file_limits($user);
$validators = array(
'file_validate_is_image' => array(),
'file_validate_image_resolution' => array($limits['resolution']),
'file_validate_size' => array($limits['file_size'], $limits['user_size'])
);
$photos_num = variable_get('photos_num', 5);
for ($i = 0; $i < $photos_num; ++$i){
_photos_rename();
if($_FILES['files']['name']['images_'.$i]){
$value = new stdClass();
$value->pid = $form_state['values']['pid'];
$value->nid = $form_state['values']['nid'];
$value->des = $form_state['values']['des_'.$i];
$value->title = $form_state['values']['title_'.$i];
$ext = drupal_substr($_FILES['files']['name']['images_'.$i], -3);
if($ext != 'zip' && $ext != 'ZIP'){
if ($file = file_save_upload('images_'.$i, $validators, photos_check_path())) {
$msg[] = photos_image_date((object)array_merge((array)$file, (array)$value), 1);
}
}else{
if(!variable_get('photos_upzip',0)){
return form_set_error('errer', t('Please Album photos set to open zip upload'));
}
$zip = file_destination(file_create_path(photos_check_path() .'/'.trim(basename($_FILES['files']['name']['images_'.$i]))), FILE_EXISTS_RENAME);
if (move_uploaded_file($_FILES['files']['tmp_name']['images_'.$i], $zip)) {
if(!$msg = _photos_unzip($zip, $value, $limits)){
$msg = t('Failed to upload');
}
}
}
}
}
if(is_array($msg)){
return drupal_set_message(t('%count image(s) uploaded successfully.', array('%count'=> count($msg))));
}else{
return drupal_set_message($msg);
}
}
//图片管理
function photos_edit_page($node){
$output = ''.drupal_get_form('photos_upload_form', $node, array('submit' => true)).'
';
if($node->type == 'photos'){
$output .= _photos_edit_page_album($node);
drupal_set_title(t('Organize Albums: @title', array('@title' => check_plain($node->title))));
}else{
$output .= _photos_edit_page_node($node);
drupal_set_title(t('Organize Sub-Album: @title', array('@title' => check_plain($node->title))));
}
return $output;
}
function _photos_edit_page_node($node){
if($node->subalbum['count']){
$term = _photos_order_value($_GET['field'], $_GET['sort'], 10);
$result = pager_query('SELECT f.filepath, f.filemime, f.timestamp, f.filename, f.filesize, n.title, u.uid, u.name, p.* FROM {files} f INNER JOIN {x_image} p ON f.fid = p.fid INNER JOIN {node} n ON p.pid = n.nid INNER JOIN {users} u ON f.uid = u.uid INNER JOIN {x_node} a ON p.fid = a.fid WHERE a.nid = %d'. $term['order'], $term['limit'], 0, NULL, $node->nid);
$output .= _photos_order_link("node/$node->nid/photos", $node->subalbum['count'], l(t('Album view'), "photos/sub_album/$node->nid"), 1);
$output .= ''.t('Move image: Move out of the image, but it will not delete it.').'
';
}else{
return;
}
while($data = db_fetch_array($result)){
$images[] = photos_get_info(0, $data);
}
if($images[0]['fid']){
$images[0]['info'] = array(
'title' => $node->title,
'nid' => $node->nid,
'uid' => $node->uid
);
$output .= theme('pager', NULL, $term['limit']);
$output .= drupal_get_form('photos_editlist', $images, 'node');
$output .= theme('pager', NULL, $term['limit']);
}
return $output;
}
function _photos_edit_page_album($node){
if($node->album['count']){
$term = _photos_order_value($_GET['field'], $_GET['sort'], 10);
$result = pager_query('SELECT f.filepath, f.filemime, f.timestamp, f.filename, f.filesize, u.uid, u.name, p.* FROM {files} f INNER JOIN {x_image} p ON f.fid = p.fid INNER JOIN {users} u ON f.uid = u.uid WHERE p.pid = %d'. $term['order'], $term['limit'], 0, NULL, $node->nid);
$output .= _photos_order_link("node/$node->nid/photos", $node->album['count'], l(t('Album view'), "photos/album/$node->nid"), 1);
}else{
return;
}
while($data = db_fetch_array($result)){
$images[] = photos_get_info(0, $data);
}
if($images[0]['fid']){
$images[0]['info'] = array(
'cover' => $node->album['cover'],
'pid' => $node->nid,
'title' => $node->title,
'uid' => $node->uid
);
$output .= theme('pager', NULL, $term['limit']);
$output .= drupal_get_form('photos_editlist', $images);
$output .= theme('pager', NULL, $term['limit']);
}
return $output;
}
//2009/2/18 16:33
function photos_editlist(&$form_state, $images = array(), $type = 'album') {
global $user;
if($type == 'album'){
if($user->uid != $images[0]['info']['uid']) {
$albumUpdate = array($images[0]['info']['pid'], $images[0]['info']['title']);
}
$albumPid = _photos_useralbum_option($user->uid, $albumUpdate);
$delLabel = _photos_del_checkbox(0, t('Delete'));
$form['cover_fid'] = array('#type' => 'hidden', '#default_value' => $images[0]['info']['cover']['fid']);
$form['oldpid'] = array('#type' => 'hidden', '#default_value' => $images[0]['info']['pid']);
$submit = 'photos_editlist_submit';
}else{
$delLabel = _photos_del_checkbox(0, t('Move out'));
$submit = 'photos_editlist_submit_node';
$form['nid'] = array('#type' => 'hidden', '#default_value' => $images[0]['info']['nid']);
}
$form['photos']['#theme'] = 'photos_editlist_x';
$form['photos']['#tree'] = true;
$form['#action'] = url($_GET['q'], array('query' => drupal_get_destination(). (isset($_GET['page']) ? '&page=' . intval($_GET['page']): NULL)));
$thumb = variable_get('photos_title_0', false);
foreach ($images as $image) {
$form['photos'][$image['fid']]['del'] = $delLabel;
$image['user']->uid = $image['uid'];
$image['user']->name = $image['name'];
$item = array();
$item[] = theme('photos_imagehtml', $image['thumb'][$thumb], array('href' => 'photos/image/'.$image['fid']));
if($type == 'album' && $images[0]['info']['cover']['fid'] != $image['fid']){
$item[] = l(t('Set to Cover'),"node/$image[pid]/photos/cover/$image[fid]");
}
$item[] = t('Filesize: !size KB', array('!size' => round($image['filesize']/1024)));
if($image['count']){
$item[] = t('Visits: !count', array('!count' => $image['count']));
}
if($image['comcount']){
$item[] = t('Comments: !count', array('!count' => $image['comcount']));
}
$form['photos'][$image['fid']]['path']['#value'] = theme('item_list', $item);
$form['photos'][$image['fid']]['des'] = array(
'#title' => t('Image description'),
'#type' => 'textarea',
'#default_value' => preg_replace('/<.*?>/', '', $image['des']),
'#cols' => 40,
'#rows' => 4
);
$form['photos'][$image['fid']]['filename'] = array(
'#title' => t('Image title'),
'#type' => 'textfield',
'#default_value' => $image['filename'],
'#required' => TRUE
);
$form['photos'][$image['fid']]['wid'] = array(
'#title' => t('Weight'),
'#type' => 'weight',
'#default_value' => $image['wid'],
'#delta' => 100,
);
$form['photos'][$image['fid']]['filepath'] = array('#type' => 'value','#value' => $image['filepath']);
if($type == 'album'){
$uploadInfo = t('Uploaded on !time by !name', array('!name' => theme('username', $image['user']), '!time' => format_date($image['timestamp'], 'small')));
$form['photos'][$image['fid']]['pid'] = array(
'#title' => t('Move to the album'),
'#type' => 'select',
'#options' => $albumPid,
'#default_value' => $image['pid'],
'#required' => TRUE
);
}else{
$uploadInfo = t('!name in !time upload to !title', array('!name' => theme('username', $image['user']), '!time' => format_date($image['timestamp'], 'small'), '!title' => l($image['title'], 'node/'.$image['pid'])));
}
$form['photos'][$image['fid']]['time']['#value'] = $uploadInfo;
$form['photos'][$image['fid']]['uid'] = array('#type' => 'hidden', '#default_value' => $image['uid']);
$form['photos'][$image['fid']]['oldfilename'] = array('#type' => 'hidden', '#default_value' => $image['filename']);
};
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Confirm the change'),
'#submit' => array($submit),
);
return $form;
}
//节点下提交处理
function photos_editlist_submit_node($form, &$form_state) {
foreach($form_state['values']['photos'] as $fid => $key) {
if (!empty($key['del'])) {
$msg[] = db_query('DELETE FROM {x_node} WHERE fid = %d', $fid);
}else{
db_query("UPDATE {x_image} SET des = '%s', wid = %d WHERE fid = %d", $key['des'], $key['wid'], $fid);
if($key['filename'] != $key['oldfilename']){
db_query("UPDATE {files} SET filename = '%s' WHERE fid = %d", check_plain($key['filename']), $fid);
}
}
}
if($msg) {
photos_set_count('node_node', $form_state['values']['nid']);
drupal_set_message(t('%count images are move out.', array('%count' => count($msg))));
}
}
//相册下提交处理
function photos_editlist_submit($form, &$form_state) {
foreach($form_state['values']['photos'] as $fid => $key) {
if (!empty($key['del'])) {
if($form_state['values']['cover_fid'] == $fid){
db_query('UPDATE {x_album} SET fid = 0 WHERE pid = %d', $form_state['values']['oldpid']);
}
$msg[] = photos_file_del($fid, $key['filepath']);
$uids[] = $key['uid'];
}else{
db_query("UPDATE {x_image} SET pid = %d, des = '%s', wid = %d WHERE fid = %d", $key['pid'], $key['des'], $key['wid'], $fid);
if($key['filename'] != $key['oldfilename']){
db_query("UPDATE {files} SET filename = '%s' WHERE fid = %d", check_plain($key['filename']), $fid);
}
if ($key['pid'] != $form_state['values']['oldpid']) {
db_query('UPDATE {comments} SET nid = %d WHERE cid IN (SELECT cid FROM {x_vote} WHERE fid = %d)', $key['pid'], $fid);
$pid[] = $key['pid'];
$uids[] = $key['uid'];
}
}
}
if($msg) {
$pid[] = $form_state['values']['oldpid'];
drupal_set_message(t('%count images are deleted.', array('%count' => count($msg))));
}
if(count($pid)){
foreach($pid as $nid){
_comment_update_node_statistics($nid);
photos_set_count('node_album', $nid);
}
$uid = array_unique($uids);
foreach ($uid as $id){
photos_set_count('user_image', $id);
}
}
}
function _photos_del_checkbox($t = 0, $title = false){
if($t){
return (($t == 1) ? t('Delete') : $t).'';
}else{
return array('#title' => $title, '#type' => 'checkbox', '#prefix' => '', '#suffix' => '
');
}
}
function theme_photos_editlist_x($form) {
$header = array(
array('data' => _photos_del_checkbox(t('Select All'))),
array('data' => t('Thumbnails')),
array('data' => t('Content')),
);
foreach (element_children($form) as $key) {
$rows[] = array(
drupal_render($form[$key]['wid']) . drupal_render($form[$key]['del']),
array(
'data' => drupal_render($form[$key]['path']),
'class' => 'photos_edit_thumb'
),
''.drupal_render($form[$key]['filename']) .'
'. drupal_render($form[$key]['des']) . '
'.drupal_render($form[$key]['time']) . drupal_render($form[$key]['pid']) .'
'
);
}
if(!$rows){
$rows[] = array(array('data' => t('No image'), 'colspan' => '3'));
}
$output = theme('table', $header, $rows, array('id' => 'photos_album_edit'));
return $output;
}
//设置封面
function photos_edit_cover($node, $fid){
$pid = db_result(db_query('SELECT pid FROM {x_image} WHERE fid = %d', $fid));
if($pid == $node->nid){
db_query('UPDATE {x_album} SET fid = %d WHERE pid = %d', $fid, $node->nid);
drupal_set_message(t('Cover successfully set.'));
$goto = $_GET['destination'] ? $_GET['destination'] : "node/$node->nid/photos";
return drupal_goto($goto);
}else{
drupal_not_found();
}
}
//ajax更新图片信息
//2009/2/18 1:12
function photos_edit_update($fid){
drupal_set_header('Content-Type: text/plain;');
if($value = trim($_POST['value'])){
switch(arg(4)){
case 'filename':
db_query("UPDATE {files} SET filename = '%s' WHERE fid = %d", $value, $fid);
echo $value;
break;
case 'des':
db_query("UPDATE {x_image} SET des = '%s' WHERE fid = %d", $value, $fid);
echo check_markup($value, 0, FALSE);
break;
case 'del':
echo photos_file_del($fid, 0, 1);
}
}
}
//ajax删除单张图片
//2009/2/24 22:27
function photos_edit_delete($fid){
if($_GET['type'] != 'sub_album'){
$v = photos_file_del($fid, 0, 1);
if($_GET['pid'] && intval($_GET['pid']) == $_GET['pid']) photos_set_count('node_album', $_GET['pid']);
if($_GET['uid'] && intval($_GET['uid']) == $_GET['uid']) photos_set_count('user_image', $_GET['uid']);
}else{
$v = db_query('DELETE FROM {x_node} WHERE fid = %d', $fid);
if($_GET['nid'] && intval($_GET['nid']) == $_GET['nid']) photos_set_count('node_node', $_GET['nid']);
}
if($_GET['go'] == 1){
drupal_set_header('Content-Type: text/plain;');
echo $v;
}else if($v){
drupal_set_message(t('Delete success'));
return drupal_goto();
}else{
drupal_set_message(t('Delete failure'));
return drupal_goto('photos/image/'.$fid);
}
}
//发送到子相册
//2009/2/28 1:03
function photos_edit_to_sub($fid){
global $user;
$content = drupal_get_form('_photos_to_sub', $fid);
$content .= theme('pager', NULL, 50);
print theme('photos_print', $content);
}
function _photos_to_sub(& $form_state, $fid){
$select_type = _photos_select_sub_album();
if($select_type[0]){
$form['title']['#value'] = ''.t('Please select sub-album: ').'
';
$result = db_query('SELECT nid FROM {x_node} WHERE fid = %d', $fid);
while ($sub = db_fetch_object($result)){
$select_sub[] = $sub->nid;
}
if(!$select_sub[0]) $select_sub[0] = 0;
$result = pager_query('SELECT nid, title FROM {node} WHERE type IN ('.implode(',', $select_type).') AND nid NOT IN ('.implode(',', $select_sub).')', 50, 0);
$form['sub']['#tree'] = true;
$true = false;
while($node = db_fetch_object($result)){
$form['sub'][$node->nid] = array(
'#type' => 'checkbox',
'#title' => l($node->title, 'node/'.$node->nid, array('attributes' => array('target' => '_blank'))),
);
$true = true;
}
if($true){
$form['fid'] = array(
'#type' => 'value',
'#value' => $fid
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Send confirmation'),
'#submit' => array('_photos_to_sub_submit')
);
}else{
$form['help']['#value'] = t('You do not have can be used to receive a subset of the album.');
}
}else{
$form['help']['#value'] = t('Sub-album feature is not turned on.');
}
return $form;
}
function _photos_to_sub_submit($form, &$form_state){
if(!$form_state['values']['fid']) return;
foreach($form_state['values']['sub'] as $key => $sub){
if($sub){
$into[] = '('.$key.','.$form_state['values']['fid'].')';
$nids[] = $key;
}
}
if($into[0]){
db_query('INSERT INTO {x_node} (nid, fid) VALUES '.implode(',', $into));
foreach($nids as $nid){
photos_set_count('node_node', $nid);
}
drupal_set_message(t('Successfully sent the %count sub-album', array('%count' => count($into))));
}
}