Membuat Web Collaboration dengan Drupal

26 10 2007

Dua minggu ini saya sedang dapet kerjaan untuk membuat web collaboration antar project manager dan Improvement team. Beberapa fitur yang harus tersedia kurang lebih adalah access control, forum, event, dan berbagai jenis content lain seperti announcement, best practice project, dan lain lain. Akhirnya saya memutuskan untuk menggunakan Drupal. Flexibility adalah alasan utama kenapa memilih Drupal. Kalo search di google juga akan ketemu beberapa alasan memilih drupal.

Beberapa solusi diatas bisa diatasi dengan menggunakan module yang ada, beberapa top module pilihan bisa dilihat disini dan disini.

Salah satu fitur adalah setiap user yang terdaftar dalam web ini harus mendapatkan notifikasi imel jika terdapat content terbaru. Dan juga sebaliknya, user harus bisa melakukan posting melalui email untuk masuk sebagai content di web. Hal ini penting jika server down atau malah user lebih suka interaksi melalui email. Hal ini bisa dilakukan dengan module workflow dan actions. Atau video tutorialnya yang detail bisa dilihat disini. Untuk bisa mengirim imel module smtp harus diaktifkan terlebih dahulu. Dan untuk menerima posting dari email bisa menggunakan module mailhandler. Tutorial mailhandler bisa dilihat disini.

Kendala utamanya adalah bagaimana module ini meng-handle attachment? Dan ini sifatnya harus dua arah,
pertama, user bisa mengirim attachment via imel sehingga content memiliki file (file diupload ke server),
kedua, user yg posting content dengan attachment melalui web dapat diterima oleh user lain (melalui email client) untuk mendapatkan attachment tsb (tanpa harus ke website).

Sedangkan module diatas hanya bisa mengirimkan imel ke user berupa judul, teaser, isi, dan url dari posting terbaru. Dan tidak bisa menerima attachment. Masalah yang pertama bisa langsung diatasi dengan menggunakan module mailsave. Sehingga setiap postingan via email yang ada attachmentnya akan diupload juga ke server.

Masalah kedua lebih rumit dan harus memodifikasi module actions. Saya mau apply patch ini ke tim drupal agar bisa dipertimbangkan, tapi ga tau caranya :) . Patch ini terinspirasi dari module mailattach, yang bisa merupakan extend dari module contact. Kelebihannya adalah mampu mengirimkan attachment.

Langsung saja,
1. Masuk ke directory modules/actions
2. Buka file actions.inc
3. Ganti case ‘do’ pada function action_send_email() dengan ini,

 case 'do':
      // note this is the user who owns the node, not global $user
      <strong>$headers    = array();</strong>
      $user = user_load(array('uid' => $node->uid));
      $site_name = variable_get('site_name', 'Drupal');
      $from = variable_get('site_mail', ini_get('sendmail_from'));
      $subject = $edit['subject'];
      <strong>$body = $edit['message'];</strong>

      if ($edit['recipient'] == t('%author')) {
        $recipient = $user->mail;
      } else {
        $recipient = $edit['recipient'];
      }
      if (isset($node) && is_object($node)) {

        $variables = array(
          '%site_name' => $site_name,
          '%username' => $user->name,
          '%uid' => $node->uid,
          '%node_url' => url('node/' . $node->nid, NULL, NULL, TRUE),
          '%node_type' => $node->type,
          '%title' => $node->title,
          '%teaser' => strip_tags($node->teaser),
          '%body' => strip_tags($node->body)

        );

        $subject = strtr($subject, $variables);
        $subject = str_replace(array("\r", "\n"), '', $subject);
        <strong>$body = strtr($body, $variables);</strong>

	<strong>// Prepare attachment
        $trenner  = md5(uniqid(time()));
	$headers  = array('Content-Type' => "multipart/mixed; boundary=$trenner");
	$message  = "\n--$trenner\n";
	$message .= "Content-Type: text/plain; charset=UTF-8; format=flowed;"."\n\n"; // sets the mime type
	$message .= $body."\n";
	$message .= "\n\n";

	// Check any uploaded files to attach
        foreach ($node->files as $file) {
	   if($file->filename){
                 $file->filepath = str_replace("\\","\\\\",$file->filepath);
	        $message  .= "--$trenner"."\n";
	        $message  .= "Content-Type:$file->filemime;\n\tname=$file->filename\n";
	        $message  .= "Content-Transfer-Encoding: base64\n";
	        $message  .= "Content-Disposition: attachment;\n\tfilename=$file->filename\n\n";
	        $filedata  = fread(fopen($file->filepath, "rb"), $file->filesize);
	        $message  .= chunk_split(base64_encode($filedata));
	        $message  .= "\n\n";
           }
	} 

        $message .= "--$trenner--";
      }</strong>

      if (drupal_mail('action_send_email', $recipient, $subject, $message, $from, <strong>$headers</strong>)) {
        watchdog('action', t('Sent email to %recipient', array('%recipient' => $recipient)));
      }
      else {
        watchdog('error', t('Unable to send email to %recipient', array('%recipient' => $recipient)));
      }
      break;

Baris yang dicetak tebal adalah baris yang saya tambahkan. Pada kode diatas saya menambahkan variable $headers untuk menyimpan informasi header dan mengecek apakah node tersebut mempunyai attachment atau tidak. Jika ada maka diproses seluruhnya. Sehingga patch ini juga mendukung beberapa file attachment dengan berbagai format. Setelah itu mengirimkan message melalui drupal_mail.

Selamat mencoba :)

Bonus:
Tutorial Drupal Lengkap
1. Konfigurasi dan kustomisasi Drupal (PDF)
2. Tutorial lengkap dari IBM.
3. Dan tentunya dari handbook dari drupal :)


Actions

Information

12 responses

26 10 2007
Paulus

Wah mantab tutorialnya bagus … khan aku sih masih belum ngerti ama Drupal … :) maklum masih newbie … :) share knowledge terus ya … :)

31 10 2007
rizqe

katanya ada tutorial sederhana memulai drupal di pajrina.ictbatola.net sangat bagus untuk newbie. download PDF lenkapnya ada di kiri bawah, di box foto-foto. (entah kenapa tersembunyi…)

31 10 2007
benbego
11 11 2007
erwin

link video tutorial nya tdk berfungsi tuh…
padahal bagus kayaknya…
makasih ya

11 11 2007
dhiku

Sama2. Itu sudah di-fix link video tutorialnya.

19 01 2008
Drupal Deployment dan Backup dengan Capistrano « Ha–Dhiku–suma Wahab Blog

[...] Deployment dan Backup dengan Capistrano 19 01 2008 Setelah bermain2 dengan drupal untuk project web collaboration, gw selalu melakukan kegiatan yang sifatnya administratif dan berulang2. Parahnya lagi ini ga bisa [...]

13 03 2008
dodik

apa ya artinya web collaboration itu, apakah chat online masuk juga web collaboration ?

13 03 2008
dhiku

Intinya web collaboration adalah sebuah wadah untuk organisasi dalam berkolaborasi bisa dalam bentuk forum, chat, private message, announcement, workflow process, dan sebagainya.

16 04 2008
Freeloaded

saya tertarik dengan drupal dan saya ingin mengganti website saya dengan skrip drupal,
saya ingin mempelajari tutorial dr sni dan terima kasih atas informasinya

31 12 2008
virlina

berkunjung nie…
drupal itu sulit gak sih???
trus pernah coba pake jomlaa gak???

28 05 2009
cendra

lam kenal yah… !!1
thanks banget neh… tutorial bermanfaat banget …
mungkin laen kali kita bisa share ok.!

3 04 2011
akuronal

thanks infonya, lagi belajar drupal nih.
ni karya saya http://www.ngumpul.tk
mohon bantuanya ya..

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s




Follow

Get every new post delivered to your Inbox.

%d bloggers like this: