Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
itminedu
gredu_labs
Commits
75f92e2c
Commit
75f92e2c
authored
Feb 29, 2016
by
Vassilis Kanellopoulos
Browse files
sync with sch inventory on first login if no labs or assets for school
parent
6d83243b
Changes
4
Hide whitespace changes
Inline
Side-by-side
module/sch_inventory/src/GuzzleHttpService.php
View file @
75f92e2c
...
...
@@ -10,6 +10,7 @@
namespace
SchInventory
;
use
GuzzleHttp\ClientInterface
;
use
Psr\Http\Message\UriInterface
;
/**
* Inventory service implementation using GuzzleHttp library
...
...
@@ -43,16 +44,14 @@ class GuzzleHttpService implements ServiceInterface
$responseData
=
json_decode
(
$response
->
getBody
()
->
getContents
(),
true
);
return
new
EquipmentCollection
(
array_map
([
$this
,
'hydrateEquipment'
],
$responseData
[
'flat_results'
])
);
return
isset
(
$responseData
[
'flat_results'
])
?
$responseData
[
'flat_results'
]
:
[];
}
/**
* Creates the uri with the unit query parameter
*
* @param mixed $unit
* @return
Psr\Http\Message\
UriInterface
* @return UriInterface
*/
private
function
createBaseUri
(
$unit
)
{
...
...
@@ -61,16 +60,4 @@ class GuzzleHttpService implements ServiceInterface
return
$baseUri
->
withQueryValue
(
$baseUri
,
'unit'
,
$unit
);
}
private
function
hydrateEquipment
(
array
$data
)
{
return
new
Equipment
(
(
isset
(
$data
[
'id'
])
?
$data
[
'id'
]
:
null
),
(
isset
(
$data
[
'item_template.category.name'
])
?
$data
[
'item_template.category.name'
]
:
null
),
(
isset
(
$data
[
'item_template.description'
])
?
$data
[
'item_template.description'
]
:
null
),
(
isset
(
$data
[
'location.name'
])
?
$data
[
'location.name'
]
:
null
),
(
isset
(
$data
[
'item_template.manufacturer.name'
])
?
$data
[
'item_template.manufacturer.name'
]
:
null
),
(
isset
(
$data
[
'property_number'
])
?
$data
[
'property_number'
]
:
null
)
);
}
}
module/sch_sync/bootstrap.php
View file @
75f92e2c
<?php
use
GrEduLabs\Schools\InputFilter\Lab
;
use
GrEduLabs\Schools\InputFilter\School
as
SchoolInputFilter
;
use
GrEduLabs\Schools\Service\AssetServiceInterface
;
use
GrEduLabs\Schools\Service\LabServiceInterface
;
use
GrEduLabs\Schools\Service\SchoolServiceInterface
;
use
SchMM\FetchUnit
;
use
SchSync\Middleware\CreateLabs
;
use
SchSync\Middleware\CreateSchool
;
use
SchSync\Middleware\CreateUser
;
use
Slim\App
;
...
...
@@ -47,13 +51,25 @@ return function (App $app) {
$c
->
get
(
'logger'
)
);
};
$container
[
CreateLabs
::
class
]
=
function
(
$c
)
{
return
new
CreateLabs
(
$c
->
get
(
LabServiceInterface
::
class
),
$c
->
get
(
AssetServiceInterface
::
class
),
$c
->
get
(
'SchInventory\\Service'
),
$c
->
get
(
SchoolServiceInterface
::
class
),
$c
->
get
(
'authentication_service'
),
$c
->
get
(
Lab
::
class
),
$c
->
get
(
'logger'
)
);
};
});
$events
(
'on'
,
'app.bootstrap'
,
function
(
$stop
,
$app
,
$container
)
{
foreach
(
$container
->
get
(
'router'
)
->
getRoutes
()
as
$route
)
{
if
(
'user.login.sso'
===
$route
->
getName
())
{
$route
->
add
(
CreateUser
::
class
)
->
add
(
CreateSchool
::
class
);
->
add
(
CreateSchool
::
class
)
->
add
(
CreateLabs
::
class
);
break
;
}
}
...
...
module/sch_sync/src/Middleware/CreateLabs.php
View file @
75f92e2c
<?php
/**
* gredu_labs.
*
* @link https://github.com/eellak/gredu_labs for the canonical source repository
*
* @copyright Copyright (c) 2008-2015 Greek Free/Open Source Software Society (https://gfoss.ellak.gr/)
* @license GNU GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html
*/
namespace
SchSync\Middleware
;
use
GrEduLabs\Schools\Service\AssetServiceInterface
;
use
GrEduLabs\Schools\Service\LabServiceInterface
;
use
GrEduLabs\Schools\Service\SchoolServiceInterface
;
use
Psr\Log\LoggerInterface
;
use
RedBeanPHP\R
;
use
SchInventory\ServiceInterface
as
InventoryService
;
use
Slim\Http\Request
;
use
Slim\Http\Response
;
use
Zend\Authentication\AuthenticationServiceInterface
;
class
CreateLabs
{
/**
*
* @var LabServiceInterface
*/
protected
$labService
;
/**
*
* @var AssetServiceInterface
*/
protected
$assetService
;
/**
*
* @var InventoryService
*/
protected
$inventoryService
;
/**
*
* @var SchoolServiceInterface
*/
protected
$schoolService
;
/**
*
* @var AuthenticationServiceInterface
*/
protected
$authService
;
/**
*
* @var callable
*/
protected
$inputFilter
;
/**
* @var LoggerInterface
*/
private
$logger
;
public
function
__construct
(
LabServiceInterface
$labService
,
AssetServiceInterface
$assetService
,
InventoryService
$inventoryService
,
SchoolServiceInterface
$schoolService
,
AuthenticationServiceInterface
$authService
,
callable
$inputFilter
,
LoggerInterface
$logger
)
{
$this
->
labService
=
$labService
;
$this
->
assetService
=
$assetService
;
$this
->
inventoryService
=
$inventoryService
;
$this
->
schoolService
=
$schoolService
;
$this
->
authService
=
$authService
;
$this
->
inputFilter
=
$inputFilter
;
$this
->
logger
=
$logger
;
}
public
function
__invoke
(
Request
$req
,
Response
$res
,
callable
$next
)
{
$res
=
$next
(
$req
,
$res
);
$identity
=
$this
->
authService
->
getIdentity
();
if
(
null
===
$identity
)
{
return
$res
;
}
$user
=
R
::
load
(
'user'
,
$identity
->
id
);
if
(
!
$user
->
school_id
)
{
return
$res
;
}
$school_id
=
$user
->
school_id
;
$school
=
$this
->
schoolService
->
getSchool
(
$school_id
);
if
(
0
<
count
(
$this
->
labService
->
getLabsBySchoolId
(
$school_id
)))
{
return
$res
;
}
$equipment
=
$this
->
inventoryService
->
getUnitEquipment
(
$school
[
'registry_no'
]);
$labTypes
=
array_reduce
(
$this
->
labService
->
getLabTypes
(),
function
(
$map
,
$type
)
{
$map
[
trim
(
$type
[
'name'
])]
=
$type
[
'id'
];
return
$map
;
},
[]);
$assetTypes
=
array_reduce
(
$this
->
assetService
->
getAllItemCategories
(),
function
(
$map
,
$type
)
{
$map
[
trim
(
$type
[
'name'
])]
=
$type
[
'id'
];
return
$map
;
},
[]);
$locations
=
array_reduce
(
$equipment
,
function
(
$uniq
,
$item
)
use
(
$school_id
,
$labTypes
,
$assetTypes
)
{
if
(
!
isset
(
$uniq
[
$item
[
'location.id'
]]))
{
$locationName
=
$item
[
'location.name'
];
$detected
=
reset
(
array_filter
(
array_keys
(
$labTypes
),
function
(
$type
)
use
(
$locationName
)
{
return
false
!==
stripos
(
$locationName
,
$type
)
||
false
!==
stripos
(
$type
,
$locationName
);
}));
$labType
=
$detected
?
$labTypes
[
$detected
]
:
end
(
$labTypes
);
$data
=
[
'school_id'
=>
(
int
)
$school_id
,
'name'
=>
$locationName
,
'labtype_id'
=>
(
int
)
$labType
,
];
$lab
=
R
::
dispense
(
'lab'
);
$lab
->
import
(
$data
);
$uniq
[
$item
[
'location.id'
]]
=
$lab
;
}
$categoryName
=
$item
[
'item_template.category.name'
];
$type
=
reset
(
array_filter
(
array_keys
(
$assetTypes
),
function
(
$type
)
use
(
$categoryName
)
{
return
$type
==
$categoryName
;
}));
$type
=
(
$type
)
?
$assetTypes
[
$type
]
:
false
;
if
(
$type
!==
false
)
{
if
(
!
$uniq
[
$item
[
'location.id'
]]
->
ownSchoolAsset
[
$type
])
{
$asset
=
R
::
dispense
(
'schoolasset'
);
$asset
->
school_id
=
(
int
)
$school_id
;
$asset
->
itemcategory_id
=
(
int
)
$type
;
$uniq
[
$item
[
'location.id'
]]
->
ownSchoolAsset
[
$type
]
=
$asset
;
}
$uniq
[
$item
[
'location.id'
]]
->
ownSchoolAsset
[
$type
]
->
qty
+=
1
;
}
return
$uniq
;
},
[]);
R
::
storeAll
(
$locations
);
return
$res
;
}
}
module/schools/data/schema.mysql.sql
View file @
75f92e2c
...
...
@@ -252,22 +252,22 @@ CREATE TABLE `lab` (
`id`
int
(
11
)
unsigned
NOT
NULL
AUTO_INCREMENT
,
`school_id`
int
(
11
)
unsigned
NOT
NULL
,
`name`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
NOT
NULL
,
`labtype_id`
int
(
11
)
unsigned
DEFAUL
T
NULL
,
`labtype_id`
int
(
11
)
unsigned
NO
T
NULL
,
`responsible_id`
int
(
11
)
unsigned
DEFAULT
NULL
,
`area`
int
(
11
)
unsigned
NO
T
NULL
,
`area`
int
(
11
)
unsigned
DEFAUL
T
NULL
,
`attachment`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
DEFAULT
NULL
,
`attachment_mime`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
DEFAULT
NULL
,
`has_network`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
NO
T
NULL
,
`has_server`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
NO
T
NULL
,
`has_network`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
DEFAUL
T
NULL
,
`has_server`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
DEFAUL
T
NULL
,
`use_ext_program`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
DEFAULT
NULL
,
`use_in_program`
varchar
(
191
)
COLLATE
utf8mb4_unicode_ci
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
),
KEY
`school
_id
`
(
`school_id`
),
KEY
`
index_foreignkey_lab_
school`
(
`school_id`
),
KEY
`index_foreignkey_lab_labtype`
(
`labtype_id`
),
KEY
`index_foreignkey_lab_responsible`
(
`responsible_id`
),
CONSTRAINT
`c_fk_lab_labtype_id`
FOREIGN
KEY
(
`labtype_id`
)
REFERENCES
`labtype`
(
`id`
)
ON
DELETE
SET
NULL
ON
UPDATE
SET
NULL
,
CONSTRAINT
`c_fk_lab_responsible_id`
FOREIGN
KEY
(
`responsible_id`
)
REFERENCES
`teacher`
(
`id`
)
ON
DELETE
SET
NULL
ON
UPDATE
SET
NULL
,
CONSTRAINT
`
lab_ibfk_1
`
FOREIGN
KEY
(
`school_id`
)
REFERENCES
`school`
(
`id`
)
CONSTRAINT
`c_fk_lab_labtype_id`
FOREIGN
KEY
(
`labtype_id`
)
REFERENCES
`labtype`
(
`id`
)
ON
DELETE
RESTRICT
ON
UPDATE
CASCADE
,
CONSTRAINT
`c_fk_lab_responsible_id`
FOREIGN
KEY
(
`responsible_id`
)
REFERENCES
`teacher`
(
`id`
)
ON
DELETE
RESTRICT
ON
UPDATE
CASCADE
,
CONSTRAINT
`
c_fk_lab_school_id
`
FOREIGN
KEY
(
`school_id`
)
REFERENCES
`school`
(
`id`
)
ON
DELETE
RESTRICT
ON
UPDATE
CASCADE
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
;
/*!40101 SET character_set_client = @saved_cs_client */
;
...
...
@@ -323,9 +323,9 @@ UNLOCK TABLES;
-- Table structure for table `lab_lesson`
--
DROP
TABLE
IF
EXISTS
`lab_lesson`
;
/*!40101 SET @saved_cs_client = @@character_set_client */
;
/*!40101 SET character_set_client = utf8 */
;
CREATE
TABLE
`lab_lesson`
(
`id`
int
(
11
)
unsigned
NOT
NULL
AUTO_INCREMENT
,
`lesson_id`
int
(
11
)
unsigned
DEFAULT
NULL
,
...
...
@@ -336,7 +336,7 @@ CREATE TABLE `lab_lesson` (
KEY
`index_foreignkey_lab_lesson_lab`
(
`lab_id`
),
CONSTRAINT
`c_fk_lab_lesson_lab_id`
FOREIGN
KEY
(
`lab_id`
)
REFERENCES
`lab`
(
`id`
)
ON
DELETE
CASCADE
ON
UPDATE
CASCADE
,
CONSTRAINT
`c_fk_lab_lesson_lesson_id`
FOREIGN
KEY
(
`lesson_id`
)
REFERENCES
`lesson`
(
`id`
)
ON
DELETE
CASCADE
ON
UPDATE
CASCADE
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
9
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
;
)
ENGINE
=
InnoDB
DEFAULT
CHARSET
=
utf8mb4
COLLATE
=
utf8mb4_unicode_ci
;
/*!40101 SET character_set_client = @saved_cs_client */
;
...
...
Write
Preview
Markdown
is supported
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