memo.xight.org

日々のメモ

カテゴリ : Drupal

1ページ目 / 全1ページ

Drupalのsmtp モジュール + PHPMailerのアップデート

Summary

DrupalのPHPMailerのリモートコード実行脆弱性対策を行う。

sites/all/libraries/PHPMailer

cd sites/all/libraries
git clone https://github.com/PHPMailer/PHPMailer
ln -s PHPMailer phpmailer


sites/all/modules/smtp/smtp.module

include するファイルを class.phpmailer.php から PHPMailerAutoload.php に変更する。

/**
 * Load the PHPMailer library.
 *
 * @return
 *   TRUE if the PHPMailer library is loaded, FALSE otherwise.
 */
function smtp_load_library() {
  // Include the PHPMailer class (which includes the SMTP class).
  if (!class_exists('PHPMailer')) {
	// First try using the libraries module.
	if (module_exists('libraries')) {
	   // $smtp_phpmailer_library = module_invoke('libraries', 'get_path', 'phpmailer') . '/class.phpmailer.php';
	   $smtp_phpmailer_library = module_invoke('libraries', 'get_path', 'phpmailer') . '/PHPMailerAutoload.php';
	 }
	 //If you aren't using libraries, then check a couple other places.
	 else {
	   //Look in the default libraries location
	   // $smtp_phpmailer_library = 'sites/all/libraries/phpmailer/class.phpmailer.php';
	   $smtp_phpmailer_library = 'sites/all/libraries/phpmailer/PHPMailerAutoload.php';
	   //If the default libraries doesn't exist, then try the old module location.
	   if (!file_exists($smtp_phpmailer_library)) {
		 // $smtp_phpmailer_library = drupal_get_path('module', 'smtp') .'/phpmailer/class.phpmailer.php';
		 $smtp_phpmailer_library = drupal_get_path('module', 'smtp') .'/phpmailer/PHPMailerAutoload.php';
	   }
	 }
	 //Now include whatever you found.
	 if (file_exists($smtp_phpmailer_library)) {
		require_once($smtp_phpmailer_library);
	 }
  }
  
  // Tell the caller if PHPMailer class exists.
  return class_exists('PHPMailer');
}


Reference

github.com - PHPMailer
https://github.com/PHPMailer/PHPMailer

Drupal.org - PHPmailer 3rd party library - DRUPAL-SA-PSA-2016-004
https://www.drupal.org/psa-2016-004

Qiita - PHPMailerのリモートコード実行脆弱性(CVE-2016-10033)の影響範囲
http://qiita.com/ichikaway/items/d2d9205c57f35b618951

Drupal7 で url の https オプションが動作しない場合の対応

Summary

Drupal7 の common.inc が提供する関数 url で、
$option['https'] = true にしても http://... のURLが返ってきてしまう。
url('path/to/contents', array('https' => true))


これを動作させるには、
settings.php の $conf['https'] の値を true にしておく必要がある。

settings.php

$conf = array(
  'https' => true,
);


Reference

Drupal7 - Drupal API - common.inc - url
https://api.drupal.org/api/drupal/includes!common.inc/function/url/7

Drupal Webform 3.19 の Resend e-mails で "You must select at least one email address to resend submission."

Summary

Webform 3.19 の Resend e-mails で
"You must select at least one email address to resend submission." というエラーが発生し、
メールの再送が行えない問題の解決方法。

webform/includes/webform.submissions.inc の 453行目から456行目

$form['actions']['resend'] = array(
	'#type' => 'submit',
	'#value' => t('Resend e-mails'),
	);


$form['actions']['sendemail'] = array(
	'#type' => 'submit',
	'#value' => t('Resend e-mails'),
	);


Reference

Resend e-mails [#2152409] | Drupal.org
https://drupal.org/node/2152409

Drupalモジュール XMLSitemap で Duplicate entry エラーが出る場合の対処法

Summary

XMLSitemap を利用していて、XMLSitemapをリビルドした際に、
Duplicate entry のエラーが発生する。

id, type が PRIMARY KEY になっているのだが、
type のサイズが足りないために発生しているエラーのようだ。

エラーのサンプル

WP: Duplicate entry '206-taxonomy_ter' for key 'PRIMARY' query: INSERT INTO xmlsitemap (id, type, subtype, loc, language, access, status, status_override, lastmod, priority, priority_override, changefreq, changecount) VALUES (206, 'taxonomy_term', '16', 'taxonomy/term/206', '', 1, 1, 0, 0, 0.5, 0, 0, 0) in /path/to/drupal/site/all/modules/xmlsitemap/xmlsitemap.inc on line 137.

解決方法

type のサイズを変更し、
中途半端な値のtypeが入っている可能性があるため、xmlsitemapテーブルを削除。
その後、XMLSitemap をリビルドすれば良い。

mysql> ALTER TABLE xmlsitemap MODIFY type VARCHAR(32);
mysql> DELETE FROM xmlsitemap;

% /path/to/drush --root=/var/www/drupal --uri="http://example.com" xmlsitemap-rebuild

変更前のxmlsitemapテーブルのフィールド

mysql> show fields from xmlsitemap;
+-------------------+------------------+------+-----+---------+-------+
| Field             | Type             | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| id                | int(10) unsigned | NO   | PRI | 0       |       |
| type              | varchar(12)      | NO   | PRI |         |       |
| subtype           | varchar(32)      | YES  |     | NULL    |       |
| loc               | varchar(255)     | NO   | MUL |         |       |
| language          | varchar(12)      | NO   | MUL |         |       |
| access            | tinyint(4)       | NO   | MUL | 1       |       |
| status            | tinyint(4)       | NO   |     | 1       |       |
| status_override   | tinyint(4)       | NO   |     | 0       |       |
| lastmod           | int(10) unsigned | NO   |     | 0       |       |
| priority          | float            | YES  |     | NULL    |       |
| priority_override | tinyint(4)       | NO   |     | 0       |       |
| changefreq        | int(10) unsigned | NO   |     | 0       |       |
| changecount       | int(10) unsigned | NO   |     | 0       |       |
+-------------------+------------------+------+-----+---------+-------+

変更後のxmlsitemapテーブルのフィールド

mysql> show fields from xmlsitemap;
+-------------------+------------------+------+-----+---------+-------+
| Field             | Type             | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------+-------+
| id                | int(10) unsigned | NO   | PRI | 0       |       |
| type              | varchar(32)      | NO   | PRI |         |       |
| subtype           | varchar(32)      | YES  |     | NULL    |       |
| loc               | varchar(255)     | NO   | MUL |         |       |
| language          | varchar(12)      | NO   | MUL |         |       |
| access            | tinyint(4)       | NO   | MUL | 1       |       |
| status            | tinyint(4)       | NO   |     | 1       |       |
| status_override   | tinyint(4)       | NO   |     | 0       |       |
| lastmod           | int(10) unsigned | NO   |     | 0       |       |
| priority          | float            | YES  |     | NULL    |       |
| priority_override | tinyint(4)       | NO   |     | 0       |       |
| changefreq        | int(10) unsigned | NO   |     | 0       |       |
| changecount       | int(10) unsigned | NO   |     | 0       |       |
+-------------------+------------------+------+-----+---------+-------+

Reference

Duplicate entry with taxonomy term : drupal.org
http://drupal.org/node/794924

XML sitemap | drupal.org
http://drupal.org/project/xmlsitemap

drupal の cron.php が動作しない場合のトラブルシューティング

Summary

cron が途中で止まると、cronが動作していないにも関わらず、
Attempting to re-run cron while it is already running. のエラーが発生する。

今回は、 drush で cron の処理中に中断させると発生した。

% drush -r /path/to/drupal cron


DBのvariable.cron_semaphore を削除し、
キャッシュをクリアさせれば良い。

DBのvariable.cron_semaphore を削除

[src:sql]
SELECT * FROM variable WHERE NAME = 'cron_semaphore';
DELETE FROM variable WHERER NAME = 'cron_semaphore';
[src]

キャッシュをクリア

% drush -r /path/to/drupal cc


Reference

Attempting to re-run cron while it is already running. | drupal.org
http://drupal.org/node/160652

Drupal 重要モジュール一覧

Summary

DrupalスレまとめWikiの重要モジュール一覧。

・CCK
http://drupal.org/project/cck

・Views
http://drupal.org/project/views

・Rules
http://drupal.org/project/rules

・webform
http://drupal.org/project/webform

・content access
http://drupal.org/project/content_access

・admin_theme
http://drupal.org/project/admin_theme

・deployment
http://drupal.org/project/deploy

・Services
http://drupal.org/project/services

・boost
http://drupal.org/project/boost

・drush
http://drupal.org/project/drush

・Google Analytics
http://drupal.org/project/google_analytics

・Devel
http://drupal.org/project/devel

Reference

DrupalスレまとめWiki - 重要モジュール一覧
http://www10.atwiki.jp/drupal/pages/98.html

Drupalのテーマを UserAgent で変更したい

Summary

UserAgent ごとに Theme を切り替えたい。
Switchtheme モジュールで実現可能。

Switchtheme

モバイルサイト用のモジュール。
Browscapを使用して、UserAgentごとにThemeを切り替え可能。
キャリアごとにThemeを変更可能。

Mobile Theme

モバイルサイト用のモジュール。
Browscapを使用して、Themeを切り替え可能。
キャリアごとのTheme変更は不可。

Mobile

モバイルサイト用のシンプルなHTMLのテーマ。

iUI

iPhone風のテーマ。

Reference

DrupalスレまとめWiki - 携帯対応まとめ
http://www10.atwiki.jp/drupal/pages/92.html

Drupal で node を更新すると Twitter につぶやける Drupal モジュール

Summary

Drupal で Twitter モジュールと Twitter actions モジュールをインストールすると、
コンテンツ投稿時に Twitter にメッセージを投稿してくれる。

node type 別にカスタマイズするには、
Drupal で node type 毎に twitter へのつぶやき書式を変える方法 を参考にモジュールを追加すれば良い。
以下、引用。
<?php
function twitter_format_by_node_type_form_alter(&$form, &$form_state, $form_id) {
    if (isset($form['#node']) && $form['#node']->type . '_node_form' == $form_id) {
        if (!$form['twitter']) {
            return;
        }
        if ($form['#node']->type == "news") {
            $form['twitter']['status']['#default_value'] = 'お知らせ: !title !tinyurl';
        } elseif ($form['#node']->type == "blog") {
            $form['twitter']['status']['#default_value'] = 'ブログ投稿: !title !tinyurl';
        } else {
            // Twitter モジュールで設定したデフォルトフォーマット
        }
    }
}
?>


Reference

Twitter | drupal.org
http://drupal.org/project/twitter

Drupal で node type 毎に twitter へのつぶやき書式を変える方法 | ランディネットワーク
http://www.randynetwork.com/blog/319

Drupal6 の アップデート

Summary

1. ファイルのバックアップ
% tar czvf /path/to/backup/drupal.tar.gz /path/to/drupal

2. 管理者ユーザでログインし、オフラインモードにする。
http://example.com/drupal/admin/settings/site-maintenance

3. DBのバックアップ
% mysqldump -u DB_USER -pDB_PASS DB_NAME | gzip > /path/to/backup

4. モジュール・テーマを初期状態に戻す
有効にしていたモジュール・テーマはメモをとっておく。

5. 新しいバージョンのDrupalのファイルを配置
*.php
includes/*
misc/*
modules/*
themes/*
  
6. 既存のファイルを配置する
profiles/*
sites/*
robot.txt (変更していれば)
.htaccess (変更していれば)
template.phpやstyle.cssなどコアテーマに関連するファイル (変更していれば)

7. モジュール・テーマの再設定

8. update.php の実行
http://example.com/update.php

Reference

Web Go! Go! - Drupalのアップグレード(アップデート)方法
http://www.webgogo.jp/drupal/upgrade_5

Drupalでタームを削除する際にエラーが発生する

Summary

XML sitemap 6.x-2.x-dev を使用中、
タームを削除する際に、以下エラーが発生する。

Fatal error: Unsupported operand types in /sites/all/modules/xmlsitemap/xmlsitemap_taxonomy/xmlsitemap_taxonomy.module on line 180

xmlsitemap_taxonomy_form_taxonomy_form_term_alter を置き換え。

function xmlsitemap_taxonomy_form_taxonomy_form_term_alter(&$form, $form_state) {
  /* Because the same form is used for deletion in confirm_form, we must check
  if the normal editing form elements are present. Hopefully this is fixed in Drupal 7. */
  if (isset($form['identification'])) {
    if ($form['#term']['tid']) {
      $term = xmlsitemap_taxonomy_taxonomy_term_load($form['#term']['tid']);
    }
    else {
      $term = (object) $form['#term'];
    }
    $term->vid = $form['vid']['#value'];
    $link = xmlsitemap_taxonomy_create_link($term);

    // Add the link options.
    module_load_include('inc', 'xmlsitemap', 'xmlsitemap.admin');
    xmlsitemap_add_form_link_options($form, $link);

    $form['xmlsitemap']['#access'] |= user_access('administer taxonomy');
    if (user_access('administer taxonomy')) {
      $form['xmlsitemap']['priority']['#description'] .= ' ' . t('The default priority for this vocabulary can be changed <a href="@link-type">here</a>.', array('@link-type' => url('admin/content/taxonomy/edit/vocabulary/' . $term->vid, array('query' => drupal_get_destination()))));
    }

    // The submit and delete buttons need to be weighted down.
    $form['submit'] += array('#weight' => 50);
    if (isset($form['delete'])) {
      $form['delete'] += array('#weight' => 51);
    }
  }
}


Reference

Fatal error when deleting terms | drupal.org
http://drupal.org/node/558344

Drupalのエラー「date_formats doesn't exits query」の解決方法

Summary

cron実行時に以下のエラーログを発見。
Table &#039;drupaldb.date_formats&#039; doesn&#039;t exist query: SELECT df.dfid, df.format, df.type, df.locked, dfl.language FROM date_formats df LEFT JOIN date_format_types dft ON df.type = dft.type LEFT JOIN date_format_locale dfl ON df.format = dfl.format AND df.type = dfl.type ORDER BY df.type, df.format: /path/to/drupal/sites/all/modules/date/date_api.module の 2046 行目

原因

date 6.x-2.3のChangeLogより

#395156 Change table name for date formats from 'date_format' to 'date_formats' because 'date_format' is reserved word in some dbs.


date_formatはDBでの予約語である可能性があるため、
テーブル名をdate_formatsに変更したとのこと。

対処法

テーブルdate_formatをdate_formatsにリネームして解決。

Reference

date 6.x-2.3 | drupal.org
http://drupal.org/node/534332

Japanese Mobile - モバイルサイト向けDrupal テーマ

Summary

AudiaからリリースされたDrupalモジュール。
DoCoMo、au、Softbankの3G携帯で動作する。

特徴

・クッキーなしでもログインセッションが可能
・キャリアの自動判別
・UTF-8からシフトJISへの自動エンコーディング変換
・インラインCSS

Reference

Japanese Mobile | drupal.org
http://drupal.org/project/jp_mobile

Audia - 2009-08-08 - 携帯電話用のDrupalテーマを公開
http://www.audia.jp/blog/%E6%90%BA%E5%B8%AF%E9%9B%BB%E8%A9%B1%E7%94%A8%E3%81%AEdrupal%E3%83%86%E3%83%BC%E3%83%9E%E3%82%92%E5%85%AC%E9%96%8B

DrupalでTaxonomyによる関連ノードを表示する

Summary

Relevanceモジュールを利用すると、Taxonomyの類似度により
Nodeの関連度を計算し、上位 n 件を表示することができる。

翻訳ファイル

Sunvisor Lab. - モジュールの翻訳
http://www.sunvisor.net/drupal/ja_po

[2010-01-29] 関連がありそうなモジュールを追記

RelatedContent
http://drupal.org/project/relatedcontent

Node Relativity
http://drupal.org/project/relativity

Reference

Sunvisor Lab. 2009-06-25 - モジュール:Relevance, Meta tags, Term Display
http://www.sunvisor.net/drupal/modules/relevance

Relevance | drupal.org
http://drupal.org/project/relevance

Term Display | drupal.org
http://drupal.org/project/term_display

Nodewords | drupal.org
http://drupal.org/project/nodewords

定番そうなDrupalモジュール一覧

Summary

定番のDrupalモジュールを探してみた。

CCK

Content Construction Kit (CCK) | drupal.org
http://drupal.org/project/cck

Content Construction Kit (CCK) 日本語翻訳 | DRUPAL*DRUPAL
http://drupalxdrupal.com/project/194

Views

Views | drupal.org
http://drupal.org/project/views

Views 日本語翻訳 | DRUPAL*DRUPAL
http://drupalxdrupal.com/project/196

Taxonomy Menu

Taxonomy Menu | drupal.org
http://drupal.org/project/taxonomy_menu

Pathauto

指定したルールを基に URL エイリアスを自動生成するためのモジュール
Pathauto | drupal.org
http://drupal.org/project/pathauto

Pathauto 日本語翻訳 | DRUPAL*DRUPAL
http://drupalxdrupal.com/project/38

Token

Token | drupal.org
http://drupal.org/project/token

Token 日本語翻訳 | DRUPAL*DRUPAL
http://drupalxdrupal.com/project/43

AdSense /AdSense Injector

AdSense | drupal.org
http://drupal.org/project/adsense

Adsense Injector | drupal.org
http://drupal.org/project/adsense_Injector

Meta tags

Meta tags | drupal.org
http://drupal.org/project/nodewords

XML Sitemap

XML Sitemap | drupal.org
http://drupal.org/project/xmlsitemap

XML Sitemap 日本語翻訳 | DRUPAL*DRUPAL
http://drupalxdrupal.com/project/51

FileField

FileField | drupal.org
http://drupal.org/project/filefield

FileField 日本語訳 | drupal.pineray.jp
http://drupal.pineray.jp/node/80

ImageField

ImageField | drupal.org
http://drupal.org/project/imagefield

ImageField 日本語訳 | drupal.pineray.jp

http://drupal.pineray.jp/node/78

ImageCache

ImageCache | drupal.org
http://drupal.org/project/imagecache

ImageCache 日本語訳 | drupal.pineray.jp
http://drupal.pineray.jp/node/57

Lightbox2

Lightbox2 | drupal.org
http://drupal.org/project/lightbox2

Devel

Devel | drupal.org
http://drupal.org/project/devel

Devel 日本語訳 | drupal.pineray.jp
http://drupal.pineray.jp/node/68

Reference

役に立ちそうなDrupalモジュールの一覧
http://www.marusankakusikaku.jp/archives/2007/05/22-drupal.html

DrupalのTextileモジュールのインストール

Summary

Textileモジュールのインストールと有効化について。
対象ファイルを展開して、インストールだけでは有効にならない。

Textileモジュールの配置

% tar xzvf textile-x.x.x.tar.gz
% mv textile /path/to/drupal/modules

classTextile.php をダウンロードして配置

INSTALL.txtに書いているURLに当該ファイルが存在しなかったので、
以下URLから入手。
http://textpattern.googlecode.com/svn/releases/4.0.8/source/textpattern/lib/classTextile.php

/path/to/drupal/modules/textile/classTextile.php に配置

入力書式の追加

http://example.com/path/to/drupal/admin/settings/filters/add
Textileフィルタのみ有効にする。

コンテンツへの適用

入力書式から Textileを指定する。

Reference

Textile | drupal.org
http://drupal.org/project/textile

Textile
http://textile.thresholdstate.com/

textpattern - Google Code
http://code.google.com/p/textpattern/

Drupalのインストール

Summary

Drupalをインストールしてみる。
モジュールは cck と views を追加。

ファイルの移動と権限付与

# mv drupal-x.x/* drupal-x.x/.htaccess /var/www/html
# cp sites/default/default.settings.php sites/default/settings.php

データベースの作成

% mysqladmin -uroot -p create drupal

mysqlのテーブルの作成

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON drupal.* TO drupal@localhost IDENTIFIED BY 'XXXXXXXX';
FLUSH PRIVILEGES;
quit;

Clean URLの有効化

Clean URLは http://example.com/index.php?q=hogehttp://example.com/hoge のようにアクセスする可能にする機能。
Clean URLの動作にはmod_rewriteが必要。

/path/to/drupal/.htaccess を有効にする。

<Directory /path/to/drupal/>
AllowOverride All
</Directory>

インストール時にClean URLを有効に設定できなかった場合

  mod_rewriteの有効化、.htaccessのOverrideの設定確認をして apache再起動。
  http://example.com/drupal/?q=admin/settings/clean-urls にアクセスし、
  Clean URLを有効化する。

PHPのGDライブラリのインストール

# aptitude install php5-gd


php.iniの編集

extension=gd.so

php5-mysql のインストール

# aptitude install php5-mysql


ブラウザから drupal をインストール

http://example.com/install.php にアクセス

モジュール翻訳ディレクトリを作成 (日本語プロファイル版)

% mkdir /path/to/drupal/profiles/Japanese/translations/modules


cck, viewsモジュールのファイルを配置 (日本語プロファイル版)

% tar xzvf views-6.x-x.x.tar.gz
% mv views /path/to/drupal/sites/all/modules
% unzip ja-cck-6.x-x.x.zip
% cp ja-cck-6.x/cck.ja.po /path/to/drupal/profiles/Japanese/translations/modules/cck.ja.po

% tar xzvf cck-6.x-x.x.tar.gz
% mv cck /path/to/drupal/modules
% unzip ja-views-6.x-x.x.zip
% cp ja-views-6.x/cck.ja.po /path/to/drupal/profiles/Japanese/translations/modules/view.ja.po

2009-05-28 追記

Drupal 日本語プロジェクトの日本語プロフィールを利用している場合
以下の優先順位でインポートされる。
プロフィール毎の翻訳を提供することが可能。

  1. profiles/japanese/translations/ja/modules/モジュールディレクトリ名.po
  2. モジュールディレクトリ/po/ja.po

Drupal 日本語プロジェクトの日本語プロフィールを利用していない、
または、以前のバージョンからアップグレードしたなどの場合

  1. モジュールディレクトリ/po/ja.po

Reference

Drupal.org
http://drupal.org/

Drupal Japan
http://drupal.jp/

Content Construction Kit (CCK) | drupal.org
http://drupal.org/project/cck

Content Construction Kit (CCK) 日本語翻訳 | DRUPAL*DRUPAL
http://drupalxdrupal.com/project/194

Views | drupal.org
http://drupal.org/project/views

Views 日本語翻訳 | DRUPAL*DRUPAL
http://drupalxdrupal.com/project/196

Perl Tips - 2007-04-6
http://perltips.twinkle.cc/drupal/clean_urls.php