Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
ZeMKI
Mesort
Commits
1627287b
Commit
1627287b
authored
Aug 14, 2019
by
ZeMKI
Browse files
Merge branch 'master' into Production
parents
726d30ef
3de82f61
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
app/Helpers/Helper.php
View file @
1627287b
...
...
@@ -3,6 +3,7 @@
namespace
App\Helpers
;
use
Exception
;
use
File
;
class
Helper
{
...
...
@@ -37,4 +38,23 @@ class Helper
$type
=
explode
(
';'
,
$ini
);
return
$type
[
0
];
}
/**
* get the preset images for the tokens
* @return array
*/
public
static
function
getPresetImages
():
array
{
$filesInFolder
=
File
::
files
(
storage_path
(
'app/presets_tokens'
));
$arrayOfFiles
=
[];
$i
=
0
;
foreach
(
$filesInFolder
as
$path
)
{
$arrayOfFiles
[
$i
][
'basename'
]
=
pathinfo
(
$path
)[
'basename'
];
$arrayOfFiles
[
$i
][
'dirname'
]
=
url
(
'/images/presets_tokens'
)
.
'/'
.
pathinfo
(
$path
)[
'basename'
];
$i
++
;
}
return
$arrayOfFiles
;
}
}
app/Http/Controllers/StudyController.php
View file @
1627287b
...
...
@@ -31,7 +31,7 @@ class StudyController extends Controller
public
function
create
()
{
// if(!Auth::user()->cancreatestudies())abort(403,'You cannot create studies');
$arrayOfFiles
=
$this
->
getPresetImages
();
$arrayOfFiles
=
Helper
::
getPresetImages
();
$data
[
'isedit'
]
=
'false'
;
$data
[
'presetimages'
]
=
$arrayOfFiles
;
return
view
(
'study.create_edit'
,
$data
);
...
...
@@ -50,7 +50,8 @@ class StudyController extends Controller
$newStudy
->
author
=
$request
->
author
;
$newStudy
->
user_id
=
Auth
::
user
()
->
id
;
$newStudy
->
save
();
$this
->
saveSorting
(
$request
,
$newStudy
);
Sorting
::
store
(
$request
,
$newStudy
);
// the role of the user who created this study within this study
// is the same as it has in others studies
...
...
@@ -79,47 +80,17 @@ class StudyController extends Controller
{
$this
->
authorize
(
$study
);
//if(!Auth::user()->can('update-studies',$study->name)) abort(403,"You are not allowed to edit this study");
$data
[
'study'
]
=
$study
;
$data
[
'study'
][
'tokens'
]
=
$study
->
available_tokens
;
$data
[
'study'
][
'sorting'
]
=
$study
->
sortings
;
$data
[
'study'
][
'tokens'
]
=
$this
->
formatTokens
ForEdit
(
$data
[
'study'
][
'tokens'
]);
$data
[
'study'
][
'q'
]
=
$this
->
formatQuestions
ForEdit
(
$study
);
$data
[
'study'
][
'tokens'
]
=
Token
::
format
ForEdit
(
$data
[
'study'
][
'tokens'
]);
$data
[
'study'
][
'q'
]
=
Question
::
format
ForEdit
(
$study
);
$data
[
'isedit'
]
=
'true'
;
$data
[
'presetimages'
]
=
$this
->
getPresetImages
();
$data
[
'presetimages'
]
=
Helper
::
getPresetImages
();
return
view
(
'study.create_edit'
,
$data
);
}
/**
* @param $study
* @return mixed
*/
public
function
formatQuestionsForEdit
(
$study
)
{
$study
->
tokens
=
$study
->
available_tokens
;
$questionIds
=
[];
$questions
[
'presort'
]
=
[];
$questions
[
'postsort'
]
=
[];
foreach
(
$study
->
questions
as
$questionToEdit
)
{
if
(
$questionToEdit
->
detail
===
'presort'
)
{
$questionToEdit
[
'answers'
]
=
Answer
::
where
(
'question_id'
,
$questionToEdit
->
id
)
->
get
()
->
toArray
();
array_push
(
$questions
[
'presort'
],
$questionToEdit
);
}
elseif
(
$questionToEdit
->
detail
===
'postsort'
)
{
$questionToEdit
[
'answers'
]
=
Answer
::
where
(
'question_id'
,
$questionToEdit
->
id
)
->
get
()
->
toArray
();
array_push
(
$questions
[
'postsort'
],
$questionToEdit
);
}
array_push
(
$questionIds
,
$questionToEdit
->
id
);
}
$questions
[
'presort'
][
'count'
]
=
count
(
$questions
[
'presort'
]);
$questions
[
'postsort'
][
'count'
]
=
count
(
$questions
[
'postsort'
]);
return
$questions
;
}
/**
* @param Study $study
...
...
@@ -137,17 +108,14 @@ class StudyController extends Controller
if
(
empty
(
$request
->
name
))
{
return
response
()
->
json
(
'Data are not valid'
,
422
);
}
$study
=
Study
::
where
(
'id'
,
'='
,
$request
->
input
(
'id'
))
->
with
(
'questions'
)
->
first
();
if
(
!
$study
->
isEditable
()
||
!
$study
->
allowedToInterview
())
{
return
back
()
->
withInput
();
}
// sorting
$description
=
$request
->
input
(
'sorting.description'
);
$study
->
sortings
()
->
detach
();
// insert in details something according to the sorting
$study
->
sortings
()
->
attach
(
$request
->
get
(
'sorting'
)[
'id'
],
[
'details'
=>
'circles|'
.
$request
->
input
(
'sorting.numberofcircles'
)
.
'||description|'
.
$description
]);
//Auth::user()->studies()->attach($study->id, ['permission_id' => 4]);
Sorting
::
store
(
$request
,
$study
);
$study
->
description
=
$request
->
research_question
;
$study
->
name
=
$request
->
name
;
...
...
@@ -156,11 +124,10 @@ class StudyController extends Controller
$study
->
save
();
// watch out if we want more sortings
$study
->
sortings
()
->
sync
(
$request
->
get
(
'sorting'
)[
'id'
]);
$this
->
removeTokensFromStudy
(
$study
);
$this
->
saveTokens
(
$study
,
$request
,
$token
);
...
...
@@ -204,52 +171,7 @@ class StudyController extends Controller
}
/**
* @return array preset images
*/
public
function
getPresetImages
():
array
{
$filesInFolder
=
File
::
files
(
storage_path
(
'app/presets_tokens'
));
$arrayOfFiles
=
[];
$i
=
0
;
foreach
(
$filesInFolder
as
$path
)
{
$arrayOfFiles
[
$i
][
'basename'
]
=
pathinfo
(
$path
)[
'basename'
];
$arrayOfFiles
[
$i
][
'dirname'
]
=
url
(
'/images/presets_tokens'
)
.
'/'
.
pathinfo
(
$path
)[
'basename'
];
$i
++
;
}
return
$arrayOfFiles
;
}
/**
* @param $image
* @param string $studyPath
* @param $name
* @param $base64FirstPart
* @param Study $newStudy
* @param $tokenToSave
* @param $token
*/
public
function
saveTokenImage
(
$image
,
string
$studyPath
,
$name
,
$base64FirstPart
,
Study
$newStudy
,
$tokenToSave
,
&
$token
)
:
void
{
// open file a image resource
Image
::
make
(
$image
)
->
fit
(
100
,
100
)
->
save
(
$studyPath
.
$name
);
$path
=
$studyPath
.
$name
;
$encryptedContent
=
encrypt
(
$base64FirstPart
.
","
.
base64_encode
(
file_get_contents
(
$path
)));
$encryptedName
=
'study'
.
$newStudy
->
id
.
'/tokens/'
.
$name
.
'.mtoken'
;
// Store the encrypted Content
Storage
::
put
(
$encryptedName
,
$encryptedContent
);
File
::
delete
(
$path
);
$token
=
new
Token
;
$token
->
name
=
$tokenToSave
[
'name'
];
$token
->
image_path
=
$encryptedName
;
$token
->
author
=
Auth
::
user
()
->
id
;
$token
->
save
();
$token
->
studies
()
->
sync
(
$newStudy
->
id
);
}
/**
* @param Study $study
...
...
@@ -275,42 +197,7 @@ class StudyController extends Controller
public
function
saveTokens
(
Study
$study
,
Request
$request
,
&
$token
)
:
void
{
foreach
(
$request
->
get
(
'sorting'
)[
'tokens'
]
as
$tokenToSave
)
{
$imageIsPreset
=
(
isset
(
$tokenToSave
[
'ispreset'
])
&&
$tokenToSave
[
'ispreset'
])
||
(
isset
(
$tokenToSave
[
'image_path'
])
&&
strpos
(
$tokenToSave
[
'image_path'
],
'presets'
)
!==
false
);
if
(
$imageIsPreset
)
{
// save only preset path
$token
=
new
Token
;
$token
->
name
=
$tokenToSave
[
'name'
];
$token
->
image_path
=
isset
(
$tokenToSave
[
'file'
])
?
$tokenToSave
[
'file'
][
'dirname'
]
:
$tokenToSave
[
'image_path'
];
$token
->
author
=
Auth
::
user
()
->
id
;
$token
->
save
();
$token
->
studies
()
->
sync
(
$study
->
id
);
}
else
{
// create new token
if
(
isset
(
$tokenToSave
[
'base64'
]))
$image
=
$tokenToSave
[
'base64'
];
else
$image
=
config
(
'utilities.base64logo'
);
$name
=
$tokenToSave
[
'name'
];
$arr
=
explode
(
","
,
$image
,
2
);
$base64FirstPart
=
$arr
[
0
];
$studyPath
=
storage_path
(
'app/study'
.
$study
->
id
.
'/tokens/'
);
File
::
isDirectory
(
$studyPath
)
or
File
::
makeDirectory
(
$studyPath
,
0775
,
true
,
true
);
$this
->
saveTokenImage
(
$image
,
$studyPath
,
$name
,
$base64FirstPart
,
$study
,
$tokenToSave
,
$token
);
}
$token
->
save
();
Token
::
store
(
$tokenToSave
,
$study
);
}
}
...
...
@@ -358,17 +245,6 @@ class StudyController extends Controller
}
}
/**
* @param Request $request
* @param Study $newstudy
*/
private
function
saveSorting
(
Request
$request
,
Study
$newstudy
):
void
{
$newstudy
->
sortings
()
->
detach
();
// insert in details something according to the sorting
$newstudy
->
sortings
()
->
attach
(
$request
->
get
(
'sorting'
)[
'id'
],
[
'details'
=>
'circles|'
.
$request
->
input
(
'sorting.numberofcircles'
)
.
'||description|'
.
$request
->
input
(
'sorting.description'
)]);
}
/**
* @param Study $newstudy
*/
...
...
@@ -416,25 +292,6 @@ class StudyController extends Controller
}
}
/**
* @param $tokens
* @return mixed
*/
public
function
formatTokensForEdit
(
$tokens
)
{
$tokensCount
=
count
(
$tokens
);
for
(
$i
=
0
;
$i
<
$tokensCount
;
$i
++
)
{
if
(
strpos
(
$tokens
[
$i
][
'image_path'
],
'presets'
)
!==
false
)
{
$path
=
$tokens
[
$i
][
'image_path'
];
$tokens
[
$i
][
'image_path'
]
=
mb_convert_encoding
(
$path
,
'HTML-ENTITIES'
,
"UTF-8"
);
}
else
{
$path
=
storage_path
(
'app/'
.
$tokens
[
$i
][
'image_path'
]);
$tokens
[
$i
][
'image_path'
]
=
decrypt
(
file_get_contents
(
$path
));
}
}
return
$tokens
;
}
}
...
...
app/Question.php
View file @
1627287b
...
...
@@ -21,4 +21,36 @@ class Question extends Model
{
return
\
App\Answer
::
where
(
'question_id'
,
'='
,
$this
->
id
)
->
pluck
(
'answer'
)
->
toArray
();
}
/**
* @param $study
* @return mixed
*/
public
static
function
formatForEdit
(
$study
)
{
$study
->
tokens
=
$study
->
available_tokens
;
$questionIds
=
[];
$questions
[
'presort'
]
=
[];
$questions
[
'postsort'
]
=
[];
foreach
(
$study
->
questions
as
$questionToEdit
)
{
if
(
$questionToEdit
->
detail
===
'presort'
)
{
$questionToEdit
[
'answers'
]
=
Answer
::
where
(
'question_id'
,
$questionToEdit
->
id
)
->
get
()
->
toArray
();
array_push
(
$questions
[
'presort'
],
$questionToEdit
);
}
elseif
(
$questionToEdit
->
detail
===
'postsort'
)
{
$questionToEdit
[
'answers'
]
=
Answer
::
where
(
'question_id'
,
$questionToEdit
->
id
)
->
get
()
->
toArray
();
array_push
(
$questions
[
'postsort'
],
$questionToEdit
);
}
array_push
(
$questionIds
,
$questionToEdit
->
id
);
}
$questions
[
'presort'
][
'count'
]
=
count
(
$questions
[
'presort'
]);
$questions
[
'postsort'
][
'count'
]
=
count
(
$questions
[
'postsort'
]);
return
$questions
;
}
}
app/Sorting.php
View file @
1627287b
...
...
@@ -13,4 +13,16 @@ class Sorting extends Model
{
return
$this
->
belongsToMany
(
\
App\Study
::
class
,
'study_sorting'
)
->
withTimestamps
();
}
public
static
function
store
(
$request
,
$study
)
{
$study
->
sortings
()
->
detach
();
// insert in details something according to the sorting
$study
->
sortings
()
->
attach
(
$request
->
get
(
'sorting'
)[
'id'
],
[
'details'
=>
'circles|'
.
$request
->
input
(
'sorting.numberofcircles'
)
.
'||description|'
.
$request
->
input
(
'sorting.description'
)]);
}
}
app/Token.php
View file @
1627287b
...
...
@@ -2,7 +2,11 @@
namespace
App
;
use
File
;
use
Illuminate\Database\Eloquent\Model
;
use
Illuminate\Support\Facades\Auth
;
use
Image
;
use
Storage
;
class
Token
extends
Model
{
...
...
@@ -25,4 +29,96 @@ class Token extends Model
{
return
$this
->
belongsTo
(
\
App\User
::
class
)
->
withTimestamps
();
}
public
static
function
store
(
$tokenToSave
,
$study
)
{
$imageIsPreset
=
(
isset
(
$tokenToSave
[
'ispreset'
])
&&
$tokenToSave
[
'ispreset'
])
||
(
isset
(
$tokenToSave
[
'image_path'
])
&&
strpos
(
$tokenToSave
[
'image_path'
],
'presets'
)
!==
false
);
if
(
$imageIsPreset
)
{
// save only preset path
$token
=
new
Token
;
$token
->
name
=
$tokenToSave
[
'name'
];
$token
->
image_path
=
isset
(
$tokenToSave
[
'file'
])
?
$tokenToSave
[
'file'
][
'dirname'
]
:
$tokenToSave
[
'image_path'
];
$token
->
author
=
Auth
::
user
()
->
id
;
$token
->
save
();
$token
->
studies
()
->
sync
(
$study
->
id
);
}
else
{
// create new token
if
(
isset
(
$tokenToSave
[
'base64'
]))
$image
=
$tokenToSave
[
'base64'
];
else
$image
=
config
(
'utilities.base64logo'
);
$name
=
$tokenToSave
[
'name'
];
$arr
=
explode
(
","
,
$image
,
2
);
$base64FirstPart
=
$arr
[
0
];
$studyPath
=
storage_path
(
'app/study'
.
$study
->
id
.
'/tokens/'
);
File
::
isDirectory
(
$studyPath
)
or
File
::
makeDirectory
(
$studyPath
,
0775
,
true
,
true
);
Token
::
saveImage
(
$image
,
$studyPath
,
$name
,
$base64FirstPart
,
$study
,
$tokenToSave
,
$token
);
}
$token
->
save
();
}
/**
* @param $image
* @param string $studyPath
* @param $name
* @param $base64FirstPart
* @param Study $newStudy
* @param $tokenToSave
* @param $token
*/
public
static
function
saveImage
(
$image
,
string
$studyPath
,
$name
,
$base64FirstPart
,
Study
$newStudy
,
$tokenToSave
,
&
$token
)
:
void
{
// open file a image resource
Image
::
make
(
$image
)
->
fit
(
100
,
100
)
->
save
(
$studyPath
.
$name
);
$path
=
$studyPath
.
$name
;
$encryptedContent
=
encrypt
(
$base64FirstPart
.
","
.
base64_encode
(
file_get_contents
(
$path
)));
$encryptedName
=
'study'
.
$newStudy
->
id
.
'/tokens/'
.
$name
.
'.mtoken'
;
// Store the encrypted Content
Storage
::
put
(
$encryptedName
,
$encryptedContent
);
File
::
delete
(
$path
);
$token
=
new
Token
;
$token
->
name
=
$tokenToSave
[
'name'
];
$token
->
image_path
=
$encryptedName
;
$token
->
author
=
Auth
::
user
()
->
id
;
$token
->
save
();
$token
->
studies
()
->
sync
(
$newStudy
->
id
);
}
/**
* @param $tokens
* @return mixed
*/
public
static
function
formatForEdit
(
$tokens
)
{
$tokensCount
=
count
(
$tokens
);
for
(
$i
=
0
;
$i
<
$tokensCount
;
$i
++
)
{
if
(
strpos
(
$tokens
[
$i
][
'image_path'
],
'presets'
)
!==
false
)
{
$path
=
$tokens
[
$i
][
'image_path'
];
$tokens
[
$i
][
'image_path'
]
=
mb_convert_encoding
(
$path
,
'HTML-ENTITIES'
,
"UTF-8"
);
}
else
{
$path
=
storage_path
(
'app/'
.
$tokens
[
$i
][
'image_path'
]);
$tokens
[
$i
][
'image_path'
]
=
decrypt
(
file_get_contents
(
$path
));
}
}
return
$tokens
;
}
}
database/migrations/2018_11_19_144839_create_specialpermissions_table.php
deleted
100644 → 0
View file @
726d30ef
<?php
use
Illuminate\Support\Facades\Schema
;
use
Illuminate\Database\Schema\Blueprint
;
use
Illuminate\Database\Migrations\Migration
;
class
CreateSpecialpermissionsTable
extends
Migration
{
/**
* Run the migrations.
*
* @return void
*/
public
function
up
()
{
Schema
::
create
(
'permissions_list'
,
function
(
Blueprint
$table
)
{
$table
->
increments
(
'id'
);
$table
->
string
(
'name'
,
255
);
$table
->
string
(
'description'
,
255
)
->
nullable
();
$table
->
timestamps
();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public
function
down
()
{
Schema
::
dropIfExists
(
'permissions_list'
);
}
}
public/js/app.js
View file @
1627287b
...
...
@@ -1377,6 +1377,37 @@ __webpack_require__.r(__webpack_exports__);
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
//
/* harmony default export */ __webpack_exports__["default"] = ({
...
...
@@ -1478,7 +1509,7 @@ __webpack_require__.r(__webpack_exports__);
this.postsort.number = this.studydata.q.postsort.count; // sorting
var detailsArray = this.studydata.sortings[0].pivot.details.split('||');
this.sorting.numberofcircles = detailsArray[0].substr(detailsArray[0].indexOf('|') + 1);
this.sorting.numberofcircles =
_.parseInt(
detailsArray[0].substr(detailsArray[0].indexOf('|') + 1)
)
;
if (detailsArray[1]) this.sorting.description = detailsArray[1].substr(detailsArray[1].indexOf('|') + 1);else this.sorting.description = "";
var self = this;
this.sorting.tokennumber = this.studydata.tokens.length;
...
...
@@ -1513,7 +1544,8 @@ __webpack_require__.r(__webpack_exports__);
self.presort.questions[i].ismultiple = true;
_.times(self.studydata.q.presort[i].answers.length, function (x) {
self.presort.questions[i].answers[x] = self.studydata.q.presort[i].answers[x].answer.answer;
console.log(x);
if (self.studydata.q.presort[i].answers[x].answer.type == "multi") self.presort.questions[i].answers[x] = self.studydata.q.presort[i].answers[x].answer.answer;
});
}
...
...
@@ -1524,7 +1556,7 @@ __webpack_require__.r(__webpack_exports__);
self.presort.questions[i].isonechoice = true;
_.times(self.studydata.q.presort[i].answers.length, function (x) {
self.presort.questions[i].answers[x] = self.studydata.q.presort[i].answers[x].answer.answer;
if (self.studydata.q.presort[i].answers[x].answer.type == "onechoice")
self.presort.questions[i].answers[x] = self.studydata.q.presort[i].answers[x].answer.answer;
});
}
...
...
@@ -1559,7 +1591,7 @@ __webpack_require__.r(__webpack_exports__);
self.postsort.questions[i].ismultiple = true;
_.times(self.studydata.q.postsort[i].answers.length, function (x) {
self.postsort.questions[i].answers[x] = self.studydata.q.postsort[i].answers[x].answer.answer;
if (self.studydata.q.postsort[i].answers[x].answer.type == "multi")
self.postsort.questions[i].answers[x] = self.studydata.q.postsort[i].answers[x].answer.answer;
});
}
...
...
@@ -1570,7 +1602,7 @@ __webpack_require__.r(__webpack_exports__);
self.postsort.questions[i].isonechoice = true;
_.times(self.studydata.q.postsort[i].answers.length, function (x) {
self.postsort.questions[i].answers[x] = self.studydata.q.postsort[i].answers[x].answer.answer;
if (self.studydata.q.postsort[i].answers[x].answer.type == "onechoice")
self.postsort.questions[i].answers[x] = self.studydata.q.postsort[i].answers[x].answer.answer;
});
}
...
...
@@ -1915,7 +1947,8 @@ __webpack_require__.r(__webpack_exports__);
}
},
normalizeanwers: function normalizeanwers(index, detail) {
var count = this[detail].questions[index].answers.length - this[detail].questions[index].numberofanswer;
var count = this[detail].questions[index].answers.length - _.parseInt(this[detail].questions[index].numberofanswer);
console.log(count);
if (count > 0) {
...
...
@@ -13747,7 +13780,7 @@ var render = function() {
? "is-red"
: ""
},
[_vm._v("Study Name")]
[_vm._v("Study
\n
Name")]
),
_vm._v(" "),
_c("div", { staticClass: "control" }, [
...
...
@@ -14507,7 +14540,7 @@ var render = function() {
steps: "1"
},
on: {
change
: function($event) {
input
: function($event) {
return _vm.normalizeanwers(
index,
"presort"
...
...
@@ -14950,10 +14983,10 @@ var render = function() {
steps: "1"
},
on: {
change
: function($event) {
input
: function($event) {
return _vm.normalizeanwers(
index,
"p
re
sort"
"p
ost
sort"
)
}
},
public/mix-manifest.json
View file @
1627287b
{
"/js/app.js"
:
"/js/app.js?id=
ce5790be0386fcc4f2fa
"
,
"/js/app.js"
:
"/js/app.js?id=
b43fc7edbcbb73a1cc77
"
,
"/css/app.css"
:
"/css/app.css?id=33e8c8db759d1aed6c23"
,
"/css/app_dompdf.css"
:
"/css/app_dompdf.css?id=225174786ee9d00fe897"
,
"/js/manifest.js"
:
"/js/manifest.js?id=844cdbfe9e6b6b56ae8f"
,
...
...
resources/js/components/newstudy.vue
View file @
1627287b
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment