当前位置: 首页>>代码示例>>PHP>>正文


PHP kohana::debug方法代码示例

本文整理汇总了PHP中kohana::debug方法的典型用法代码示例。如果您正苦于以下问题:PHP kohana::debug方法的具体用法?PHP kohana::debug怎么用?PHP kohana::debug使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在kohana的用法示例。


在下文中一共展示了kohana::debug方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: subir

 /**
  * Sube la información en la categoria indicada
  *
  * @param array $datos Los datos recibitos por POST
  * @param string $categoria Categoria a la cual pertenece el envio
  * @return int  Retorna el ID del envio si hubo exito, sino retorna 0 o FALSE
  */
 public function subir(array $datos, $categoria)
 {
     $exito = FALSE;
     $categoria_id = ORM::factory("categoria")->where("nombre", "=", $categoria)->find()->id;
     // Si la categoria no existe en la base de datos sale con error
     if (!$categoria_id) {
         return FALSE;
     }
     // Hace la validacion
     if ($this->values($datos)->check()) {
         // Concatenamos los datos de las Actividades
         if ($categoria == "Actividades") {
             $pre = "<b>Lugar:</b> " . $datos['lugar'] . "<br>\n\t\t\t<b>Fecha:</b> " . $datos['fecha'] . "<br>\n\t\t\t<b>Hora:</b> " . $datos['hora'] . "<br><br>\n\t\t    ";
             $this->contenido = $pre . $datos['contenido'];
             echo kohana::debug($datos);
         }
         // Los datos han sido validados y los guardamos
         $this->save();
         // Guarda la relacion entre el envio y la categoria
         $contenido = ORM::factory("contenido");
         $contenido->envio_id = $this->id;
         // Obtiene el id de la categoria
         $contenido->categoria_id = $categoria_id;
         $contenido->save();
         $exito = $this->id;
     }
     // Llenamos los vectores con los valores que seran mostrados en los campos
     $this->errores = Arr::overwrite($this->errores, $this->validate()->errors(""));
     $this->formulario = Arr::overwrite($this->formulario, $datos);
     return $exito;
 }
开发者ID:reneegonam,项目名称:CoCo,代码行数:38,代码来源:envio.php

示例2: testDateOutOfRange

 /** 
  * Test that a basic date out of range test works.
  */
 public function testDateOutOfRange()
 {
     // Need a test rule we can use to check it works
     $ruleArr = array('verification_rule:title' => 'test', 'verification_rule:test_type' => 'PeriodWithinYear', 'verification_rule:error_message' => 'test error', 'metaFields:metadata' => "Tvk=TESTKEY\nStartDate=0801\nEndDate=0831", 'metaFields:data' => "");
     $rule = ORM::Factory('verification_rule');
     $rule->set_submission_data($ruleArr, false);
     if (!$rule->submit()) {
         echo kohana::debug($rule->getAllErrors());
         throw new exception('Failed to create test rule');
     }
     try {
         $response = data_entry_helper::http_post($this->request, array('sample' => json_encode(array('sample:survey_id' => 1, 'sample:date' => '12/09/2012', 'sample:entered_sref' => 'SU1234', 'sample:entered_sref_system' => 'osgb')), 'occurrences' => json_encode(array(array('occurrence:taxa_taxon_list_id' => $this->ttl->id))), 'rule_types' => json_encode(array('PeriodWithinYear'))));
         $errors = json_decode($response['output'], true);
         $this->assertTrue(is_array($errors), 'Errors list not returned');
         $this->assertTrue(isset($errors[0]['taxa_taxon_list_id']) && $errors[0]['taxa_taxon_list_id'] === $this->ttl->id, 'Incorrect taxa_taxon_list_id returned');
         $this->assertTrue(isset($errors[0]['message']) && $errors[0]['message'] === 'test error', 'Incorrect message returned');
         foreach ($rule->verification_rule_metadata as $m) {
             $m->delete();
         }
         $rule->delete();
     } catch (Exception $e) {
         foreach ($rule->verification_rule_metadata as $m) {
             $m->delete();
         }
         $rule->delete();
     }
 }
开发者ID:BirenRathod,项目名称:indicia-code,代码行数:30,代码来源:data_cleanerTest.php

示例3: fetch_migrations

 public function fetch_migrations()
 {
     try {
         $this->find_all();
     } catch (Database_Exception $a) {
         if ($a->getCode() == 1146) {
             //Tabla no existe
             echo kohana::debug($a->getMessage());
         }
     }
 }
开发者ID:HappyKennyD,项目名称:teest,代码行数:11,代码来源:Migration.php

示例4: email

 public function email()
 {
     include Kohana::find_file('vendor/mailchimp', 'MCAPI');
     $config = Kohana::config('mailchimp');
     $mailchimp = new MCAPI($config['apikey']);
     $owners = ORM::factory('owner')->find_all();
     foreach ($owners as $owner) {
         if (empty($owner->email)) {
             continue;
         }
         echo kohana::debug($mailchimp->listSubscribe($config['list_id'], $owner->email, '', 'text', false, true, true, false));
     }
     die('done');
 }
开发者ID:plusjade,项目名称:pluspanda-php,代码行数:14,代码来源:utils.php

示例5: data_cleaner_without_polygon_data_cleaner_postprocess

/** 
 * Postprocessing for building a geom from the list of grid squares to make an SQL based check easy
 */
function data_cleaner_without_polygon_data_cleaner_postprocess($id, $db)
{
    $db->query('create temporary table geoms_without_polygon (geom geometry)');
    try {
        $r = $db->select('key, header_name')->from('verification_rule_data')->where('verification_rule_id', $id)->in('header_name', array('10km_GB', '10km_Ireland', '1km_GB', '1km_Ireland', '10km_CI', '1km_CI'))->get()->result();
        $wktList = array();
        foreach ($r as $gridSquare) {
            switch ($gridSquare->header_name) {
                case '10km_GB':
                case '1km_GB':
                    $system = 'osgb';
                    break;
                case '10km_Ireland':
                case '1km_Ireland':
                    $system = 'osie';
                    break;
                case '10km_CI':
                case '1km_CI':
                    $system = 'utm30ed50';
                    break;
                default:
                    continue;
                    // we don't know this grid square type - should not have come back from the query
            }
            $srid = kohana::config('sref_notations.internal_srid');
            try {
                $wktList[] = "(st_geomfromtext('" . spatial_ref::sref_to_internal_wkt($gridSquare->key, $system) . "', {$srid}))";
            } catch (Exception $e) {
                kohana::debug('alert', 'Did not import grid square ' . $gridSquare->key . " for rule {$id}");
                error::log_error('Importing without polygon rules', $e);
            }
        }
        if (!empty($wktList)) {
            $db->query("insert into geoms_without_polygon values " . implode(',', $wktList));
        }
        $date = date("Ymd H:i:s");
        $uid = $_SESSION['auth_user']->id;
        $db->query("delete from verification_rule_data where verification_rule_id={$id} and header_name='geom'");
        $db->query('insert into verification_rule_data (verification_rule_id, header_name, data_group, key, value, value_geom, created_on, created_by_id, updated_on, updated_by_id) ' . "select {$id}, 'geom', 1, 'geom', '-', st_union(geom), '{$date}', {$uid}, '{$date}', {$uid} from geoms_without_polygon");
        $db->query('drop table geoms_without_polygon');
    } catch (Exception $e) {
        $db->query('drop table geoms_without_polygon');
        throw $e;
    }
}
开发者ID:BirenRathod,项目名称:indicia-code,代码行数:48,代码来源:data_cleaner_without_polygon.php

示例6: _get_from_FILES

 private function _get_from_FILES()
 {
     $validation = Validate::factory($_FILES, 'uploads');
     $validation->rule('file', 'upload::not_empty')->rule('file', 'upload::type', array(array('csv')));
     if ($validation->check()) {
         $this->hash = md5(time());
         Upload::save($_FILES['file'], $this->hash, sys_get_temp_dir());
     } else {
         foreach ($validation->errors() as $err) {
             switch ($err[0]) {
                 case 'upload::not_empty':
                     throw new Kohana_Exception('You did not choose a file to upload!');
                 case 'upload::type':
                     throw new Kohana_Exception('You can only import CSV files.');
                 default:
                     throw new Kohana_Exception('An error occured.<br />' . kohana::debug($err));
             }
         }
     }
 }
开发者ID:halka139,项目名称:kohana_webdb,代码行数:20,代码来源:csv.php

示例7: build_query_results

 /**
  * Builds a query to extract data from the requested entity, and also
  * include relationships to foreign key tables and the caption fields from those tables.
  * @param boolean $count if set to true then just returns a record count.
  * @todo Review this code for SQL Injection attack!
  * @todo Basic website filter done, but not clever enough.
  */
 protected function build_query_results($count = false)
 {
     $this->foreign_keys = array();
     $this->db->from($this->viewname);
     // Select all the table columns from the view
     if (!$count) {
         $fields = array_keys(postgreSQL::list_fields($this->viewname, $this->db));
         $usedFields = array();
         $request = array_merge($_GET, $_POST);
         $columns = isset($request['columns']) ? explode(',', $request['columns']) : false;
         foreach ($fields as &$field) {
             if (!$columns || in_array($field, $columns)) {
                 // geom binary data is no good to anyone. So convert to WKT.
                 if (preg_match('/^(.+_)?geom$/', $field)) {
                     $usedFields[] = 'st_astext(' . $this->viewname . ".{$field}) as {$field}";
                 } else {
                     $usedFields[] = $this->viewname . '.' . $field;
                 }
             }
         }
         $select = implode(', ', $usedFields);
         $this->db->select($select);
     }
     // If not in the warehouse, then the entity must explicitly allow full access, or contain a website ID to filter on.
     if (!$this->in_warehouse && !array_key_exists('website_id', $this->view_columns) && !array_key_exists('from_website_id', $this->view_columns) && !in_array($this->entity, $this->allow_full_access)) {
         // If access is from remote website, then either table allows full access or exposes a website ID to filter on.
         Kohana::log('info', $this->viewname . ' does not have a website_id - access denied');
         throw new EntityAccessError('No access to entity ' . $this->entity . ' allowed through view ' . $this->viewname, 1004);
     }
     if (array_key_exists('website_id', $this->view_columns)) {
         $websiteFilterField = 'website_id';
     } elseif (array_key_exists('from_website_id', $this->view_columns)) {
         $websiteFilterField = 'from_website_id';
     }
     // Loading a list of records (no record ID argument)
     if (isset($websiteFilterField)) {
         // we have a filter on website_id to apply
         if ($this->website_id) {
             // check if a request for shared data is being made. Also check this is valid to prevent injection.
             if (isset($_REQUEST['sharing']) && preg_match('/[reporting|peer_review|verification|data_flow|moderation]/', $_REQUEST['sharing'])) {
                 // request specifies the sharing mode (i.e. the task being performed, such as verification, moderation). So
                 // we can use this to work out access to other website data.
                 $this->db->join('index_websites_website_agreements as iwwa', array('iwwa.from_website_id' => $this->viewname . '.' . $websiteFilterField, 'iwwa.provide_for_' . $_REQUEST['sharing'] . "='t'" => ''), NULL, 'LEFT');
                 $this->db->where('(' . $this->viewname . '.' . $websiteFilterField . ' IS NULL OR iwwa.to_website_id=' . $this->website_id . ')');
             } else {
                 $this->db->in($this->viewname . '.' . $websiteFilterField, array(null, $this->website_id));
             }
         } elseif ($this->in_warehouse && !$this->user_is_core_admin) {
             // User is on Warehouse, but not core admin, so do a filter to all their websites.
             $allowedWebsiteValues = array_merge($this->user_websites);
             $allowedWebsiteValues[] = null;
             $this->db->in('website_id', $allowedWebsiteValues);
         }
     }
     if ($this->uri->total_arguments() == 0) {
         // filter the list according to the parameters in the call
         $this->apply_get_parameters_to_db($count);
     } else {
         $this->db->where($this->viewname . '.id', $this->uri->argument(1));
     }
     try {
         if ($count) {
             return $this->db->count_records();
         } else {
             $r = $this->db->get()->result_array(FALSE);
             // If we got no record but asked for a specific one, check if this was a permissions issue?
             if (!count($r) && $this->uri->total_arguments() !== 0 && !$this->check_record_access($this->entity, $this->uri->argument(1), $this->website_id, isset($_REQUEST['sharing']) ? $_REQUEST['sharing'] : false)) {
                 Kohana::log('info', 'Attempt to access existing record failed - website_id ' . $this->website_id . ' does not match website for ' . $this->entity . ' id ' . $this->uri->argument(1));
                 throw new AuthorisationError('Attempt to access existing record failed - website_id ' . $this->website_id . ' does not match website for ' . $this->entity . ' id ' . $this->uri->argument(1), 1001);
             }
             return $r;
         }
     } catch (Exception $e) {
         kohana::log('error', 'Error occurred running the following query from a service request:');
         kohana::log('error', $e->getMessage());
         kohana::log('error', $this->db->last_query());
         kohana::log('error', 'Request detail:');
         kohana::log('error', $this->uri->string());
         kohana::log('error', kohana::debug($_REQUEST));
         throw $e;
     }
 }
开发者ID:BirenRathod,项目名称:indicia-code,代码行数:89,代码来源:data.php

示例8: validateAndSubmit

 /**
  * Actually validate and submit the inner submission.
  *
  * @return int Id of the submitted record, or null if this failed.
  * @throws Exception On access denied to the website of an existing record.
  */
 protected function validateAndSubmit()
 {
     $return = null;
     $collapseVals = create_function('$arr', 'if (is_array($arr)) {
        return $arr["value"];
      } else {
        return $arr;
      }');
     // Flatten the array to one that can be validated
     $vArray = array_map($collapseVals, $this->submission['fields']);
     if (!empty($vArray['website_id']) && !empty(self::$authorisedWebsiteId) && $vArray['website_id'] !== self::$authorisedWebsiteId) {
         throw new Exception('Access to write to this website denied.', 2001);
     }
     // If we're editing an existing record, merge with the existing data.
     // NB id is 0, not null, when creating a new user
     if (array_key_exists('id', $vArray) && $vArray['id'] != null && $vArray['id'] != 0) {
         $this->find($vArray['id']);
         $thisValues = $this->as_array();
         unset($thisValues['updated_by_id']);
         unset($thisValues['updated_on']);
         // don't overwrite existing website_ids otherwise things like shared verification portals end up
         // grabbing records to their own website ID.
         if (!empty($thisValues['website_id']) && !empty($vArray['website_id'])) {
             unset($vArray['website_id']);
         }
         // If there are no changed fields between the current and new record, skip the metadata update.
         $exactMatches = array_intersect_assoc($thisValues, $vArray);
         // Allow for different ways of submitting bool. Don't want to trigger metadata updates if submitting 'on' instead of true
         // for example.
         foreach ($vArray as $key => $value) {
             if (isset($this->{$key}) && ($this->{$key} === 't' && ($value === 'on' || $value === 1) || $this->{$key} === 'f' && ($value === 'off' || $value === 0))) {
                 $exactMatches[$key] = $this->{$key};
             }
         }
         $fieldsWithValuesInSubmission = array_intersect_key($thisValues, $vArray);
         $this->wantToUpdateMetadata = count($exactMatches) !== count($fieldsWithValuesInSubmission);
         $vArray = array_merge($thisValues, $vArray);
         $this->existing = true;
     }
     Kohana::log("debug", "About to validate the following array in model " . $this->object_name);
     Kohana::log("debug", kohana::debug($this->sanitise($vArray)));
     try {
         if (array_key_exists('deleted', $vArray) && $vArray['deleted'] == 't') {
             // For a record deletion, we don't want to validate and save anything. Just mark delete it.
             $this->deleted = 't';
             $this->set_metadata();
             $v = $this->save();
         } else {
             // Create a new record by calling the validate method
             $v = $this->validate(new Validation($vArray), true);
         }
     } catch (Exception $e) {
         $v = false;
         $this->errors['general'] = $e->getMessage();
         error::log_error('Exception during validation', $e);
     }
     if ($v) {
         // Record has successfully validated so return the id.
         Kohana::log("debug", "Record " . $this->id . " has validated successfully");
         $return = $this->id;
     } else {
         // Errors.
         Kohana::log("debug", "Record did not validate");
         // Log more detailed information on why
         foreach ($this->errors as $f => $e) {
             Kohana::log("debug", "Field " . $f . ": " . $e);
         }
     }
     return $return;
 }
开发者ID:BirenRathod,项目名称:indicia-code,代码行数:76,代码来源:MY_ORM.php

示例9: tool

 public function tool()
 {
     if (empty($_GET['tool_id'])) {
         die('invalid tool_id');
     }
     $tool_id = valid::id_key($_GET['tool_id']);
     $tool = ORM::factory('tool', $tool_id);
     if (!$tool->loaded) {
         die('invalid tool');
     }
     $toolname = strtolower($tool->system_tool->name);
     # load the tool parent
     $parent = ORM::factory($toolname, $tool->parent_id);
     if (!$parent->loaded) {
         die('invalid parent table');
     }
     # build the object.
     $export = new stdClass();
     $export->name = $toolname;
     # export the parent table.
     $parent_table = new stdClass();
     foreach ($parent->table_columns as $key => $value) {
         $parent_table->{$key} = $parent->{$key};
     }
     $export->parent_table = $parent_table;
     # export any child tables.
     $child_tables = new stdClass();
     # loop through data from available child tables.
     foreach ($parent->has_many as $table_name) {
         $table_name = inflector::singular($table_name);
         $child_tables->{$table_name} = array();
         # get the child table model so we can iterate through the fields.
         $table = ORM::factory($table_name);
         # get any rows beloning to the parent.
         $rows = ORM::factory($table_name)->where(array('fk_site' => $this->site_id, "{$toolname}_id" => $parent->id))->find_all();
         foreach ($rows as $row) {
             $object = new stdClass();
             foreach ($table->table_columns as $key => $value) {
                 $object->{$key} = $row->{$key};
             }
             array_push($child_tables->{$table_name}, $object);
         }
     }
     $export->child_tables = $child_tables;
     # get the css file.
     $export->css = file_get_contents($this->assets->themes_dir("{$this->theme}/tools/{$toolname}/_created/{$parent->id}/{$parent->type}_{$parent->view}.css"));
     $json = json_encode($export);
     echo '<h2>Copy this exactly and place into the importer=)</h2>';
     echo "<textarea style='width:99%;height:400px;'>{$json}</textarea>";
     die;
     echo kohana::debug($export);
     die;
     # just testing ...
     echo self::import($json);
     die;
 }
开发者ID:plusjade,项目名称:plusjade,代码行数:56,代码来源:export.php

示例10: saveControlList

 private function saveControlList($list, $blockId, $websiteId)
 {
     $weight = 0;
     foreach ($list as $control) {
         $changed = false;
         if (substr($control['id'], 0, 8) == 'control-') {
             $ctrlId = str_replace('control-', '', $control['id']);
             $model = ORM::factory($_GET['type'] . '_attributes_website', $ctrlId);
         } elseif (substr($control['id'], 0, 10) == 'attribute-') {
             $attrId = str_replace('attribute-', '', $control['id']);
             // get model for a new record
             $model = ORM::factory($_GET['type'] . '_attributes_website');
             $attrVar = $this->type . '_attribute_id';
             // link the model to the existing attribute we have the ID for
             $model->{$attrVar} = $attrId;
             $model->restrict_to_survey_id = $this->_survey_id;
             $model->website_id = $websiteId;
             $changed = true;
         } else {
             continue;
         }
         if ($model->weight != $weight) {
             $model->weight = $weight;
             $changed = true;
         }
         if ($model->form_structure_block_id != $blockId) {
             $model->form_structure_block_id = $blockId;
             $changed = true;
         }
         $weight++;
         if (isset($control['deleted']) && $control['deleted']) {
             // deleting, so existing control must be removed
             if (substr($control['id'], 0, 8) == 'control-') {
                 $model->delete();
             }
             $id = null;
         } elseif ($changed) {
             $model->set_metadata();
             $model->save();
             if (count($model->getAllErrors()) !== 0) {
                 throw new Exception(kohana::debug($model->getAllErrors()));
             }
         }
     }
 }
开发者ID:BirenRathod,项目名称:indicia-code,代码行数:45,代码来源:attribute_by_survey.php

示例11: update

 private function update()
 {
     $sites = ORM::factory('site')->find_all();
     foreach ($sites as $site) {
         # $theme_dir = $this->assets->themes_dir();
         $theme_dir = DATAPATH . "{$site->subdomain}/themes";
         $themes = Jdirectory::contents($theme_dir, 'root', 'list_dir');
         foreach ($themes as $theme) {
             $tool_dir = "{$theme_dir}/{$theme}/tools";
             if (!is_dir($tool_dir)) {
                 continue;
             }
             $toolnames = Jdirectory::contents($tool_dir, 'root', 'list_dir');
             foreach ($toolnames as $toolname) {
                 $created = "{$theme_dir}/{$theme}/tools/{$toolname}/_created";
                 if (!is_dir($created)) {
                     continue;
                 }
                 $instances = Jdirectory::contents($created, 'root', 'list_dir');
                 foreach ($instances as $instance) {
                     $path = "{$theme_dir}/{$theme}/tools/{$toolname}/_created/{$instance}";
                     if (is_dir($path)) {
                         rename($path, "{$theme_dir}/{$theme}/tools/{$toolname}/{$instance}");
                     }
                 }
                 if (is_dir($created)) {
                     rmdir($created);
                 }
             }
         }
     }
     echo 'done';
     die;
     echo kohana::debug($themes);
     die;
 }
开发者ID:plusjade,项目名称:plusjade,代码行数:36,代码来源:utada.php

示例12:

<dl>
	<dt>Kadldap::all_contacts()</dt>
	<dd><?php 
    echo kohana::debug($kadldap->all_contacts());
    ?>
</dd>
	<dt>all_distribution_groups</dt>
	<dd><?php 
    echo kohana::debug($kadldap->all_distribution_groups());
    ?>
</dd>
	<dt>get_account_suffix</dt>
	<dd><?php 
    echo kohana::debug($kadldap->get_account_suffix());
    ?>
</dd>
	<dt>Kadldap::user_info($username)</dt>
	<dd><?php 
    echo kohana::debug($kadldap->user_info(auth::instance()->get_user()));
    ?>
</dd>
	<dt>Kadldap::user_groups($username)</dt>
	<dd><?php 
    echo kohana::debug($kadldap->user_groups(auth::instance()->get_user()));
    ?>
</dd>
</dl>

<?php 
}
开发者ID:phpclub,项目名称:kohana_kadldap,代码行数:30,代码来源:index.php

示例13: stop

    /**
     * KMS method to output hard error messages to users
     * @param  string  error message
     * @param  mixed   optional arguments for debugging
     * @param  string  page title
     */
    public static function stop($message, $args = 'Passed in mixed arguments', $title = 'KMS Error', $debug = FALSE)
    {
        if ($args !== 'Passed in mixed arguments') {
            $message .= "\n<p>Arguments:</p>" . kohana::debug($args);
        }
        $message .= "\n<p><a href=\"javascript:history.back()\">&laquo; Back</a></p>";
        // header status
        if (isset($_SERVER['SERVER_PROTOCOL'])) {
            $protocol = $_SERVER['SERVER_PROTOCOL'];
        } else {
            $protocol = 'HTTP/1.1';
        }
        header($protocol . ' 500 Internal Server Error');
        ob_clean();
        ob_start();
        ?>
	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
	<html xmlns="http://www.w3.org/1999/xhtml" <?php 
        if (function_exists('language_attributes')) {
            language_attributes();
        }
        ?>
>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<title><?php 
        echo $title;
        ?>
</title>
		<link rel="stylesheet" href="css/install.css" type="text/css" />
		<?php 
        echo html::style('kms-asset/css/error.css');
        ?>
	</head>
	<body>
		<p><?php 
        echo $message;
        ?>
</p>
	</body>
	</html>
	<?php 
        $response = ob_get_clean();
        if ($debug === FALSE) {
            die($response);
        } else {
            return $response;
        }
    }
开发者ID:ngonchan,项目名称:Kooshy,代码行数:55,代码来源:kms.php


注:本文中的kohana::debug方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。