• 联动加入redmine的wik


     
    <?

    php
    error_reporting(E_ERROR);
    date_default_timezone_set('Asia/Shanghai');

    $red_server = "http://redmine.meilishuo.com/projects";
    $project_name    = "opupdate";
    $wiki_name = "故障纪录";
    $url        = $red_server . "/$project_name/wiki/wiki.json";






    create_wiki($url, "故障记录-" . date('Y-m'), $wiki_name, $message);




    function create_wiki( $url, $title, $wiki_name, $message) {
        $level = preg_split('///', $title);
        for ( $i = 0; $i <= count($level); $i++) {
            $suffix = ".json";
            if ( $i == 0 ) {
                $url = preg_replace('/wiki.*/i', "wiki/$wiki_name", $url);
            }
            if ( ! strstr($url, $suffix)) {
                $url .= $suffix;
            }
            $page = get_page_content($url, "GET", "");
            $org = json_decode( $page["content"] );
            $org_content = $org->{'wiki_page'}->{'text'};
            if ( 0 == $i ) {
                $check_str = $wiki_name;
                $parent = "Wiki";
            } else {
                $parent = $i == 1 ? $wiki_name : $level[($i-1)];
                $check_str = $level[$i];
            }
            $check_result = strstr($org->{'wiki_page'}->{'text'}, $check_str);
            if ( ! $check_result && 0 == $i ) {
                $new_content = "h1. $check_str h2. [[$level[$i]]]";
            } elseif ( count($level) == $i ) {
                $new_content = "h3. " . strftime("%Y-%m-%d %H:%M:%S") . " : $message";
            } elseif ( ! $check_result ) {
                    $last = $level[($i-1)];
                    $new_content = "h1. $last h2. [[$level[$i]]]";
            }
            $org_content .= " $new_content ";
            $org->{'wiki_page'}->{'text'} = $org_content;
            $org->{'wiki_page'}->{'parent_title'} = $parent;
            $new = json_encode($org);
            if ( isset($new_content) ) {
                $response = get_page_content($url, "PUT", $new);
                if ( 200 == $response['http_code']) {
                    print_r("Wiki : $url updated. $new ");
                } elseif ( 201 == $response['http_code']) {
                    print_r("Wiki : $url created. ");
                } else {
                    print_r("Failed to update wiki : $url " . $response['http_code'] . " ");
                }
            }
            $url = preg_replace('/wiki.*/i', "wiki/$level[$i]", $url);
        }
    }
    $page = get_page_content($url, "GET", "");
    $org = json_decode( $page["content"] );
    if ( ! strstr($org->{'wiki_page'}->{'text'}, $wiki_name) ) {
        $org_content = $org->{'wiki_page'}->{'text'};
        $new_content = "* [[$wiki_name]]";
        $org_content .= " $new_content ";
        $org->{'wiki_page'}->{'text'} = $org_content;
        $new = json_encode($org);
        $response = get_page_content($url, "PUT", $new);
        if ( 201 == $response['http_code']) {
            printf("Wiki : $wiki_name created. ");
        }
    }


    function get_page_content( $url, $func, $curl_data ) {
        $header = array(
            "X-Redmine-API-Key: 5b01xxxxxxxddddddddddddddddddd",
            "Content-Type: application/json"
        );
        $options = array(
            CURLOPT_HTTPHEADER      => $header,
            CURLOPT_RETURNTRANSFER  => true,         // return web page
            CURLOPT_HEADER          => false,        // don't return headers
            CURLOPT_FOLLOWLOCATION  => true,         // follow redirects
            CURLOPT_ENCODING        => "",           // handle all encodings
            CURLOPT_USERAGENT       => "Release Shell",     // who am i
            CURLOPT_AUTOREFERER     => true,         // set referer on redirect
            CURLOPT_CONNECTTIMEOUT  => 10,          // timeout on connect
            CURLOPT_TIMEOUT         => 10,          // timeout on response
            CURLOPT_MAXREDIRS       => 10,           // stop after 10 redirects
            CURLOPT_CUSTOMREQUEST   => $func,
            CURLOPT_VERBOSE         => 0,                //
            CURLOPT_POSTFIELDS      => $curl_data    // this are my post vars
        );
        if ( "POST" == $func ) {
            $post_opt = array(
                CURLOPT_POST            => 1,            // i am sending post data
            );
            $options = array_merge($options, $post_opt);
        }
        $ch      = curl_init($url);
        curl_setopt_array($ch,$options);
        $content = curl_exec($ch);
        $err     = curl_errno($ch);
        $errmsg  = curl_error($ch) ;
        $header  = curl_getinfo($ch);
        curl_close($ch);
        $header['content'] = $content;
        $header['errmsg'] = $errmsg;
        return $header;
    }

  • 相关阅读:
    MVC实现类似QQ的网页聊天功能-ajax(下)
    SQLServer中跨库复制数据
    MVC实现类似QQ的网页聊天功能-Ajax(上)
    好看的Select下拉框是如何制造的
    Vss服务端用户存在,但客户端登陆不进去
    Jquery-uploadify多文件上传插件使用介绍
    jQuery mouseover,mouseout事件多次执行的问题处理
    解决svn状态图标不显示的办法
    ASP.NET获取用户端的真实IP
    js中时间戳与日期转换-js日期操作
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6834341.html
Copyright © 2020-2023  润新知