YUI Editorのアップロード先をユーザーごとに分ける
DrupalでYUI Editorのファイルアップロード機能を使っているが、何でもかんでも同じディレクトリにアップロードされるので困ったことがあった。
他の人が同じファイル名のファイルをアップロードすると、上書きされてしまうのだ。単純にアップロードだけの機能なので当然といえば当然だが、困ったことになる。
たとえば誰かがcat.jpgみたいなファイルをアップしてブログの記事を書いてあり、その後しばらく経ってから他人がまったく同じファイル名cat.jpg(もちろんぜんぜん違う猫の写真)をアップロードすると、過去に書かれた他所のブログの中にある猫の写真も差し替わってしまう。
それは非常にまずいので、アップロードする際にログイン中のユーザーのIDをディレクトリに挿入できるようにしてみた。
/sites/default/files/cat.jpg
の代わりに、
/sites/default/files/1/cat.jpg <= この「1」はユーザーのID
とできるように。
以下、yui_editor.moduleよりソースを引用。
/** * Menu-callback for JavaScript-based uploads. */ function yui_editor_image_upload() { header("content-type: text/html"); // the return type must be text/html $response = null; $path = file_directory_path(); //Append trailing slash to path if not there if (! (substr($path, -1) == '/')) { $path .= '/'; } $path .= 'images'; ///// customized! ///// $path .= '/'.$GLOBALS['user']->uid ; $file = file_save_upload('upload', array(), $path, FILE_EXISTS_REPLACE); if (!$file) { $response->status = 'Error Reading Uploaded File.'; print drupal_to_js($response); exit; } $response->status = 'UPLOADED'; $response->image_url = $file->filepath; print drupal_to_js($response); exit; }
///// customized! /////と書いてある次の行に、
$GLOBALS['user']->uid
というのを$pathに追加した。
これでスクリーンショットにあるようなパスが自動的に追加される。