Completed
Push — master ( fbf746...9c5a3d )
by greg
14s
created

src/cli/cms/data/file.js (1 issue)

1
import path from 'path'
2
import mkdirp from 'mkdirp'
3
import fse from 'fs-extra'
4
import moment from 'moment'
5
6
import {abeExtend, coreUtils, cmsData, config, Manager} from '../../'
7
8
export function getAbeMeta(fileObject, json) {
9
  if (json.name != null) {
10
    fileObject.name = json.name
11
  }
12
13
  if (json.abe_meta != null) {
14
    var date = null
15
16
    if (json.abe_meta.updatedDate != null) {
17
      fileObject.date = json.abe_meta.updatedDate
18
      date = json.abe_meta.updatedDate
19
    } else if (
20
      json.abe_meta.latest != null &&
21
      json.abe_meta.latest.date != null
22
    ) {
23
      fileObject.date = json.abe_meta.latest.date
24
      date = json.abe_meta.latest.date
25
    } else if (json.abe_meta.date !== null) {
26
      date = json.abe_meta.date
27
    }
28
29
    fileObject.abe_meta = {
30
      date: date,
31
      link: json.abe_meta.link != null ? json.abe_meta.link : null,
32
      template: json.abe_meta.template != null ? json.abe_meta.template : null,
33
      status: json.abe_meta.status != null ? json.abe_meta.status : null
34
    }
35
  }
36
37
  return fileObject
38
}
39
40
export function getAllWithKeys(withKeys) {
41
  const extension = '.json'
42
  const files = coreUtils.file.getFilesSync(Manager.instance.pathData, true, extension)
43
44
  let filesArr = []
45
46
  Array.prototype.forEach.call(files, pathFile => {
47
    const json = cmsData.file.get(pathFile)
48
    let fileObject = cmsData.file.getFileObject(pathFile)
49
    fileObject = cmsData.file.getAbeMeta(fileObject, json)
50
    Array.prototype.forEach.call(withKeys, key => {
51
      fileObject[key] = json[key]
52
    })
53
54
    filesArr.push(fileObject)
55
  })
56
57
  var merged = cmsData.revision.getFilesMerged(filesArr)
58
  abeExtend.hooks.instance.trigger('afterGetAllFiles', merged)
59
60
  return merged
61
}
62
63
export function get(pathJson) {
64
  let json
65
  pathJson = abeExtend.hooks.instance.trigger('beforeGetJson', pathJson)
66
67
  try {
68
    var stat = fse.statSync(pathJson)
69
    if (stat) {
70
      json = fse.readJsonSync(pathJson)
71
    }
72
  } catch (e) {
73
    json = {}
74
  }
75
76
  json = abeExtend.hooks.instance.trigger('afterGetJson', json)
0 ignored issues
show
The variable json does not seem to be initialized in case stat on line 69 is false. Are you sure the function trigger handles undefined variables?
Loading history...
77
  return json
78
}
79
80
export function getFilesByType(pathFile, type = null) {
81
  const extension = '.' + config.files.templates.extension
82
  let result = []
83
84
  try {
85
    var directory = fse.lstatSync(pathFile)
86
    if (!directory.isDirectory()) {
87
      mkdirp.sync(pathFile)
88
    }
89
  } catch (e) {
90
    mkdirp.sync(pathFile)
91
  }
92
  const files = coreUtils.file.getFilesSync(pathFile, true, extension)
93
94
  Array.prototype.forEach.call(files, file => {
95
    var val = cmsData.fileAttr.get(file).s
96
    if (type === null || val === type) result.push(file)
97
  })
98
99
  return result
100
}
101
102
export function getFileObject(revisionPath) {
103
  let name = path.basename(revisionPath)
104
  const fileData = cmsData.fileAttr.get(name)
105
  name = cmsData.fileAttr.delete(name)
106
107
  let date
108
  if (fileData.d) {
109
    date = fileData.d
110
  } else {
111
    const stat = fse.statSync(revisionPath)
112
    date = stat.mtime
113
  }
114
115
  const fileObject = {
116
    name: name,
117
    path: revisionPath,
118
    date: date
119
  }
120
121
  return fileObject
122
}
123