各タスクには、顧客を含むディレクター、コラボレーター、オブザーバーを配置できます。 ほとんどの場合、タスクでの作業は1日以上続き、(コメント内の)タスクが開発者(開発者)のアクティビティを表示しないことが判明する場合があります。 名前付きの問題に加えて、タスクの最初から最後まで何が起こったかについての完全な情報が欲しいです。
この点に関して、コメントを書くことで気を散らされることなく、タスクへのコメントのすべての変更を記録するために、コミット中に開発プロセスに関する情報を送信する必要がありました-コミット時に有益なコメントを追加するだけです。
作業ではVCS Mercurialを使用します。これには、ポータルタスクのコメントにコミットに関する情報を送信する設定が記載されています。
Bitrix24ポータルにMercurialをコミットするときにコメントを送信するには、次の手順を実行する必要があります。
- アプリケーションをホストするサイトには、SSL証明書が必要です。
- composerを使用して次のパッケージをインストールします。
- mesilov / bitrix24-php-sdk-BX24 REST APIを操作するためのPHPラッパー
- defuse / php-encryption-パスキーの生成に必要
インストールはコマンドによって行われます
$ composer require "mesilov/bitrix24-php-sdk: ^0.2.0" "defuse/php-encryption: ^2.0"
- アプリケーションファイルをサイトにアップロードします。
- install.php-Bitrix24のアプリケーションインストールファイル。 アプリケーションをインストールするときに、アプリケーションがアクセストークンを取得する必要があります。
install.php<?php /** * . * * 24 */ error_reporting(E_ALL & ~E_NOTICE); require __DIR__ . '/vendor/autoload.php'; require __DIR__ . '/lib.php'; if (null === $_REQUEST['DOMAIN'] || null === $_REQUEST['member_id'] || null === $_REQUEST['AUTH_ID'] || null === $_REQUEST['REFRESH_ID']) { die(' 24'); } $params = AddMessageToBitrix24Task::load(); if (0 === count($params)) { $params = [ // ( ) 'B24_APPLICATION_ID' => '<CLIENT_ID>', // ( ) 'B24_APPLICATION_SECRET' => '<CLIENT_SECRET>', // ( ) 'B24_APPLICATION_SCOPE' => ['task'], //URL ( ) 'B24_REDIRECT_URI' => 'https://<APP_DOMAIN>/app.php', // 'DOMAIN' => $_REQUEST['DOMAIN'], // 'MEMBER_ID' => $_REQUEST['member_id'], // 'AUTH_ID' => $_REQUEST['AUTH_ID'], // 'REFRESH_ID' => $_REQUEST['REFRESH_ID'], ]; // AddMessageToBitrix24Task::save($params); } //, if (AddMessageToBitrix24Task::check()) { // 24 $params = AddMessageToBitrix24Task::load(); $result = ' .<br>'; $result .= ' hook.php :<br>'; $result .= $params['KEY']; } else { $result = ' c .<br>'; } die($result);
- app.php-Mercurialフックがトリガーされたときにタスクにコメントを追加するメインアプリケーションファイル...
app.php<?php /** * */ error_reporting(E_ALL & ~E_NOTICE); require __DIR__ . '/vendor/autoload.php'; require __DIR__ . '/lib.php'; // $params = AddMessageToBitrix24Task::load(); try { // $key = $params['B24_APPLICATION_ID'] . $params['MEMBER_ID'] . $params['B24_APPLICATION_SECRET']; // if (AddMessageToBitrix24Task::decrypt($_REQUEST['key']) !== $key) { die(' '); } } catch (Exception $e) { die(' '); } if (!is_numeric($_REQUEST['task'])) { die(' '); } if (null === $_REQUEST['message'] || '' === trim($_REQUEST['message'])) { die(' '); } try { // Bitrix24 $bx24 = AddMessageToBitrix24Task::getBX24Instance($params); // $result = AddMessageToBitrix24Task::add($bx24, $_REQUEST['task'], $_REQUEST['message']); die($result); } catch (Exception $e) { die(' '); }
- lib.php-アプリケーションが機能するために必要な一連の関数
lib.php<?php /** * */ use Defuse\Crypto\Crypto; use Defuse\Crypto\Key; /** * 24 * * Class AddMessageToBitrix24Task */ class AddMessageToBitrix24Task { /** * @var string . . */ private static $config = __DIR__ . '/../bx24.auth'; /** * @var string */ private static $safeKey; /** * * * @param string $var * * @return string * * @throws \Defuse\Crypto\Exception\BadFormatException * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException */ public static function encrypt($var) { return Crypto::encrypt($var, self::getKey()); } /** * * * @param string $var * * @return string * * @throws \Defuse\Crypto\Exception\BadFormatException * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException */ public static function decrypt($var) { return Crypto::decrypt($var, self::getKey()); } /** * * * @return Key * * @throws \Defuse\Crypto\Exception\BadFormatException * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException */ public static function getKey() { if (null === self::$safeKey) { $params = self::load(); // - if (null === $params || null === $params['PRIVATE_KEY']) { self::$safeKey = Key::createNewRandomKey()->saveToAsciiSafeString(); } else { self::$safeKey = $params['PRIVATE_KEY']; } } return Key::loadFromAsciiSafeString(self::$safeKey); } /** * Bitrix24 * * @param array $params 24 * * @return \Bitrix24\Bitrix24 24 * * @throws \Bitrix24\Bitrix24Exception * @throws \Defuse\Crypto\Exception\BadFormatException * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException */ public static function getBX24Instance(array $params) { $bx24 = new \Bitrix24\Bitrix24(false); $bx24->setApplicationScope($params['B24_APPLICATION_SCOPE']); $bx24->setApplicationId($params['B24_APPLICATION_ID']); $bx24->setApplicationSecret($params['B24_APPLICATION_SECRET']); $bx24->setRedirectUri($params['B24_REDIRECT_URI']); $bx24->setDomain($params['DOMAIN']); $bx24->setMemberId($params['MEMBER_ID']); $bx24->setAccessToken($params['AUTH_ID']); $bx24->setRefreshToken($params['REFRESH_ID']); // if ($bx24->isAccessTokenExpire()) { // $temp = $bx24->getNewAccessToken(); // $params['AUTH_ID'] = $temp['access_token']; $params['REFRESH_ID'] = $temp['refresh_token']; $bx24->setAccessToken($params['AUTH_ID']); $bx24->setRefreshToken($params['REFRESH_ID']); // self::save($params); } return $bx24; } /** * * * @param \Bitrix24\Bitrix24 $bx24 24 * @param int $task * @param string $message * * @return string */ public static function add(\Bitrix24\Bitrix24 $bx24, $task, $message) { $str = ''; try { // $bx24->call( 'task.item.getdata', [ 'TASKID' => $task ] ); $str .= ' #' . $task . ' ' . $bx24->getDomain() . ' ' . PHP_EOL; // $bx24->call( 'task.commentitem.add', [ 'TASKID' => $task, 'FIELDS' => [ 'POST_MESSAGE' => $message ] ] ); $str .= ' '; } catch (Exception $e) { $str .= ' '; } return $str; } /** * * * @param array $params * * @return bool * * @throws \Defuse\Crypto\Exception\BadFormatException * @throws \Defuse\Crypto\Exception\EnvironmentIsBrokenException */ public static function save(array $params) { // $params['KEY'] = AddMessageToBitrix24Task::encrypt($params['B24_APPLICATION_ID'] . $params['MEMBER_ID'] . $params['B24_APPLICATION_SECRET']); // $params['PRIVATE_KEY'] = self::$safeKey; // $result = json_encode($params, JSON_UNESCAPED_UNICODE); return file_put_contents(self::$config, $result) > 0; } /** * * * @return array */ public static function load() { if (!file_exists(self::$config)) { return []; } // $params = file_get_contents(self::$config); return json_decode($params, true); } /** * , 24. * * @return bool */ public static function check() { try { $params = AddMessageToBitrix24Task::load(); $bx24 = self::getBX24Instance($params); $result = $bx24->call('app.info'); return $result['result']['CODE'] === $params['B24_APPLICATION_ID']; } catch (\Exception $e) { return false; } } }
- install.php-Bitrix24のアプリケーションインストールファイル。 アプリケーションをインストールするときに、アプリケーションがアクセストークンを取得する必要があります。
- hghook-commit-to-bx24.phpファイルをVCS Mercurialが使用されているWebサーバーにアップロードします。これにより、コミット時にアプリケーションが呼び出されます。 サイトのルート外にファイルを配置する必要があります。 スクリプトが機能するには、次の機能が必要です。
- shell_exec-コミットに関する情報を生成するコンソールコマンドの実行
- curl_exec-アプリケーションにデータを送信します
hghook-commit-to-bx24.php<?php /** * hg commit */ // 24 define('BX24_APP_URL', 'https://<APP_DOMAIN>/app.php'); // . define('KEY', '<ACCESS_KEY>'); echo ' Mercurial, ' . PHP_EOL; if(!function_exists('shell_exec')){ echo ': «shell_exec» ' . PHP_EOL; echo ' ' . PHP_EOL; exit(0); } if(!function_exists('curl_exec')){ echo ': «curl_exec» ' . PHP_EOL; echo ' ' . PHP_EOL; exit(0); } // Mercurial $hg = $_SERVER['HG']; if (!is_file($hg) || !is_executable($hg)) { echo ': Mercurial' . PHP_EOL; echo ' ' . PHP_EOL; exit(0); } echo ' ' . PHP_EOL; // , Mercurial $hostname = trim(shell_exec('hostname -f')); // $pwd = $_SERVER['PWD']; // Mercurial $branch = shell_exec("$hg branch"); // $log = trim(shell_exec("$hg log -l 1")); // $matches = null; $user = preg_match('/user:\s+(?<user>\S.*)/ium', $log, $matches) ? $matches['user'] : 'unknown'; // $summary = preg_match('/summary:\s+(?<summary>\S.*)/ium', $log, $matches) ? $matches['summary'] : ''; // $files = trim(shell_exec("$hg st -amr")); // $filesCount = substr_count($files, PHP_EOL); // Mercurial echo ' ' . PHP_EOL; $task = 0; if (preg_match('/^task[#\@\$](?<id>\d+)/iu', $branch, $matches)) { $task = (int)$matches['id']; } elseif (preg_match('/^task[#\@\$](?<id>\d+)/iu', $summary, $matches)) { $task = (int)$matches['id']; } // , if ($task <= 0) { echo ' ' . PHP_EOL; echo ' Enter, : '; $count = fscanf(STDIN, "%d\n", $task); if ($count <= 0) { echo ' .' . PHP_EOL; echo ' ' . PHP_EOL; echo ' ' . PHP_EOL; exit(0); } } echo ' ' . PHP_EOL; $message = <<<EOT $user $pwd $hostname: $summary ====== : $log ( $filesCount ): $files . EOT; // $postData = [ 'message' => $message, 'task' => $task, 'key' => KEY ]; // $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, BX24_APP_URL); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $result = curl_exec($ch); echo $result . PHP_EOL; echo ' ' . PHP_EOL;
- ダウンロードしたhgrhook-commit-to-bx24.phpファイルへのパスをhgrcに追加します
[hooks] commit = php -f /home/bitrix/hghook-commit-to-bx24.php
- ポータルの左側のメニューで「アプリケーションの追加」項目が選択されていない場合は選択し、「アプリケーション」項目を展開
- クラウドマーケットプレイスにアップロードしないので、ページで、アプリケーションの種類「個人用」を選択します
アプリケーションタイプの選択
- 新しいアプリケーションの設定ページで、指定します
- アプリケーション名
- 希望する言語のメニュー項目の名前
- 「タスク」にアクセス許可を設定します
- アプリケーションの実行可能ファイルへのリンクを指定します
- アプリケーションのインストールファイルへのリンクを指定します
アプリケーション設定
すべての設定を入力したら、アプリケーションを保存します。 必要に応じて、[マイアプリケーション]セクションのタスクリストで適切な項目を選択することにより、設定をいつでも編集および補足できます
- アプリケーションを保存すると、アプリケーションのリストを含むページが表示されます。 Bitrix24は、アプリケーションごとに2つの一意のパラメーター「Application Code(client_id)」と「Application Key(client_secret)」を割り当てます。これらはinstall.phpファイルで指定する必要があります
アプリケーションリスト
- 次に、左側のメニューのアプリケーションへのリンクをクリックして、アプリケーションのインストールに進む必要があります。 すべてが正しく行われた場合、次の形式のメッセージ
. hghook-commit-to-bx24.php : <ACCESS_KEY>
アプリケーションのインストール
何も表示されなかった場合(アプリケーションではなく白い領域)、ほとんどの場合、ヘッダーが設定されています
Header set X-Frame-Options SAMEORIGIN
サイトをフレームで表示することを禁止します。 これを修正するには、アプリケーションのあるディレクトリで次の行を追加して.htaccessファイルを作成(または編集)するだけで十分です。
Header unset X-Frame-Options
結果のアクセスコードは、hghook-commit-to-bx24.phpファイルに書き込む必要があります
- すべてが正しく構成されている場合、コミットに関する情報をタスクに追加するには、その番号が必要になります。 Bitrix24タスク番号は、名前の横に表示されます。
ポータルでのタスク
コミットに関する情報をタスクに追加するには、「task#」、「task @」または「task $」の直後のコミットテキストに番号を指定できます。
[bitrix@dhcppc5 www]$ hg st M composer.json [bitrix@dhcppc5 www]$ hg ci -u testuser -m 'task#62 #1 : - -' Mercurial, #62 <PORTAL_NAME>.bitrix24.ru [bitrix@dhcppc5 www]$
問題#1の解説
「タスク#」、「タスク@」または「タスク$」で始まる名前のMercurial作業ブランチの名前からタスク番号を取得することもできます。
タスク番号がコメントまたはブランチ名のいずれにも見つからない場合は、手動で入力できます。
[bitrix@dhcppc5 www]$ hg ci -u testuser -m ' #2 : - -' Mercurial, Enter, : 62 #62 <PORTAL_NAME>.bitrix24.ru [bitrix@dhcppc5 www]$
問題#2の解説
タスク番号のエントリを省略すると、コメントは送信されません。
[bitrix@dhcppc5 www]$ hg ci -u testuser -m ' #3 : - -' Mercurial, Enter, : [bitrix@dhcppc5 www]$
存在しないタスク番号を指定すると、対応するエラー通知が表示されます。
[bitrix@dhcppc5 www]$ hg ci -u testuser -m 'task$65445642 #3 : - -' Mercurial, [bitrix@dhcppc5 www]$
記事のコード 。
使用した材料: