Merge branch 'master' of github.com:easysoft/zentaopms

Conflicts:
	module/common/lang/en.php
	module/common/lang/menuOrder.php
	module/common/lang/zh-cn.php
This commit is contained in:
wangyidong
2015-02-28 17:29:16 +08:00
15 changed files with 218 additions and 28 deletions
+5 -1
View File
@@ -278,13 +278,14 @@ $lang->user->menu = $lang->company->menu;
$lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => 'Index|admin|index');
$lang->admin->menu->extension = array('link' => 'Extension|extension|browse', 'subModule' => 'extension,editor');
$lang->admin->menu->extension = array('link' => 'Extension|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->custom = array('link' => 'Custom|custom|index', 'subModule' => 'custom');
$lang->admin->menu->mail = array('link' => 'Email|mail|index', 'subModule' => 'mail');
$lang->admin->menu->convert = array('link' => 'Import|convert|index', 'subModule' => 'convert');
$lang->admin->menu->backup = array('link' => 'Backup|backup|index', 'subModule' => 'backup');
$lang->admin->menu->cron = array('link' => 'Cron|cron|index', 'subModule' => 'cron');
$lang->admin->menu->trashes = array('link' => 'Trash|action|trash', 'subModule' => 'action');
$lang->admin->menu->dev = array('link' => 'Develop|dev|api', 'alias' => 'db', 'subModule' => 'dev,editor');
$lang->convert = new stdclass();
$lang->upgrade = new stdclass();
@@ -295,6 +296,7 @@ $lang->custom = new stdclass();
$lang->editor = new stdclass();
$lang->mail = new stdclass();
$lang->cron = new stdclass();
$lang->dev = new stdclass();
$lang->convert->menu = $lang->admin->menu;
$lang->upgrade->menu = $lang->admin->menu;
@@ -305,6 +307,7 @@ $lang->extension->menu = $lang->admin->menu;
$lang->custom->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
$lang->mail->menu = $lang->admin->menu;
$lang->dev->menu = $lang->admin->menu;
/* Groups. */
$lang->menugroup = new stdclass();
@@ -330,6 +333,7 @@ $lang->menugroup->extension = 'admin';
$lang->menugroup->custom = 'admin';
$lang->menugroup->editor = 'admin';
$lang->menugroup->mail = 'admin';
$lang->menugroup->dev = 'admin';
/* Error info. */
$lang->error = new stdclass();
+3 -1
View File
@@ -114,7 +114,8 @@ $lang->admin->menuOrder[30] = 'custom';
$lang->admin->menuOrder[40] = 'convert';
$lang->admin->menuOrder[45] = 'cron';
$lang->admin->menuOrder[50] = 'backup';
$lang->admin->menuOrder[55] = 'trashes';
$lang->admin->menuOrder[55] = 'dev';
$lang->admin->menuOrder[60] = 'trashes';
$lang->convert->menuOrder = $lang->admin->menuOrder;
$lang->upgrade->menuOrder = $lang->admin->menuOrder;
$lang->action->menuOrder = $lang->admin->menuOrder;
@@ -125,3 +126,4 @@ $lang->mail->menuOrder = $lang->admin->menuOrder;
$lang->custom->menuOrder = $lang->admin->menuOrder;
$lang->backup->menuOrder = $lang->admin->menuOrder;
$lang->cron->menuOrder = $lang->admin->menuOrder;
$lang->dev->menuOrder = $lang->admin->menuOrder;
+5 -1
View File
@@ -278,13 +278,14 @@ $lang->user->menu = $lang->company->menu;
$lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => '首页|admin|index');
$lang->admin->menu->extension = array('link' => '扩展|extension|browse', 'subModule' => 'extension,editor');
$lang->admin->menu->extension = array('link' => '插件|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->custom = array('link' => '自定义|custom|index', 'subModule' => 'custom');
$lang->admin->menu->mail = array('link' => '发信|mail|index', 'subModule' => 'mail');
$lang->admin->menu->convert = array('link' => '导入|convert|index', 'subModule' => 'convert');
$lang->admin->menu->backup = array('link' => '备份|backup|index', 'subModule' => 'backup');
$lang->admin->menu->cron = array('link' => '计划任务|cron|index', 'subModule' => 'cron');
$lang->admin->menu->trashes = array('link' => '回收站|action|trash', 'subModule' => 'action');
$lang->admin->menu->dev = array('link' => '二次开发|dev|api', 'alias' => 'db', 'subModule' => 'dev,editor');
$lang->convert = new stdclass();
$lang->upgrade = new stdclass();
@@ -295,6 +296,7 @@ $lang->custom = new stdclass();
$lang->editor = new stdclass();
$lang->mail = new stdclass();
$lang->cron = new stdclass();
$lang->dev = new stdclass();
$lang->convert->menu = $lang->admin->menu;
$lang->upgrade->menu = $lang->admin->menu;
@@ -305,6 +307,7 @@ $lang->extension->menu = $lang->admin->menu;
$lang->custom->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
$lang->mail->menu = $lang->admin->menu;
$lang->dev->menu = $lang->admin->menu;
/* 菜单分组。*/
$lang->menugroup = new stdclass();
@@ -330,6 +333,7 @@ $lang->menugroup->extension = 'admin';
$lang->menugroup->custom = 'admin';
$lang->menugroup->editor = 'admin';
$lang->menugroup->mail = 'admin';
$lang->menugroup->dev = 'admin';
/* 错误提示信息。*/
$lang->error = new stdclass();
+24
View File
@@ -0,0 +1,24 @@
<?php
class dev extends control
{
public function api()
{
$this->view->tables = $this->dev->getTables();
$this->view->tab = 'api';
$this->view->position[] = html::a(inlink('api'), $this->lang->dev->common);
$this->view->position[] = $this->lang->dev->api;
$this->display();
}
public function db($table = '')
{
$this->view->tables = $this->dev->getTables();
$this->view->tab = 'db';
$this->view->selectedTable = $table;
$this->view->tab = 'db';
$this->view->fields = $table ? $this->dev->descTable($table) : array();
$this->view->position[] = html::a(inlink('api'), $this->lang->dev->common);
$this->view->position[] = $this->lang->dev->db;
$this->display();
}
}
View File
+14
View File
@@ -0,0 +1,14 @@
<?php
$lang->dev->common = '二次开发';
$lang->dev->api = 'API';
$lang->dev->db = '数据库';
$lang->dev->editor = '编辑器';
$lang->dev->dbList = '数据库';
$lang->dev->fields = array();
$lang->dev->fields['id'] = '序号';
$lang->dev->fields['name'] = '字段';
$lang->dev->fields['desc'] = '描述';
$lang->dev->fields['type'] = '类型';
$lang->dev->fields['length'] = '长度';
$lang->dev->fields['null'] = '是否可空';
+101
View File
@@ -0,0 +1,101 @@
<?php
class devModel extends model
{
public function getTables()
{
$this->dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
$sql = "SHOW TABLES";
$tables = array();
$datatables = $this->dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
foreach($datatables as $table)
{
$tables[current($table)] = current($table);
}
return $tables;
}
public function descTable($table)
{
$module = substr($table, strpos($table, '_') + 1);
try
{
if($module == 'case') $module = 'testcase';
$this->app->loadLang($module);
}
catch(PDOException $e)
{
$this->lang->$module = new stdclass();
}
try
{
$this->dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
$sql = "DESC $table";
$rawFields = $this->dbh->query($sql)->fetchAll();
$this->dbh->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL);
}
catch (PDOException $e)
{
$this->sqlError($e);
}
foreach($rawFields as $rawField)
{
$firstPOS = strpos($rawField->type, '(');
$type = substr($rawField->type, 0, $firstPOS > 0 ? $firstPOS : strlen($rawField->type));
$type = str_replace(array('big', 'small', 'medium', 'tiny'), '', $type);
$field = array();
$field['name'] = isset($this->lang->$module->{$rawField->field}) ? $this->lang->$module->{$rawField->field} : '';
$field['null'] = $rawField->null;
if($type == 'enum' or $type == 'set')
{
$rangeBegin = $firstPOS + 2; // Remove the first quote.
$rangeEnd = strrpos($rawField->type, ')') - 1; // Remove the last quote.
$range = substr($rawField->type, $rangeBegin, $rangeEnd - $rangeBegin);
$field['type'] = $rawField->type;
$field['options']['enum'] = str_replace("','", ',', $range);
}
elseif($type == 'varchar')
{
$begin = $firstPOS + 1;
$end = strpos($rawField->type, ')', $begin);
$length = substr($rawField->type, $begin, $end - $begin);
$field['type'] = 'varchar';
$field['options']['max'] = $length;
$field['options']['min'] = 0;
}
elseif($type == 'char')
{
$begin = $firstPOS + 1;
$end = strpos($rawField->type, ')', $begin);
$length = substr($rawField->type, $begin, $end - $begin);
$field['type'] = 'char';
$field['options']['max'] = $length;
$field['options']['min'] = 0;
}
elseif($type == 'int')
{
$begin = $firstPOS + 1;
$end = strpos($rawField->type, ')', $begin);
$length = substr($rawField->type, $begin, $end - $begin);
$field['type'] = 'int';
$field['options']['max'] = $length;
$field['options']['min'] = 0;
}
elseif($type == 'float' or $type == 'double')
{
$field['type'] = 'float';
}
elseif($type == 'date')
{
$field['type'] = 'date';
}
else
{
$field['type'] = $type;
}
$fields[$rawField->field] = $field;
}
return $fields;
}
}
+1
View File
@@ -0,0 +1 @@
<?php include 'header.html.php';?>
+43
View File
@@ -0,0 +1,43 @@
<?php include 'header.html.php';?>
<div class='side'>
<div class="panel panel-sm with-list">
<div class='panel-heading'><i class='icon-list'></i> <strong><?php echo $lang->dev->dbList?></strong></div>
<?php foreach($tables as $table):?>
<?php $active = ($table == $selectedTable) ? 'active' : '';?>
<?php echo html::a(inlink('db', "table=$table"), $table, '', "class='list-group-item $active'");?>
<?php endforeach;?>
</div>
</div>
<div class='main'>
<?php if($selectedTable):?>
<table class="table table-condensed table-hover table-striped tablesorter table-fixed">
<thead>
<tr>
<th class='text-left' colspan='6'><?php echo $selectedTable?></th>
</tr>
<tr>
<th class='w-id'><?php echo $lang->dev->fields['id']?></th>
<th><?php echo $lang->dev->fields['name']?></th>
<th><?php echo $lang->dev->fields['desc']?></th>
<th><?php echo $lang->dev->fields['type']?></th>
<th><?php echo $lang->dev->fields['length']?></th>
<th><?php echo $lang->dev->fields['null']?></th>
</tr>
</thead>
<tbody>
<?php $i = 1;?>
<?php foreach($fields as $key => $field):?>
<tr>
<td><?php echo $i;?></td>
<td><?php echo $key;?></td>
<td><?php echo $field['name'];?></td>
<td><?php echo $field['type'];?></td>
<td><?php echo isset($field['options']['max']) ? $field['options']['max'] : '';?></td>
<td><?php echo $field['null'];?></td>
</tr>
<?php $i++; endforeach?>
</tbody>
</table>
<?php endif;?>
</div>
<?php include '../../common/view/footer.html.php';?>
+11
View File
@@ -0,0 +1,11 @@
<?php include '../../common/view/header.html.php';?>
<div id='featurebar'>
<ul class='nav'>
<?php
echo '<li id="api">'; common::printLink('dev', 'api', "", $lang->dev->api); echo '</li>';
echo '<li id="db">'; common::printLink('dev', 'db', "", $lang->dev->db); echo '</li>';
echo "<li id='editor'>"; common::printLink('editor', 'index', 'type=editor', $lang->dev->editor); echo '</li>';
?>
</ul>
</div>
<script>$('#<?php echo $tab;?>').addClass('active')</script>
+1 -1
View File
@@ -19,7 +19,7 @@ class editor extends control
*/
public function index($type = 'editor')
{
$this->app->loadLang('extension');
$this->app->loadLang('dev');
$this->view->title = $this->lang->editor->common;
$this->view->position[] = $this->lang->editor->common;
$this->view->moduleList = $this->editor->getModules();
+1 -1
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
?>
<?php include '../../extension/view/header.html.php';?>
<?php include '../../dev/view/header.html.php';?>
<table class='w-p100'>
<tr>
<td class='w-200px'>
-5
View File
@@ -11,11 +11,6 @@
*/
class extension extends control
{
public function __construct()
{
parent::__construct();
$this->app->loadLang('editor');
}
/**
* Browse extensions.
*
+6 -7
View File
@@ -2,13 +2,12 @@
<?php include '../../common/view/tablesorter.html.php';?>
<div id='featurebar'>
<ul class='nav'>
<?php
echo '<li id="installed">'; common::printLink('extension', 'browse', "type=installed", $lang->extension->installed); echo '</li>';
echo '<li id="deactivated">'; common::printLink('extension', 'browse', "type=deactivated", $lang->extension->deactivated); echo '</li>';
echo '<li id="available">'; common::printLink('extension', 'browse', "type=available", $lang->extension->available ); echo '</li>';
echo '<li>'; common::printLink('extension', 'upload', '', $lang->extension->upload, '', "class='iframe'"); echo '</li>';
echo "<li id='editor'>"; common::printLink('editor', 'index', 'type=editor', $lang->editor->common . '&' . $lang->editor->api); echo '</li>';
?>
<?php
echo '<li id="installed">'; common::printLink('extension', 'browse', "type=installed", $lang->extension->installed); echo '</li>';
echo '<li id="deactivated">'; common::printLink('extension', 'browse', "type=deactivated", $lang->extension->deactivated); echo '</li>';
echo '<li id="available">'; common::printLink('extension', 'browse', "type=available", $lang->extension->available ); echo '</li>';
echo '<li>'; common::printLink('extension', 'upload', '', $lang->extension->upload, '', "class='iframe'"); echo '</li>';
?>
</ul>
<div class='actions'>
<div class='btn-group'><?php common::printLink('extension', 'obtain', '', '<i class="icon-download-alt"></i> ' . $lang->extension->obtain, '', "class='btn'");?></div>
+3 -11
View File
@@ -786,8 +786,8 @@ class userModel extends model
*/
public function getDataInJSON($user)
{
$data = array();
$data['user'] = new stdclass();
$data = array();
$data['user'] = new stdclass();
$data['user']->id = $user->id;
$data['user']->account = $user->account;
$data['user']->email = $user->email;
@@ -795,15 +795,7 @@ class userModel extends model
$data['user']->gender = $user->gender;
$data['user']->dept = $user->dept;
$data['user']->role = $user->role;
$this->app->loadLang('todo');
$this->app->loadLang('task');
$this->app->loadLang('bug');
$this->app->loadLang('story');
$data['todoStatus'] = $this->lang->todo->statusList;
$data['taskStatus'] = $this->lang->task->statusList;
$data['bugStatus'] = $this->lang->bug->statusList;
$data['storyStatus'] = $this->lang->story->statusList;
$data['user']->company = $this->app->company->name;
return $data;
}