ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/work/ebihara/prj_module_trac/webapp_ext/modules/trac/util.php @ 7788

Last change on this file since 7788 was 7788, checked in by ebihara, 13 years ago

チケットのリスト取得時にファンクションキャッシュをおこなうようにした

File size: 2.1 KB
Line 
1<?php
2/**
3 * @copyright 2008 Kousuke Ebihara
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7require_once 'XML/RPC.php';
8
9function communicate_with_trac($method, $username = '', $password = '', $params = array(), &$error = '')
10{
11    $message =& new XML_RPC_Message($method, $params);
12
13    $client =& new XML_RPC_client(TRAC_PATH, TRAC_HOST);
14    $client->setCredentials($username, $password);
15    $response = $client->send($message);
16    if (!$response) {
17        return false;
18    }
19
20    if ($response->faultCode()) {
21        return false;
22    }
23
24    $decode_val = XML_RPC_decode($response->value());
25    return $decode_val;
26}
27
28function trac_ticket_list($username, $password, $qstr, $page, $page_size)
29{
30    $list = trac_ticket_query($username, $password, $qstr);
31    if (!$list) {
32        return array(false, false, false);
33    }
34
35    $total = count($list);
36    $start = ($page_size - 1) * $page;
37    $end = $start + $page_size;
38
39    $result = array();
40    for ($i = $start; $i < $end; $i++) {
41        if (($total - 1) == $i) {
42            break;
43        }
44
45        $result[] = trac_ticket_get($username, $password, $list[$i]);
46    }
47
48    $is_prev = false;
49    $is_next = false;
50    if ($total) {
51        $is_prev = (bool)($page > 1);
52        $is_next = (bool)($page < ceil($total / $page_size));
53    }
54
55    return array($result, $is_prev, $is_next);
56}
57
58function trac_ticket_query($username, $password, $qstr)
59{
60    static $is_recurred = false;
61    if (!$is_recurred) {
62        $is_recurred = true;
63        $funcargs = func_get_args();
64        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_SHORT, __FUNCTION__, $funcargs);
65    }
66    $is_recurred = false;
67
68    $replacement = array('::', ':', ',');
69    $search = array('!=', '=', '&');
70    $qstr = str_replace($replacement, $search, $qstr);
71
72    $params = array(
73        new XML_RPC_Value($qstr, 'string'),
74    );
75
76    return communicate_with_trac('ticket.query', $username, $password, $params);
77}
78
79function trac_ticket_get($username, $password, $id)
80{
81    $params = array(
82        new XML_RPC_Value($id, 'int'),
83    );
84    return communicate_with_trac('ticket.get', $username, $password, $params);
85}
86
87?>
Note: See TracBrowser for help on using the repository browser.