Drupal, TI

Membuat Web Collaboration dengan Drupal

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 :)

Standard

14 thoughts on “Membuat Web Collaboration dengan Drupal

  1. Paulus says:

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

  2. rizqe says:

    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…)

  3. Pingback: Drupal Deployment dan Backup dengan Capistrano « Ha–Dhiku–suma Wahab Blog

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

  5. It’s a pity you don’t have a donate button! I’d definitely donate to this superb blog! I suppose for now i’ll settle for book-marking and adding your
    RSS feed to my Google account. I look forward to fresh updates and will share this
    blog with my Facebook group. Chat soon!

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 )

Google+ photo

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

Connecting to %s