@@ -1105,6 +1105,12 @@ func CreateRepository(ctx DBContext, doer, u *User, repo *Repository) (err error | |||||
Type: tp, | Type: tp, | ||||
Config: &CloudBrainConfig{EnableCloudBrain: true}, | Config: &CloudBrainConfig{EnableCloudBrain: true}, | ||||
}) | }) | ||||
} else if tp == UnitTypeBlockChain { | |||||
units = append(units, RepoUnit{ | |||||
RepoID: repo.ID, | |||||
Type: tp, | |||||
Config: &BlockChainConfig{EnableBlockChain: true}, | |||||
}) | |||||
} else { | } else { | ||||
units = append(units, RepoUnit{ | units = append(units, RepoUnit{ | ||||
RepoID: repo.ID, | RepoID: repo.ID, | ||||
@@ -141,6 +141,20 @@ func (cfg *CloudBrainConfig) ToDB() ([]byte, error) { | |||||
return json.Marshal(cfg) | return json.Marshal(cfg) | ||||
} | } | ||||
type BlockChainConfig struct { | |||||
EnableBlockChain bool | |||||
} | |||||
// FromDB fills up a CloudBrainConfig from serialized format. | |||||
func (cfg *BlockChainConfig) FromDB(bs []byte) error { | |||||
return json.Unmarshal(bs, &cfg) | |||||
} | |||||
// ToDB exports a CloudBrainConfig to a serialized format. | |||||
func (cfg *BlockChainConfig) ToDB() ([]byte, error) { | |||||
return json.Marshal(cfg) | |||||
} | |||||
// BeforeSet is invoked from XORM before setting the value of a field of this object. | // BeforeSet is invoked from XORM before setting the value of a field of this object. | ||||
func (r *RepoUnit) BeforeSet(colName string, val xorm.Cell) { | func (r *RepoUnit) BeforeSet(colName string, val xorm.Cell) { | ||||
switch colName { | switch colName { | ||||
@@ -160,6 +174,8 @@ func (r *RepoUnit) BeforeSet(colName string, val xorm.Cell) { | |||||
r.Config = new(DatasetConfig) | r.Config = new(DatasetConfig) | ||||
case UnitTypeCloudBrain: | case UnitTypeCloudBrain: | ||||
r.Config = new(CloudBrainConfig) | r.Config = new(CloudBrainConfig) | ||||
case UnitTypeBlockChain: | |||||
r.Config = new(BlockChainConfig) | |||||
default: | default: | ||||
panic("unrecognized repo unit type: " + com.ToStr(*val)) | panic("unrecognized repo unit type: " + com.ToStr(*val)) | ||||
} | } | ||||
@@ -24,16 +24,7 @@ const ( | |||||
tplBlockChainIndex base.TplName = "repo/blockchain/index" | tplBlockChainIndex base.TplName = "repo/blockchain/index" | ||||
) | ) | ||||
// MustEnableDataset check if repository enable internal cb | |||||
func MustEnableBlockChain(ctx *context.Context) { | |||||
if !ctx.Repo.CanRead(models.UnitTypeBlockChain) { | |||||
ctx.NotFound("MustEnableBlockChain", nil) | |||||
return | |||||
} | |||||
} | |||||
func BlockChainIndex(ctx *context.Context) { | func BlockChainIndex(ctx *context.Context) { | ||||
MustEnableBlockChain(ctx) | |||||
repo := ctx.Repo.Repository | repo := ctx.Repo.Repository | ||||
if repo.ContractAddress == "" || ctx.User.PublicKey == ""{ | if repo.ContractAddress == "" || ctx.User.PublicKey == ""{ | ||||
log.Error("the repo(%d) or the user(%d) has not been initialized in block_chain", repo.RepoID, ctx.User.ID) | log.Error("the repo(%d) or the user(%d) has not been initialized in block_chain", repo.RepoID, ctx.User.ID) | ||||
@@ -568,7 +568,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
reqRepoDatasetWriter := context.RequireRepoWriter(models.UnitTypeDatasets) | reqRepoDatasetWriter := context.RequireRepoWriter(models.UnitTypeDatasets) | ||||
reqRepoCloudBrainReader := context.RequireRepoReader(models.UnitTypeCloudBrain) | reqRepoCloudBrainReader := context.RequireRepoReader(models.UnitTypeCloudBrain) | ||||
reqRepoCloudBrainWriter := context.RequireRepoWriter(models.UnitTypeCloudBrain) | reqRepoCloudBrainWriter := context.RequireRepoWriter(models.UnitTypeCloudBrain) | ||||
reqRepoBlockChainReader := context.RequireRepoReader(models.UnitTypeBlockChain) | |||||
//reqRepoBlockChainReader := context.RequireRepoReader(models.UnitTypeBlockChain) | |||||
//reqRepoBlockChainWriter := context.RequireRepoWriter(models.UnitTypeBlockChain) | //reqRepoBlockChainWriter := context.RequireRepoWriter(models.UnitTypeBlockChain) | ||||
// ***** START: Organization ***** | // ***** START: Organization ***** | ||||
@@ -914,7 +914,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||||
}, context.RepoRef()) | }, context.RepoRef()) | ||||
m.Group("/blockchain", func() { | m.Group("/blockchain", func() { | ||||
m.Get("", reqRepoBlockChainReader, repo.BlockChainIndex) | |||||
m.Get("", repo.BlockChainIndex) | |||||
}, context.RepoRef()) | }, context.RepoRef()) | ||||
m.Group("/wiki", func() { | m.Group("/wiki", func() { | ||||
@@ -12,101 +12,9 @@ | |||||
</div> | </div> | ||||
<div class="column right aligned"> | <div class="column right aligned"> | ||||
212 | |||||
{{.balance}} | |||||
</div> | </div> | ||||
</div> | </div> | ||||
<!-- 中间分割线 --> | |||||
<div class="ui divider"></div> | |||||
<!-- 中下列表展示区 --> | |||||
<div class="ui grid"> | |||||
<div class="row"> | |||||
<div class="ui sixteen wide column"> | |||||
<!-- 排序区 --> | |||||
<div class="ui sixteen wide column"> | |||||
<div class="ui two column stackable grid"> | |||||
<div class="column"> | |||||
</div> | |||||
<div class="column right aligned"> | |||||
<div class="ui right dropdown type jump item"> | |||||
<span class="text"> | |||||
{{.i18n.Tr "repo.issues.filter_sort"}}<i class="dropdown icon"></i> | |||||
</span> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<!-- 任务展示 --> | |||||
<div class="balance list"> | |||||
{{range .Tasks}} | |||||
<div class="ui grid stackable item"> | |||||
<div class="row"> | |||||
<!-- 项目名字 --> | |||||
<div class="four wide column"> | |||||
<span class="fitted">{{svg "octicon-tasklist" 16}}</span> | |||||
<span class="fitted">项目名字《待补充》</span> | |||||
</a> | |||||
</div> | |||||
<!--余额状态 --> | |||||
<div class="three wide column job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}"> | |||||
余额:待补充 | |||||
</div> | |||||
<!-- 任务创建时间 --> | |||||
<div class="three wide column"> | |||||
<span class="ui text center">{{svg "octicon-flame" 16}} {{TimeSinceUnix .CreatedUnix $.Lang}}</span> | |||||
</div> | |||||
<!-- 查看 --> | |||||
<div class="one wide column"> | |||||
<span class="ui text clipboard"> | |||||
<a class="title" href="{{$.Link}}/{{.JobID}}"> | |||||
<span class="fitted">查看</span> | |||||
</a> | |||||
</span> | |||||
</div> | |||||
<!-- 评分 --> | |||||
<div class="one wide column"> | |||||
<div class="ui text center clipboard"> | |||||
<a class="title" onclick="stop(this)" href="{{if and (ne .Status "WAITING") (eq .JobType "BENCHMARK")}}{{$.Link}}/{{.JobID}}/benchmark{{else}}javascript:void(0);{{end}}" style="{{if and (ne .Status "WAITING") (eq .JobType "BENCHMARK")}}{{else}}color:#CCCCCC{{end}}"> | |||||
<span class="fitted">评分</span> | |||||
</a> | |||||
</div> | |||||
</div> | |||||
<!-- 删除镜像 --> | |||||
<div class="one wide column"> | |||||
<div class="ui text center clipboard"> | |||||
<form id="delForm-{{.JobID}}" action="{{if ne .Status "STOPPED"}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/del{{end}}" method="post"> | |||||
{{$.CsrfTokenHtml}} | |||||
<a class="fitted" onclick="assertDelete(this)" style="{{if ne .Status "STOPPED"}}color:#CCCCCC{{end}}; font-size:16px; font-weight:bold">删除</a> | |||||
</form> | |||||
</div> | |||||
</div> | |||||
<!-- 调试 --> | |||||
<div class="one wide column"> | |||||
<div class="ui text center clipboard"> | |||||
<a class="title" onclick="stop(this)" href="{{if not .CanDebug}}javascript:void(0){{else}}{{$.Link}}/{{.JobID}}/debug{{end}}" style="{{if not .CanDebug}}color:#CCCCCC{{end}}"> | |||||
<span class="fitted">调试</span> | |||||
</a> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
<!-- {{end}} {{template "base/paginate" .}} --> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | </div> | ||||
{{template "base/footer" .}} | {{template "base/footer" .}} |
@@ -148,8 +148,6 @@ | |||||
<a class="{{if .PageIsCloudBrain}}active{{end}} item" href="{{.RepoLink}}/blockchain"> | <a class="{{if .PageIsCloudBrain}}active{{end}} item" href="{{.RepoLink}}/blockchain"> | ||||
{{svg "octicon-balance" 16}} | {{svg "octicon-balance" 16}} | ||||
{{.i18n.Tr "repo.balance"}} | {{.i18n.Tr "repo.balance"}} | ||||
</svg> | |||||
</a> | </a> | ||||
{{template "custom/extra_tabs" .}} | {{template "custom/extra_tabs" .}} | ||||