2015年7月21日火曜日

Drupalで新記事登録とか何か起きたらSlackへ自動通知

 Rules HTTP ClientというDrupalモジュールがありますので、これをオレオレDrupal環境にインストールすればいいのですが(7.x-1.0-beta1)、設定に癖があり、ややハマったのち成功したので備忘録。

 いろいろなルートがありえるわけですが、今回はとりあえずマイクテストてすてすって感じで、最もベーシックな方法といえるSlack本体のIncoming WebHooksを使うことにしまして、まず、投稿先チャンネル/ダイレクトメッセージ先/プライベートグループのWebhook URL(https://hooks.slack.com/services/ ではじまる)を取得しておきます。

 しかるのち、

  1. DrupalRulesで新しいルールを追加。
  2. 何かイベントを登録します。(例)新しいコンテンツを保存後 of タイプ お仕事
  3. それに対するアクションを登録し、種類を「Request HTTP data」(Rules HTTP Clientをインストールしたことによってこの選択肢が増えています)とします。
  4. このアクションの設定画面に以下のように記入します:
  • URL->Value: Slackから取得したWebhook URL
  • HEADERS->Value: Content-Type:application/x-www-form-urlencoded ※ここ重要ッス。自明のように思えますが、これを指定してやらないと、エラーが出て、アクションが引き起こされません。
  • METHOD->Value: POST
  • DATA->Value: payload=Slackへ送りたいJSON (例)payload={"text": "お仕事が登録されました: [node:url]"} ※Content-Type:application/jsonとしてここのpayload=を省いて生JSONにしてみましたが動作しませんでした。

とすれば動作します。

 上の例ではプレーンテキストを投稿しているだけですが、もっとリッチなテキストにする方法や、Slackのアバターや投稿先オーバライドなどの指定方法も、Incoming WebHooksの設定画面で具体的に記されていますので、必要に応じてJSON内で指定すればOKです。

2015年7月19日日曜日

「南旺理工(nanoRico)」の和字表記由来と英字表記由来をサイドバーにがんばって記したよー!

以下の内容をサイドバーにも記しました。
(地名表記「南旺」の由来の部分はこれまでもちょこっと書いてありましたが)

[和字表記由来]
 「南旺」(なんおう)はプノンペンの昔の漢字表記です。昭和の日本でもプノンペンは「南旺府」と呼ばれていました。プノンペンの音とプノンペンの南国の太陽のイメージをともにビビッドに表せている表記だと思っており(現代日本語読みだと音は程遠いですが…)、現在の中国語表記「金辺」より好きなので使っています。ベトナムの巷間では現在でも南旺のベトナム語読みNam Vangの名で呼ばれています。
 南旺理工の名には、プノンペンの過去をふまえながら未来の世界を理工で今日創っていこうという意気込みを込めてあります。

[英字表記由来]
 nanoはギリシャ語「小人」に由来し、10のマイナス9乗を意味する接頭辞になっています。ricoはスペイン語で「豊かな、素晴らしい」を意味します。
 nanoRicoの名には、細部にこそ素晴らしい価値を宿らせる仕事をしていこうという意気込みを込めてあります。と同時に、ちっぽけながらもみんなで豊かになりたいねというささやかな願いもひそかに込めてあります。

2015年7月10日金曜日

Drupalで、使用者ごとに異なる選択肢を提示するけど管理者に全選択肢を提示

いや~、かなりハマったけどできるようになったんで、覚書っす。

前提:


  • Customerエンティティ型のCustomerバンドルにはPurchaserフィールド(ユーザーへのエンティティ参照型)とCustomerフィールド(テキスト型)がある。
  • Jobエンティティ型のJobバンドルのCustomerフィールド(エンティティ参照型)がCustomerエンティティ型のバンドルすべてのCustomersビューのEntity ReferenceディスプレイのCustomerフィールドを参照。
  • 使用者は役割purchaserを持つ。管理者(Drupalのadministratorとは限らない、組織を回すひと)は役割coordinatorを持つ(が、役割purchaserを持たない。ここ重要)。


実現方法:

上記Entity Referenceディスプレイにおいて

  • FILTER CRITERIAでユーザーをフィルタしない。
  • RELATIONSHIPSでPurchaserフィールドへのリレーションを作成。
  • CONTEXTUAL FILTERSでCustomer: Purchaserへのフィルタを作成。

     -> WHEN THE FILTER VALUE IS NOT AVAILABLE           -> Provide default value
               -> タイプ: User ID from logged in user
          -> EXCEPTIONS
               -> Exception value: 空欄
     -> WHEN THE FILTER VALUE IS AVAILABLE OR A DEFAULT IS PROVIDED           -> Specify validation criteria: オン
               -> Validator: ユーザー
                    -> Restrict user based on role: オン
                         -> Restrict to the selected roles
                              -> coordinator: オフ(ここがミソ
                              -> purchaser: オン
               -> Action to take if filter value does not validate: Display all results for the specified field

すなわち、逆にcoordinatorは認証されなかったために全選択肢を提示されるということになります。ちょっとトリッキーです。

ハマり点:


  • はじめ、Entity Referenceディスプレイを2つ作って、片方のAccessを役割coordinator、もう片方のAccessを役割purchaserとしました。Pageディスプレイはこの方法で、アクティブユーザーの役割に応じて振り分けてくれますので。しかしEntity Referenceディスプレイはこの方法ダメなんですね。ディスプレイのMachine Nameがいちばん若いヤツだけをしか見てくれません。Entity Referenceモジュールバージョン7.x-1.1です。もうちょっとバージョン行ったらいつのまに直されてくれそうな気もします。
  • FILTER CRITERIAでもあれこれ苦戦してみましたがダメでした。
  • Provide default valueのUser ID from URLとかRaw value from URLでURLの実パラメタを読ませようとしましたが、administratorじゃないひとが編集画面へ行くとURLの実パラメタが消えてしまうのでありました。


したがって上記実現方法は僕の4つめのアプローチにしてようやく成功した方法です。1日つぶれました。この記事がお役に立って皆様の1日が潰れませんように :)


きょうでDrupal使いはじめて2週間です。

2015年7月9日木曜日

Drupalでログイン中ユーザーを表示する

「ようこそ○○さん」みたいなのをDrupal 7でコード1行も書かずページ上に表示させる方法の覚書です。

http://drupal.stackexchange.com/a/103902
のパクりです。


  • ビューを作る。
  • そのブロックディスプレイを作る。
  • フォーマットをUnformatted listにする。
  • 表示をFieldsにする。
  • FIELDSにユーザー: 名前を追加。
  • FILTER CRITERIAはなし。
  • Accessは役割でauthenticated userとする。
  • CONTEXTUAL FILTERSにユーザー: Uidを追加。そのWHEN THE FILTER VALUE IS NOT AVAILABLEでProvide default valueを選択し、そのタイプとしてUser ID from logged in userを選択。


こうしておいて、このブロックをページ上のどこかのリージョンに割り当てて、あと表示の微調整をするとよいでしょう。

ウチのサイトに実際にこの方法で実装しました。
(Accessは役割でauthenticated userとしていますのでログインしないと表示されませんすみません ^^;)

それにしても、
Drupalすごいっす。
オモテのサイトをそこそこに、生産管理システム組んでるとこなんですが、オモテ含めてここまで1行たりともコード書いてません。

  • データのリレーショナルはエンティティ参照で。
  • お客さんごとに見せる選択肢の絞り込みはビューのエンティティ参照ディスプレイで。
上記のアプローチで、やりたいことがイメージどおりバッチリ実装できてます。
どんどん実装できていくので気持ちいいです。
どこまでコード書かずにDrupal wayでいけるかチャレンジって感じっす。

「そのシステム開発、Drupal上だったらコスト10分の1でできますよ?」
ってのが煽りじゃなくマジで言えそうな案件けっこうありそう。

松田聖子『きみだけのバラード』は稀代の名曲だが、松田聖子のオリジナル曲ではない

『きみだけのバラード』
を松田聖子が歌った映像に接して、そのとりこになった方ならわかっていただけるとおもうんですけど、

この音源ってないんっすよーーー!!!

しかもあまつさえ、UGAでJohn O'Banionをさがしてもない。I Don't Want To Lose Your Loveをさがしてもない。ドンだけマイナー曲を当時松田聖子はピックアップしたんだよという…。

カラオケで歌おうとしたけど、UGAでさがしてもなかったので、今日は挫折しました。。。。


カラオケにない歌をうたいたいならば、もうあとは、誰かに演奏してもらうしかないっすかね。。。!!!!!

2015年7月8日水曜日

カンボジアでSlackを導入したらテンションがあがった

Slackいいね~ということは世界じゅうで言われておりますのでそれらをここで繰り返す気はありませんが、遅蒔きながらカンボジア大六でも社内導入いたしまして、


  • クメール文字と英数・和文が同じ大きさで表示される


これがすばらしいですね!

ってすごいあたりまえのことですけど、それがSkypeチャットではいまだにできないというダサさでありました。

Slackに社員を登録するには、各社員のメアドが必要ですが、それはさくらVPSに先日立てたメ鯖(〆鯖に非ず)で人数分デッチあげました (^^
デッチあげたといっても、ちゃんと世界に通用するふつ~にメアドですよ!

今のところとりあえず


  • #cut …切り抜きの部屋
  • #dtp …DTPとトレースの部屋
  • #hi …みやもとさんの部屋
  • #work …その他仕事の部屋(元#general)
  • #leng …遊びの部屋(元#random)


という5部屋を作ってあります。lengはクメール語で遊びとかいう意味です。社員たちにとってもfbの延長のテンションでできるので良いですね。

2015年7月4日土曜日

いまだにどっちが正しいスペルかわからないクメール語単語2つ

អាគារとអគារって両方見るけどどっちでもいいのですか?
tovnahにも両方載っているし…。
タイ語อาคารから察するとអាគារのほうが正しいかな?
でもអគារ表記もほんとよくみます。


ផ្ញើとផ្ញើរも両方見るけどどっちでもいいのですか?
これはtovnahにはផ្ញើしか載ってないけど…。
社内チャットで、お客さんへ仕事を送る、とか、社内で資料を送る、みたいなときに多用する言葉なので、そのたびに、រ付けたものか付けまいものか迷います。

どなたか、教えてくださーい!!!