'Get Image', 'page callback' => 'drupal_get_form', 'page arguments' => array('get_image_settings_form'), 'access callback' => 'user_access', 'access arguments' => array('access administration pages'), 'type' => MENU_NORMAL_ITEM ); return $items; } /** * Implementation of hook_nodeapi() */ function get_image_nodeapi(&$node, $op) { switch ($op) { case 'view': //drupal_set_message(t('view')); //drupal_set_message(t('view %nid',array('%nid' => $nodeId))); break; case 'update': //drupal_set_message(t('update')); //drupal_set_message(t('update @nid',array('@nid' => $node->nid))); case 'presave': //drupal_set_message(t('presave')); if( $node->status == '1' && variable_get('get_image_'.$node->type, 0) && $node->body){ variable_set('get_image_nid',$node->nid); //drupal_set_message(t('presave @nid',array('@nid' => $node->nid))); $node->body = preg_replace_callback('/(<[iI][mM][gG].*?[sS][rR][cC]=["])(.*?)["]/ms', '_get_image_save_double', $node->body); $node->body = preg_replace_callback('/(<[iI][mM][gG].*?[sS][rR][cC]=[\'])(.*?)[\']/ms', '_get_image_save_simple', $node->body); $node->teaser = node_teaser($node->body, isset($node->format) ? $node->format : NULL); } break; default: //drupal_set_message(t('default')); //drupal_set_message(t('default @nid',array('@nid' => $node->nid))); break; } } /** * Implementation of hook_form_alter() * 节点表单中提供一个可选按钮 */ /* function get_image_form_alter(&$form, $form_state, $form_id) { if ($form['#id'] == 'node-form' && isset($form['#node']->type) && variable_get('get_image_'.$form['#node']->type, 0)) { $form['get_image_image'] = array( '#type' => 'checkbox', '#title' => t('Save remote image'), '#weight' => -1 ); } } **/ /** * save image * 分析内容中的 img 标签,将远程图片保存到本地服务器 */ function _get_image_save_simple($mat){ static $files; //drupal_set_message(t('get_image_save ,@nid ,@nodeId ,@varGetImg',array('@nid'=>$node->nid,'@nodeId' => $nodeId, '@varGetImg' => variable_get('get_image_nid',0)))); if(!isset($files[$mat[2]])){ if(!strstr($mat[2], $GLOBALS['base_url']) && strstr($mat[2], 'http://')){ if($data = @file_get_contents($mat[2])){ $filename = end(explode('/', $mat[2])); if(variable_get('get_image_rename', 0)){ $filename = md5($filename) .'.'. end(explode('.', $filename)); } if($path = get_image_path()){ $file = file_save_data($data, $path.'/'.$filename); drupal_set_message(t('Save "@name" success. @path', array('@name' => $mat[2], '@path' => $path))); if(variable_get('get_image_absolute', 0)){ $file = $GLOBALS['base_url'] . $GLOBALS['base_path'] . $file; }else{ $file = $GLOBALS['base_path'] . $file; } $files[$mat[2]] = $mat[1] . $file.'\''; }else{ drupal_set_message(t('Save "@name" failed', array('@name' => $mat[2])), 'error'); $files[$mat[2]] = $mat[0]; } }else{ $files[$mat[2]] = $mat[0]; } }else{ $files[$mat[2]] = $mat[0]; } } return $files[$mat[2]]; } /** * save image * 分析内容中的 img 标签,将远程图片保存到本地服务器 */ function _get_image_save_double($mat){ static $files; //drupal_set_message(t('get_image_save ,@nid ,@nodeId ,@varGetImg',array('@nid'=>$node->nid,'@nodeId' => $nodeId, '@varGetImg' => variable_get('get_image_nid',0)))); if(!isset($files[$mat[2]])){ if(!strstr($mat[2], $GLOBALS['base_url']) && strstr($mat[2], 'http://')){ if($data = @file_get_contents($mat[2])){ $filename = end(explode('/', $mat[2])); if(variable_get('get_image_rename', 0)){ $filename = md5($filename) .'.'. end(explode('.', $filename)); } if($path = get_image_path()){ $file = file_save_data($data, $path.'/'.$filename); drupal_set_message(t('Save "@name" success. @path', array('@name' => $mat[2], '@path' => $path))); if(variable_get('get_image_absolute', 0)){ $file = $GLOBALS['base_url'] . $GLOBALS['base_path'] . $file; }else{ $file = $GLOBALS['base_path'] . $file; } $files[$mat[2]] = $mat[1] . $file.'"'; }else{ drupal_set_message(t('Save "@name" failed', array('@name' => $mat[2])), 'error'); $files[$mat[2]] = $mat[0]; } }else{ $files[$mat[2]] = $mat[0]; } }else{ $files[$mat[2]] = $mat[0]; } } return $files[$mat[2]]; } /** * create folder * 创建文件夹 */ function get_image_path() { global $user; $path = array(); if(!variable_get('get_image_path', 0)){ $path[] = 'get_image'; }else{ $mm = format_date(time(), 'custom', "Y|m|d"); $m = explode('|', $mm); $a = array('%uid' => $user->uid, '%username' => $user->name, '%Y' => $m[0], '%m' => $m[1], '%d' => $m[2], '%nid' => variable_get('get_image_nid',0)); $b = strtr(variable_get('get_image_path', 'get_image'), $a); $path = explode('/',$b); } $dirs = array(); foreach($path as $folder) { $dirs[] = $folder; $t = file_create_path(file_directory_path().'/' .implode("/", $dirs)); if (!file_check_directory($t, FILE_CREATE_DIRECTORY)) { return false; } } return file_directory_path().'/' .$b; } /** * settings * 设置图片保存位置 */ function get_image_settings_form() { $form['get_image_path'] = array( '#type'=> 'textfield', '#title' => t('Path of saving'), '#default_value' => variable_get('get_image_path', 'get_image'), '#description' => t('The path where the files should be saved, may save by user id or user name or time, e.g.: get_image/%uid or photos/%username or image/%Y/%m/%d. Available variables: %uid, %username, %Y, %m, %d, %nid ¿?.'), '#size' => '40', '#required' => TRUE, ); $form['get_image_absolute'] = array( '#title' => t('Absolute path'), '#type' => 'checkbox', '#description' => t('View %absolute or %relative', array('%absolute' => $GLOBALS['base_url'] . $GLOBALS['base_path'] . 'files/1.jpg', '%relative' => $GLOBALS['base_path'] . 'files/1.jpg')), '#default_value' => variable_get('get_image_absolute', 0), ); $form['get_image_rename'] = array( '#title' => t('Image Rename'), '#type' => 'checkbox', '#description' => t('e.g: md5("imagename");'), '#default_value' => variable_get('get_image_rename', 0), ); $types = node_get_types(); foreach ($types as $type){ $form['get_image_'.$type->type] = array( '#title' => $type->name, '#type' => 'checkbox', '#default_value' => variable_get('get_image_'.$type->type, 0), ); } return system_settings_form($form); }