index.html.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. <?php
  2. namespace zin;
  3. jsvar('backupLang', $lang->backup->common);
  4. jsvar('rmPHPHeaderLang', $lang->backup->rmPHPHeader);
  5. jsvar('restoreLang', $lang->backup->restore);
  6. jsvar('alertTips', $lang->backup->insufficientDisk);
  7. jsvar('backupError', empty($backupError) ? '' : $backupError);
  8. jsvar('startBackup', $lang->backup->backup);
  9. jsvar('getSpaceLoading', $lang->backup->getSpaceLoading);
  10. jsvar('confirmDeleteLang', $lang->backup->confirmDelete);
  11. jsvar('confirmRestoreLang', $lang->backup->confirmRestore);
  12. jsVar('inQuickon', $this->config->inQuickon);
  13. !$config->inQuickon ? featureBar(set::items(array(array('text' => $lang->system->backup->history, 'class' => 'font-bold')))) : featureBar();
  14. /* Toolbar. */
  15. $settingLink = $this->createLink('backup', 'setting');
  16. $backupLink = $this->createLink('backup', 'backup', "reload=yes");
  17. if($this->config->inQuickon)
  18. {
  19. if(common::hasPriv('backup', 'setting'))
  20. {
  21. toolbar
  22. (
  23. item(set
  24. ([
  25. 'text' => $lang->backup->setting,
  26. 'icon' => 'cog',
  27. 'class' => 'btn primary settings',
  28. 'url' => $settingLink,
  29. 'data-toggle' => 'modal',
  30. 'data-size' => 'sm'
  31. ]))
  32. );
  33. }
  34. div
  35. (
  36. setClass('panel-title'),
  37. $lang->system->backup->systemInfo
  38. );
  39. $actions = array
  40. (
  41. array('class' => 'btn text-primary ghost ajax-submit origin-action', 'disabled' => !empty($operating), 'icon' => 'refresh', 'text' => $lang->backup->common , 'data-confirm' => array('message' => $lang->system->backup->confirmBackup, 'icon' => 'icon-exclamation-sign', 'iconClass' => 'warning-pale rounded-full icon-2x'), 'url' => createLink('backup', 'backup', 'reload=yes')),
  42. );
  43. if($this->app->user->admin || common::hasPriv('system', 'upgrade'))
  44. {
  45. $upgradeAction = array('tagName' => 'a', 'class' => 'btn text-primary ghost ajax-submit', 'icon' => 'arrow-up', 'text' => $lang->system->backup->upgrade, 'data-confirm' => array('message' => $lang->system->backup->confirmUpgrade, 'icon' => 'icon-exclamation-sign', 'iconClass' => 'warning-pale rounded-full icon-2x'), 'url' => createLink('system', 'upgrade', 'backup=yes&edition=' . $this->config->edition), 'disabled' => !empty($operating) || !$systemInfo->upgradeable);
  46. if(!$systemInfo->upgradeable) $upgradeAction['hint'] = $lang->system->backup->error->beenLatestVersion;
  47. $actions[] = $upgradeAction;
  48. }
  49. h::table
  50. (
  51. set::className('table bordered'),
  52. h::thead(h::th($lang->system->backup->name), h::th($lang->system->backup->status), h::th($lang->system->backup->currentVersion), h::th($lang->system->backup->latestVersion), h::th($lang->actions)),
  53. h::tbody(setClass('text-center'), h::td($systemInfo->name), h::td($systemInfo->status), h::td(set::title($systemInfo->currentVersionTitle), $systemInfo->currentVersion), h::td
  54. (
  55. set::title($systemInfo->latestVersionTitle),
  56. $systemInfo->latestVersion,
  57. $systemInfo->upgradeHint ? a
  58. (
  59. set::href($systemInfo->latestURL),
  60. set::target('_blank'),
  61. icon('info pl-2 pt-2', set::title($systemInfo->upgradeHint))
  62. ): null
  63. ), h::td
  64. (
  65. set::className('actions-list center'),
  66. btnGroup(set::items($actions))
  67. ))
  68. );
  69. }
  70. else
  71. {
  72. if(common::hasPriv('backup', 'setting') and common::hasPriv('backup', 'backup'))
  73. {
  74. toolbar
  75. (
  76. item(set
  77. ([
  78. 'text' => $lang->backup->setting,
  79. 'icon' => 'cog',
  80. 'class' => 'btn primary settings',
  81. 'url' => $settingLink,
  82. 'data-toggle' => 'modal',
  83. 'data-size' => 'sm'
  84. ])),
  85. item(set
  86. ([
  87. 'text' => $lang->backup->backup,
  88. 'icon' => 'copy',
  89. 'class' => 'btn primary backup load-indicator',
  90. 'data-link' => $backupLink,
  91. 'onClick' => 'backup(this);'
  92. ]))
  93. );
  94. }
  95. }
  96. if($config->inQuickon)
  97. {
  98. div
  99. (
  100. setClass('panel-title mt-6'),
  101. $lang->system->backup->history
  102. );
  103. }
  104. if($this->config->inQuickon)
  105. {
  106. $data = array();
  107. $config->system->dtable->backup->fieldList['name']['link'] = array('module' => 'system', 'method' => 'backupView', 'params' => 'name={id}');
  108. $config->system->dtable->backup->fieldList['name']['data-toggle'] = 'modal';
  109. if(!empty($backups)) $data = initTableData($backups, $config->system->dtable->backup->fieldList, $this->system);
  110. foreach($data as &$backup)
  111. {
  112. foreach($backup->actions as &$action)
  113. {
  114. $action['disabled'] = !empty($operating);
  115. if($action['name'] == 'restore' && $backup->status == 'failed') $action['disabled'] = true;
  116. }
  117. }
  118. dtable
  119. (
  120. set::customCols(false),
  121. set::cols($config->system->dtable->backup->fieldList),
  122. set::data($data),
  123. set::userMap($users),
  124. set::plugins(array('cellspan')),
  125. set::getCellSpan(jsRaw('window.getCellSpan')),
  126. set::footer(array('html' => sprintf($lang->backup->holdDays, $config->backup->holdDays), 'className' => 'text-important')),
  127. set::footPager(usePager())
  128. );
  129. }
  130. else
  131. {
  132. /* DataTable. */
  133. $cols = $this->loadModel('datatable')->getSetting('backup');
  134. $data = initTableData($backups, $cols, $this->backup);
  135. $rows = array();
  136. foreach($data as $key => $row)
  137. {
  138. $isOK = true;
  139. $isPHP = false;
  140. foreach($row->files as $file => $attr)
  141. {
  142. if(!isset($attr['allCount']) || !isset($attr['count']))
  143. {
  144. unset($row->files[$file]);
  145. continue;
  146. }
  147. if(substr_compare($file, '.php', -strlen('.php')) === 0) $isPHP = true;
  148. if($attr['allCount'] != $attr['count']) $isOk = false;
  149. }
  150. $first = true;
  151. foreach($row->files as $file => $attr)
  152. {
  153. $fileName = basename($file);
  154. $backup = new stdclass();
  155. $backup->file = $file;
  156. $backup->allCount = $attr['allCount'];
  157. $backup->count = $attr['count'];
  158. $backup->size = helper::formatKB($attr['size']);
  159. $backup->status = $attr['allCount'] == $attr['count'] ? $lang->backup->statusList['success'] : $lang->backup->statusList['fail'];
  160. $backup->name = substr($fileName, 0, strpos($fileName, '.'));
  161. if($first)
  162. {
  163. $backup->time = date(DT_DATETIME1, filemtime($file));
  164. $backup->rowspan = count($row->files);
  165. $backup->actions = $row->actions;
  166. if(!$isPHP) $backup->actions[0]['disabled'] = true;
  167. if(!$isOK) $backup->actions[1]['disabled'] = true;
  168. }
  169. $rows[] = $backup;
  170. $first = false;
  171. }
  172. }
  173. dtable
  174. (
  175. set::customCols(false),
  176. set::cols($cols),
  177. set::data($rows),
  178. set::plugins(array('cellspan')),
  179. set::getCellSpan(jsRaw('window.getCellSpan')),
  180. set::footer(array('html' => $lang->backup->restoreTip . sprintf($lang->backup->holdDays, $config->backup->holdDays), 'className' => 'text-important'))
  181. );
  182. }
  183. modal
  184. (
  185. setID('waiting'),
  186. html($lang->backup->waiting),
  187. set::closeBtn(false),
  188. div
  189. (
  190. setID('message'),
  191. html(sprintf($lang->backup->progressSQL, 0))
  192. )
  193. );
  194. render();