Commit f1165d314ce3ab97bbad6dc313e9c9fe9d66fffd
Exists in
master
and in
1 other branch
Merge branch 'master' of https://github.com/lightbase/cacic
Showing
8 changed files
with
397 additions
and
293 deletions
Show diff stats
app/config/config.yml
@@ -116,7 +116,10 @@ swiftmailer: | @@ -116,7 +116,10 @@ swiftmailer: | ||
116 | host: "%mailer_host%" | 116 | host: "%mailer_host%" |
117 | username: "%mailer_user%" | 117 | username: "%mailer_user%" |
118 | password: "%mailer_password%" | 118 | password: "%mailer_password%" |
119 | - spool: { type: memory } | 119 | + spool: |
120 | + type: file | ||
121 | + path: "%kernel.root_dir%/spool" | ||
122 | + | ||
120 | 123 | ||
121 | # KNP Paginator Configuration | 124 | # KNP Paginator Configuration |
122 | knp_paginator: | 125 | knp_paginator: |
app/config/config_dev.yml
app/config/config_prod.yml
@@ -18,3 +18,6 @@ monolog: | @@ -18,3 +18,6 @@ monolog: | ||
18 | type: stream | 18 | type: stream |
19 | path: "%kernel.logs_dir%/%kernel.environment%.log" | 19 | path: "%kernel.logs_dir%/%kernel.environment%.log" |
20 | level: warning | 20 | level: warning |
21 | + | ||
22 | +swiftmailer: | ||
23 | + sender_address: www-data@localhost | ||
21 | \ No newline at end of file | 24 | \ No newline at end of file |
composer.lock
@@ -219,8 +219,7 @@ | @@ -219,8 +219,7 @@ | ||
219 | { | 219 | { |
220 | "name": "Jonathan Wage", | 220 | "name": "Jonathan Wage", |
221 | "email": "jonwage@gmail.com", | 221 | "email": "jonwage@gmail.com", |
222 | - "homepage": "http://www.jwage.com/", | ||
223 | - "role": "Creator" | 222 | + "homepage": "http://www.jwage.com/" |
224 | }, | 223 | }, |
225 | { | 224 | { |
226 | "name": "Guilherme Blanco", | 225 | "name": "Guilherme Blanco", |
@@ -434,8 +433,7 @@ | @@ -434,8 +433,7 @@ | ||
434 | { | 433 | { |
435 | "name": "Jonathan Wage", | 434 | "name": "Jonathan Wage", |
436 | "email": "jonwage@gmail.com", | 435 | "email": "jonwage@gmail.com", |
437 | - "homepage": "http://www.jwage.com/", | ||
438 | - "role": "Creator" | 436 | + "homepage": "http://www.jwage.com/" |
439 | }, | 437 | }, |
440 | { | 438 | { |
441 | "name": "Guilherme Blanco", | 439 | "name": "Guilherme Blanco", |
@@ -530,12 +528,12 @@ | @@ -530,12 +528,12 @@ | ||
530 | "source": { | 528 | "source": { |
531 | "type": "git", | 529 | "type": "git", |
532 | "url": "https://github.com/doctrine/dbal.git", | 530 | "url": "https://github.com/doctrine/dbal.git", |
533 | - "reference": "2a37b007dda8e21bdbb8fa445be8fa0064199e13" | 531 | + "reference": "2.3.4" |
534 | }, | 532 | }, |
535 | "dist": { | 533 | "dist": { |
536 | "type": "zip", | 534 | "type": "zip", |
537 | - "url": "https://api.github.com/repos/doctrine/dbal/zipball/2a37b007dda8e21bdbb8fa445be8fa0064199e13", | ||
538 | - "reference": "2a37b007dda8e21bdbb8fa445be8fa0064199e13", | 535 | + "url": "https://api.github.com/repos/doctrine/dbal/zipball/2.3.4", |
536 | + "reference": "2.3.4", | ||
539 | "shasum": "" | 537 | "shasum": "" |
540 | }, | 538 | }, |
541 | "require": { | 539 | "require": { |
@@ -561,8 +559,7 @@ | @@ -561,8 +559,7 @@ | ||
561 | { | 559 | { |
562 | "name": "Jonathan Wage", | 560 | "name": "Jonathan Wage", |
563 | "email": "jonwage@gmail.com", | 561 | "email": "jonwage@gmail.com", |
564 | - "homepage": "http://www.jwage.com/", | ||
565 | - "role": "Creator" | 562 | + "homepage": "http://www.jwage.com/" |
566 | }, | 563 | }, |
567 | { | 564 | { |
568 | "name": "Guilherme Blanco", | 565 | "name": "Guilherme Blanco", |
@@ -595,25 +592,25 @@ | @@ -595,25 +592,25 @@ | ||
595 | "source": { | 592 | "source": { |
596 | "type": "git", | 593 | "type": "git", |
597 | "url": "https://github.com/doctrine/DoctrineBundle.git", | 594 | "url": "https://github.com/doctrine/DoctrineBundle.git", |
598 | - "reference": "765b0d87fcc3e839c74817b7211258cbef3a4fb9" | 595 | + "reference": "v1.2.0" |
599 | }, | 596 | }, |
600 | "dist": { | 597 | "dist": { |
601 | "type": "zip", | 598 | "type": "zip", |
602 | - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/765b0d87fcc3e839c74817b7211258cbef3a4fb9", | ||
603 | - "reference": "765b0d87fcc3e839c74817b7211258cbef3a4fb9", | 599 | + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/v1.2.0", |
600 | + "reference": "v1.2.0", | ||
604 | "shasum": "" | 601 | "shasum": "" |
605 | }, | 602 | }, |
606 | "require": { | 603 | "require": { |
607 | "doctrine/dbal": ">=2.2,<2.5-dev", | 604 | "doctrine/dbal": ">=2.2,<2.5-dev", |
608 | - "jdorn/sql-formatter": "~1.1", | 605 | + "jdorn/sql-formatter": ">=1.1,<2.0", |
609 | "php": ">=5.3.2", | 606 | "php": ">=5.3.2", |
610 | - "symfony/doctrine-bridge": "~2.2", | ||
611 | - "symfony/framework-bundle": "~2.2" | 607 | + "symfony/doctrine-bridge": ">=2.2,<3.0", |
608 | + "symfony/framework-bundle": ">=2.2,<3.0" | ||
612 | }, | 609 | }, |
613 | "require-dev": { | 610 | "require-dev": { |
614 | "doctrine/orm": ">=2.2,<2.5-dev", | 611 | "doctrine/orm": ">=2.2,<2.5-dev", |
615 | - "symfony/validator": "~2.2", | ||
616 | - "symfony/yaml": "~2.2" | 612 | + "symfony/validator": ">=2.2,<3.0", |
613 | + "symfony/yaml": ">=2.2,<3.0" | ||
617 | }, | 614 | }, |
618 | "suggest": { | 615 | "suggest": { |
619 | "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", | 616 | "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", |
@@ -749,8 +746,7 @@ | @@ -749,8 +746,7 @@ | ||
749 | { | 746 | { |
750 | "name": "Jonathan Wage", | 747 | "name": "Jonathan Wage", |
751 | "email": "jonwage@gmail.com", | 748 | "email": "jonwage@gmail.com", |
752 | - "homepage": "http://www.jwage.com/", | ||
753 | - "role": "Creator" | 749 | + "homepage": "http://www.jwage.com/" |
754 | }, | 750 | }, |
755 | { | 751 | { |
756 | "name": "Guilherme Blanco", | 752 | "name": "Guilherme Blanco", |
@@ -766,7 +762,7 @@ | @@ -766,7 +762,7 @@ | ||
766 | "email": "kontakt@beberlei.de" | 762 | "email": "kontakt@beberlei.de" |
767 | }, | 763 | }, |
768 | { | 764 | { |
769 | - "name": "Johannes Schmitt", | 765 | + "name": "Johannes M. Schmitt", |
770 | "email": "schmittjoh@gmail.com", | 766 | "email": "schmittjoh@gmail.com", |
771 | "homepage": "http://jmsyst.com", | 767 | "homepage": "http://jmsyst.com", |
772 | "role": "Developer of wrapped JMSSerializerBundle" | 768 | "role": "Developer of wrapped JMSSerializerBundle" |
@@ -1285,13 +1281,13 @@ | @@ -1285,13 +1281,13 @@ | ||
1285 | "version": "1.0.0", | 1281 | "version": "1.0.0", |
1286 | "source": { | 1282 | "source": { |
1287 | "type": "git", | 1283 | "type": "git", |
1288 | - "url": "https://github.com/schmittjoh/cg-library.git", | ||
1289 | - "reference": "ce8ef43dd6bfe6ce54e5e9844ab71be2343bf2fc" | 1284 | + "url": "git://github.com/schmittjoh/cg-library.git", |
1285 | + "reference": "1.0.0" | ||
1290 | }, | 1286 | }, |
1291 | "dist": { | 1287 | "dist": { |
1292 | "type": "zip", | 1288 | "type": "zip", |
1293 | - "url": "https://api.github.com/repos/schmittjoh/cg-library/zipball/ce8ef43dd6bfe6ce54e5e9844ab71be2343bf2fc", | ||
1294 | - "reference": "ce8ef43dd6bfe6ce54e5e9844ab71be2343bf2fc", | 1289 | + "url": "https://github.com/schmittjoh/cg-library/zipball/1.0.0", |
1290 | + "reference": "1.0.0", | ||
1295 | "shasum": "" | 1291 | "shasum": "" |
1296 | }, | 1292 | }, |
1297 | "require": { | 1293 | "require": { |
@@ -1319,7 +1315,7 @@ | @@ -1319,7 +1315,7 @@ | ||
1319 | "keywords": [ | 1315 | "keywords": [ |
1320 | "code generation" | 1316 | "code generation" |
1321 | ], | 1317 | ], |
1322 | - "time": "2012-01-02 20:40:52" | 1318 | + "time": "2012-01-02 12:40:52" |
1323 | }, | 1319 | }, |
1324 | { | 1320 | { |
1325 | "name": "jms/di-extra-bundle", | 1321 | "name": "jms/di-extra-bundle", |
@@ -1328,20 +1324,20 @@ | @@ -1328,20 +1324,20 @@ | ||
1328 | "source": { | 1324 | "source": { |
1329 | "type": "git", | 1325 | "type": "git", |
1330 | "url": "https://github.com/schmittjoh/JMSDiExtraBundle.git", | 1326 | "url": "https://github.com/schmittjoh/JMSDiExtraBundle.git", |
1331 | - "reference": "7fffdb6c96fb922a131af06d773e1e6c5301d070" | 1327 | + "reference": "1.4.0" |
1332 | }, | 1328 | }, |
1333 | "dist": { | 1329 | "dist": { |
1334 | "type": "zip", | 1330 | "type": "zip", |
1335 | - "url": "https://api.github.com/repos/schmittjoh/JMSDiExtraBundle/zipball/7fffdb6c96fb922a131af06d773e1e6c5301d070", | ||
1336 | - "reference": "7fffdb6c96fb922a131af06d773e1e6c5301d070", | 1331 | + "url": "https://api.github.com/repos/schmittjoh/JMSDiExtraBundle/zipball/1.4.0", |
1332 | + "reference": "1.4.0", | ||
1337 | "shasum": "" | 1333 | "shasum": "" |
1338 | }, | 1334 | }, |
1339 | "require": { | 1335 | "require": { |
1340 | "jms/aop-bundle": ">=1.0.0,<1.2-dev", | 1336 | "jms/aop-bundle": ">=1.0.0,<1.2-dev", |
1341 | "jms/metadata": "1.*", | 1337 | "jms/metadata": "1.*", |
1342 | - "symfony/finder": "~2.1", | ||
1343 | - "symfony/framework-bundle": "~2.1", | ||
1344 | - "symfony/process": "~2.1" | 1338 | + "symfony/finder": ">=2.1,<3.0", |
1339 | + "symfony/framework-bundle": ">=2.1,<3.0", | ||
1340 | + "symfony/process": ">=2.1,<3.0" | ||
1345 | }, | 1341 | }, |
1346 | "require-dev": { | 1342 | "require-dev": { |
1347 | "doctrine/doctrine-bundle": "*", | 1343 | "doctrine/doctrine-bundle": "*", |
@@ -1425,7 +1421,7 @@ | @@ -1425,7 +1421,7 @@ | ||
1425 | ], | 1421 | ], |
1426 | "authors": [ | 1422 | "authors": [ |
1427 | { | 1423 | { |
1428 | - "name": "Johannes M. Schmitt", | 1424 | + "name": "Johannes Schmitt", |
1429 | "email": "schmittjoh@gmail.com", | 1425 | "email": "schmittjoh@gmail.com", |
1430 | "homepage": "http://jmsyst.com", | 1426 | "homepage": "http://jmsyst.com", |
1431 | "role": "Developer of wrapped JMSSerializerBundle" | 1427 | "role": "Developer of wrapped JMSSerializerBundle" |
@@ -1445,13 +1441,13 @@ | @@ -1445,13 +1441,13 @@ | ||
1445 | "version": "1.0.0", | 1441 | "version": "1.0.0", |
1446 | "source": { | 1442 | "source": { |
1447 | "type": "git", | 1443 | "type": "git", |
1448 | - "url": "https://github.com/schmittjoh/parser-lib.git", | ||
1449 | - "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d" | 1444 | + "url": "git://github.com/schmittjoh/parser-lib", |
1445 | + "reference": "1.0.0" | ||
1450 | }, | 1446 | }, |
1451 | "dist": { | 1447 | "dist": { |
1452 | "type": "zip", | 1448 | "type": "zip", |
1453 | - "url": "https://api.github.com/repos/schmittjoh/parser-lib/zipball/c509473bc1b4866415627af0e1c6cc8ac97fa51d", | ||
1454 | - "reference": "c509473bc1b4866415627af0e1c6cc8ac97fa51d", | 1449 | + "url": "https://github.com/schmittjoh/parser-lib/archive/1.0.0.zip", |
1450 | + "reference": "1.0.0", | ||
1455 | "shasum": "" | 1451 | "shasum": "" |
1456 | }, | 1452 | }, |
1457 | "require": { | 1453 | "require": { |
@@ -1482,20 +1478,20 @@ | @@ -1482,20 +1478,20 @@ | ||
1482 | "source": { | 1478 | "source": { |
1483 | "type": "git", | 1479 | "type": "git", |
1484 | "url": "https://github.com/schmittjoh/JMSSecurityExtraBundle.git", | 1480 | "url": "https://github.com/schmittjoh/JMSSecurityExtraBundle.git", |
1485 | - "reference": "f5f6c6df69ceae8b709e57b49fcc2a42d9280bcc" | 1481 | + "reference": "1.5.1" |
1486 | }, | 1482 | }, |
1487 | "dist": { | 1483 | "dist": { |
1488 | "type": "zip", | 1484 | "type": "zip", |
1489 | - "url": "https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/zipball/f5f6c6df69ceae8b709e57b49fcc2a42d9280bcc", | ||
1490 | - "reference": "f5f6c6df69ceae8b709e57b49fcc2a42d9280bcc", | 1485 | + "url": "https://api.github.com/repos/schmittjoh/JMSSecurityExtraBundle/zipball/1.5.1", |
1486 | + "reference": "1.5.1", | ||
1491 | "shasum": "" | 1487 | "shasum": "" |
1492 | }, | 1488 | }, |
1493 | "require": { | 1489 | "require": { |
1494 | - "jms/aop-bundle": "~1.0", | ||
1495 | - "jms/di-extra-bundle": "~1.3", | ||
1496 | - "jms/metadata": "~1.0", | ||
1497 | - "jms/parser-lib": "~1.0", | ||
1498 | - "symfony/framework-bundle": "~2.1", | 1490 | + "jms/aop-bundle": ">=1.0,<2.0", |
1491 | + "jms/di-extra-bundle": ">=1.3,<2.0", | ||
1492 | + "jms/metadata": ">=1.0,<2.0", | ||
1493 | + "jms/parser-lib": ">=1.0,<2.0", | ||
1494 | + "symfony/framework-bundle": ">=2.1,<3.0", | ||
1499 | "symfony/security-bundle": "*" | 1495 | "symfony/security-bundle": "*" |
1500 | }, | 1496 | }, |
1501 | "require-dev": { | 1497 | "require-dev": { |
@@ -2055,17 +2051,17 @@ | @@ -2055,17 +2051,17 @@ | ||
2055 | "source": { | 2051 | "source": { |
2056 | "type": "git", | 2052 | "type": "git", |
2057 | "url": "https://github.com/kriswallsmith/assetic.git", | 2053 | "url": "https://github.com/kriswallsmith/assetic.git", |
2058 | - "reference": "a826e4b96f5c607ff47ef61caf3826b2b1e840ec" | 2054 | + "reference": "v1.1.1" |
2059 | }, | 2055 | }, |
2060 | "dist": { | 2056 | "dist": { |
2061 | "type": "zip", | 2057 | "type": "zip", |
2062 | - "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/a826e4b96f5c607ff47ef61caf3826b2b1e840ec", | ||
2063 | - "reference": "a826e4b96f5c607ff47ef61caf3826b2b1e840ec", | 2058 | + "url": "https://api.github.com/repos/kriswallsmith/assetic/zipball/v1.1.1", |
2059 | + "reference": "v1.1.1", | ||
2064 | "shasum": "" | 2060 | "shasum": "" |
2065 | }, | 2061 | }, |
2066 | "require": { | 2062 | "require": { |
2067 | "php": ">=5.3.1", | 2063 | "php": ">=5.3.1", |
2068 | - "symfony/process": "~2.1" | 2064 | + "symfony/process": ">=2.1,<3.0" |
2069 | }, | 2065 | }, |
2070 | "require-dev": { | 2066 | "require-dev": { |
2071 | "cssmin/cssmin": "*", | 2067 | "cssmin/cssmin": "*", |
@@ -2075,9 +2071,9 @@ | @@ -2075,9 +2071,9 @@ | ||
2075 | "leafo/scssphp": "*", | 2071 | "leafo/scssphp": "*", |
2076 | "leafo/scssphp-compass": "*", | 2072 | "leafo/scssphp-compass": "*", |
2077 | "mrclay/minify": "*", | 2073 | "mrclay/minify": "*", |
2078 | - "phpunit/phpunit": "~3.7", | 2074 | + "phpunit/phpunit": ">=3.7,<4.0", |
2079 | "ptachoire/cssembed": "*", | 2075 | "ptachoire/cssembed": "*", |
2080 | - "twig/twig": "~1.6" | 2076 | + "twig/twig": ">=1.6,<2.0" |
2081 | }, | 2077 | }, |
2082 | "suggest": { | 2078 | "suggest": { |
2083 | "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler", | 2079 | "leafo/lessphp": "Assetic provides the integration with the lessphp LESS compiler", |
@@ -2422,13 +2418,13 @@ | @@ -2422,13 +2418,13 @@ | ||
2422 | "version": "1.0.0", | 2418 | "version": "1.0.0", |
2423 | "source": { | 2419 | "source": { |
2424 | "type": "git", | 2420 | "type": "git", |
2425 | - "url": "https://github.com/php-fig/log.git", | ||
2426 | - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" | 2421 | + "url": "https://github.com/php-fig/log", |
2422 | + "reference": "1.0.0" | ||
2427 | }, | 2423 | }, |
2428 | "dist": { | 2424 | "dist": { |
2429 | "type": "zip", | 2425 | "type": "zip", |
2430 | - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", | ||
2431 | - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", | 2426 | + "url": "https://github.com/php-fig/log/archive/1.0.0.zip", |
2427 | + "reference": "1.0.0", | ||
2432 | "shasum": "" | 2428 | "shasum": "" |
2433 | }, | 2429 | }, |
2434 | "type": "library", | 2430 | "type": "library", |
@@ -2654,27 +2650,27 @@ | @@ -2654,27 +2650,27 @@ | ||
2654 | "source": { | 2650 | "source": { |
2655 | "type": "git", | 2651 | "type": "git", |
2656 | "url": "https://github.com/symfony/AsseticBundle.git", | 2652 | "url": "https://github.com/symfony/AsseticBundle.git", |
2657 | - "reference": "146dd3cb46b302bd471560471c6aaa930483dac1" | 2653 | + "reference": "v2.3.0" |
2658 | }, | 2654 | }, |
2659 | "dist": { | 2655 | "dist": { |
2660 | "type": "zip", | 2656 | "type": "zip", |
2661 | - "url": "https://api.github.com/repos/symfony/AsseticBundle/zipball/146dd3cb46b302bd471560471c6aaa930483dac1", | ||
2662 | - "reference": "146dd3cb46b302bd471560471c6aaa930483dac1", | 2657 | + "url": "https://api.github.com/repos/symfony/AsseticBundle/zipball/v2.3.0", |
2658 | + "reference": "v2.3.0", | ||
2663 | "shasum": "" | 2659 | "shasum": "" |
2664 | }, | 2660 | }, |
2665 | "require": { | 2661 | "require": { |
2666 | - "kriswallsmith/assetic": "~1.1", | 2662 | + "kriswallsmith/assetic": ">=1.1,<2.0", |
2667 | "php": ">=5.3.0", | 2663 | "php": ">=5.3.0", |
2668 | - "symfony/framework-bundle": "~2.1" | 2664 | + "symfony/framework-bundle": ">=2.1,<3.0" |
2669 | }, | 2665 | }, |
2670 | "require-dev": { | 2666 | "require-dev": { |
2671 | - "symfony/class-loader": "~2.1", | ||
2672 | - "symfony/console": "~2.1", | ||
2673 | - "symfony/css-selector": "~2.1", | ||
2674 | - "symfony/dom-crawler": "~2.1", | ||
2675 | - "symfony/form": "~2.1", | ||
2676 | - "symfony/twig-bundle": "~2.1", | ||
2677 | - "symfony/yaml": "~2.1" | 2667 | + "symfony/class-loader": ">=2.1,<3.0", |
2668 | + "symfony/console": ">=2.1,<3.0", | ||
2669 | + "symfony/css-selector": ">=2.1,<3.0", | ||
2670 | + "symfony/dom-crawler": ">=2.1,<3.0", | ||
2671 | + "symfony/form": ">=2.1,<3.0", | ||
2672 | + "symfony/twig-bundle": ">=2.1,<3.0", | ||
2673 | + "symfony/yaml": ">=2.1,<3.0" | ||
2678 | }, | 2674 | }, |
2679 | "suggest": { | 2675 | "suggest": { |
2680 | "symfony/twig-bundle": "~2.1" | 2676 | "symfony/twig-bundle": "~2.1" |
@@ -2817,23 +2813,23 @@ | @@ -2817,23 +2813,23 @@ | ||
2817 | "source": { | 2813 | "source": { |
2818 | "type": "git", | 2814 | "type": "git", |
2819 | "url": "https://github.com/symfony/MonologBundle.git", | 2815 | "url": "https://github.com/symfony/MonologBundle.git", |
2820 | - "reference": "03ed73bc11367b3156cc21f22ac37c7f70fcd10a" | 2816 | + "reference": "v2.3.0" |
2821 | }, | 2817 | }, |
2822 | "dist": { | 2818 | "dist": { |
2823 | "type": "zip", | 2819 | "type": "zip", |
2824 | - "url": "https://api.github.com/repos/symfony/MonologBundle/zipball/03ed73bc11367b3156cc21f22ac37c7f70fcd10a", | ||
2825 | - "reference": "03ed73bc11367b3156cc21f22ac37c7f70fcd10a", | 2820 | + "url": "https://api.github.com/repos/symfony/MonologBundle/zipball/v2.3.0", |
2821 | + "reference": "v2.3.0", | ||
2826 | "shasum": "" | 2822 | "shasum": "" |
2827 | }, | 2823 | }, |
2828 | "require": { | 2824 | "require": { |
2829 | - "monolog/monolog": "~1.3", | 2825 | + "monolog/monolog": ">=1.3,<2.0", |
2830 | "php": ">=5.3.2", | 2826 | "php": ">=5.3.2", |
2831 | - "symfony/config": "~2.2-beta2", | ||
2832 | - "symfony/dependency-injection": "~2.2-beta2", | ||
2833 | - "symfony/monolog-bridge": "~2.2-beta2" | 2827 | + "symfony/config": ">=2.2-beta2,<3.0", |
2828 | + "symfony/dependency-injection": ">=2.2-beta2,<3.0", | ||
2829 | + "symfony/monolog-bridge": ">=2.2-beta2,<3.0" | ||
2834 | }, | 2830 | }, |
2835 | "require-dev": { | 2831 | "require-dev": { |
2836 | - "symfony/yaml": "~2.2-beta2" | 2832 | + "symfony/yaml": ">=2.2-beta2,<3.0" |
2837 | }, | 2833 | }, |
2838 | "type": "symfony-bundle", | 2834 | "type": "symfony-bundle", |
2839 | "extra": { | 2835 | "extra": { |
@@ -3164,7 +3160,7 @@ | @@ -3164,7 +3160,7 @@ | ||
3164 | "role": "Lead Developer" | 3160 | "role": "Lead Developer" |
3165 | }, | 3161 | }, |
3166 | { | 3162 | { |
3167 | - "name": "Armin Ronacher", | 3163 | + "name": "Armin Ronacher2", |
3168 | "email": "armin.ronacher@active-4.com", | 3164 | "email": "armin.ronacher@active-4.com", |
3169 | "role": "Project Founder" | 3165 | "role": "Project Founder" |
3170 | }, | 3166 | }, |
src/Cacic/CommonBundle/Entity/ComputadorColetaRepository.php
@@ -161,7 +161,8 @@ class ComputadorColetaRepository extends EntityRepository | @@ -161,7 +161,8 @@ class ComputadorColetaRepository extends EntityRepository | ||
161 | ->innerJoin('rede.idLocal', 'local') | 161 | ->innerJoin('rede.idLocal', 'local') |
162 | ->innerJoin('CacicCommonBundle:PropriedadeSoftware', 'prop', 'WITH', 'prop.classProperty = coleta.classProperty') | 162 | ->innerJoin('CacicCommonBundle:PropriedadeSoftware', 'prop', 'WITH', 'prop.classProperty = coleta.classProperty') |
163 | ->innerJoin('prop.software', 'soft') | 163 | ->innerJoin('prop.software', 'soft') |
164 | - ->where('soft.nmSoftware = :software') | 164 | + ->orWhere('property.nmPropertyName = :software') |
165 | + ->orWhere('prop.displayName = :software') | ||
165 | ->setParameter('software', $software); | 166 | ->setParameter('software', $software); |
166 | 167 | ||
167 | /** | 168 | /** |
src/Cacic/WSBundle/Controller/ColetaController.php
@@ -49,6 +49,9 @@ class ColetaController extends Controller | @@ -49,6 +49,9 @@ class ColetaController extends Controller | ||
49 | //$strComputerSystem = OldCacicHelper::deCrypt( $request, $request->get('ComputerSystem') ); | 49 | //$strComputerSystem = OldCacicHelper::deCrypt( $request, $request->get('ComputerSystem') ); |
50 | //$strOperatingSystem = OldCacicHelper::deCrypt( $request, $request->request->get('OperatingSystem') ); | 50 | //$strOperatingSystem = OldCacicHelper::deCrypt( $request, $request->request->get('OperatingSystem') ); |
51 | $data = new \DateTime('NOW'); | 51 | $data = new \DateTime('NOW'); |
52 | + $data_inicio = $data->format('d/m/Y H:i:s'); | ||
53 | + $data = microtime(); | ||
54 | + $logger->debug("%%% Início da operação de coleta: $data_inicio %%%"); | ||
52 | 55 | ||
53 | $te_node_adress = TagValueHelper::getValueFromTags( 'MACAddress', $strNetworkAdapterConfiguration ); | 56 | $te_node_adress = TagValueHelper::getValueFromTags( 'MACAddress', $strNetworkAdapterConfiguration ); |
54 | $te_so = $request->get( 'te_so' ); | 57 | $te_so = $request->get( 'te_so' ); |
@@ -58,60 +61,38 @@ class ColetaController extends Controller | @@ -58,60 +61,38 @@ class ColetaController extends Controller | ||
58 | //vefifica se existe SO coletado se não, insere novo SO | 61 | //vefifica se existe SO coletado se não, insere novo SO |
59 | $so = $this->getDoctrine()->getRepository('CacicCommonBundle:So')->findOneBy( array('teSo'=>$te_so) ); | 62 | $so = $this->getDoctrine()->getRepository('CacicCommonBundle:So')->findOneBy( array('teSo'=>$te_so) ); |
60 | $computador = $this->getDoctrine()->getRepository('CacicCommonBundle:Computador')->findOneBy( array('idSo'=>$so, 'teNodeAddress'=>$te_node_adress) ); | 63 | $computador = $this->getDoctrine()->getRepository('CacicCommonBundle:Computador')->findOneBy( array('idSo'=>$so, 'teNodeAddress'=>$te_node_adress) ); |
61 | - $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta( $request ); | 64 | + $netmask = TagValueHelper::getValueFromTags( 'IPSubnet', $strNetworkAdapterConfiguration ); |
65 | + $ip_computador = $request->get('te_ip_computador'); | ||
66 | + $rede = $this->getDoctrine()->getRepository('CacicCommonBundle:Rede')->getDadosRedePreColeta( $ip_computador, $netmask ); | ||
62 | //$local = $this->getDoctrine()->getRepository('CacicCommonBundle:Local')->findOneBy(array( 'idLocal' => $rede->getIdLocal() )); | 67 | //$local = $this->getDoctrine()->getRepository('CacicCommonBundle:Local')->findOneBy(array( 'idLocal' => $rede->getIdLocal() )); |
63 | $strCollectType = OldCacicHelper::deCrypt($request, $request->get('CollectType')); | 68 | $strCollectType = OldCacicHelper::deCrypt($request, $request->get('CollectType')); |
64 | 69 | ||
65 | // Defino os dois arrays que conterão as configurações para Coletas, Classes e Propriedades | 70 | // Defino os dois arrays que conterão as configurações para Coletas, Classes e Propriedades |
66 | $arrClassesNames = array(); | 71 | $arrClassesNames = array(); |
67 | - $arrCollectsDefClasses[$strCollectType] = array(); | ||
68 | 72 | ||
69 | $detalhesClasses = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->listaDetalhesClasseAcoes($strCollectType); | 73 | $detalhesClasses = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->listaDetalhesClasseAcoes($strCollectType); |
74 | + $output = $this->arrayClasses($detalhesClasses, $arrClassesNames); | ||
70 | 75 | ||
71 | - foreach ($detalhesClasses as $detalhe) | ||
72 | - { | ||
73 | - // Adiciona classe no Array de classes que estão no banco | ||
74 | - if (!in_array($detalhe['nmClassName'], $arrClassesNames)) { | ||
75 | - array_push($arrClassesNames, $detalhe['nmClassName']); | ||
76 | - } | ||
77 | - // Primeiro cria array com as informações das propriedades | ||
78 | - $property = array( | ||
79 | - 'idClassProperty' => $detalhe['idClassProperty'], | ||
80 | - 'nmFunctionPreDb' => $detalhe['nmFunctionPreDb'] | ||
81 | - ); | ||
82 | - | ||
83 | - | ||
84 | - $nmPropertyName = $detalhe['nmPropertyName']; | ||
85 | - $logger->debug("Adicionando propriedade $nmPropertyName no array de propriedades"); | ||
86 | - // Aqui o array já existe. Só substituo pelo novo valor | ||
87 | - $arrCollectsDefClasses[$strCollectType][$detalhe['nmClassName']][$detalhe['nmPropertyName']] = $property; | 76 | + if ($output) { |
77 | + $arrCollectsDefClasses[$strCollectType] = &$output[0]; | ||
78 | + $arrClassesNames = $output[1]; | ||
79 | + } else { | ||
80 | + $arrCollectsDefClasses[$strCollectType] = array(); | ||
88 | } | 81 | } |
89 | 82 | ||
90 | //$teste = print_r($arrCollectsDefClasses, true); | 83 | //$teste = print_r($arrCollectsDefClasses, true); |
91 | //$teste = print_r($arrClassesNames, true); | 84 | //$teste = print_r($arrClassesNames, true); |
92 | - //error_log("22222222222222222222222222222222222222222222222222222222222222 $teste"); | 85 | + //$logger->debug("22222222222222222222222222222222222222222222222222222222222222 $teste"); |
93 | 86 | ||
94 | if ($arrCollectsDefClasses[$strCollectType]) | 87 | if ($arrCollectsDefClasses[$strCollectType]) |
95 | { | 88 | { |
96 | - // Obtenho configuração para notificação de alterações | ||
97 | - //$resConfigsLocais = $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->listarNotificacaoPropertyLocal($rede->getIdLocal(), 'te_notificar_mudancas_properties'); | ||
98 | - //$resConfigsLocaisEmail = $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->listarNotificacaoEmailLocal($rede->getIdLocal()); | ||
99 | - | ||
100 | - //$arrClassesAndProperties = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->listaPorPropertyNotificacao( $resConfigsLocais->getVlConfiguracao() ) ; | ||
101 | - | ||
102 | - //foreach ($arrClassesAndProperties as $arrClassesAndProperty) | ||
103 | - // $arrClassesPropertiesToNotificate[$arrClassesAndProperty['nmClassName'] . '.' . $arrClassesAndProperty['nmPropertyName']] = $arrClassesAndProperty['tePropertyDescription']; | ||
104 | - | ||
105 | - $strInsertedItems_Text = ''; | ||
106 | - $strDeletedItems_Text = ''; | ||
107 | - $strUpdatedItems_Text = ''; | ||
108 | - | ||
109 | //error_log("00000000000000000000000000000000000000000000000000000000: $strCollectType"); | 89 | //error_log("00000000000000000000000000000000000000000000000000000000: $strCollectType"); |
110 | 90 | ||
111 | foreach( $request->request->all() as $strClassName => $strClassValues) | 91 | foreach( $request->request->all() as $strClassName => $strClassValues) |
112 | { | 92 | { |
113 | //$teste = OldCacicHelper::deCrypt($request, $strClassValues); | 93 | //$teste = OldCacicHelper::deCrypt($request, $strClassValues); |
114 | //$logger->debug("444444444444444444444444444444444444444444444444444444444: $strClassName | \n $teste"); | 94 | //$logger->debug("444444444444444444444444444444444444444444444444444444444: $strClassName | \n $teste"); |
95 | + //$logger->debug("444444444444444444444444444444444444444444444444444444444: $strClassName"); | ||
115 | //error_log("444444444444444444444444444444444444444444444444444444: $strClassName"); | 96 | //error_log("444444444444444444444444444444444444444444444444444444: $strClassName"); |
116 | 97 | ||
117 | 98 | ||
@@ -124,192 +105,15 @@ class ColetaController extends Controller | @@ -124,192 +105,15 @@ class ColetaController extends Controller | ||
124 | // A propriedade da coleta de software é multi valorada. Preciso tratar diferente | 105 | // A propriedade da coleta de software é multi valorada. Preciso tratar diferente |
125 | if ($strClassName == "SoftwareList") { | 106 | if ($strClassName == "SoftwareList") { |
126 | 107 | ||
127 | - // Primeiro preciso pegar todas as tags que forem software | ||
128 | - $arrSoftware = TagValueHelper::getSoftwareTags($strNewClassValues); | ||
129 | - | ||
130 | - // Agora insere cada registro de software individualmente | ||
131 | - foreach ($arrSoftware as $software) { | ||
132 | - // Armazeno todas as propriedades dessa classe enviadas pela requisição | ||
133 | - $arrTags = TagValueHelper::getTagsFromValues($software); | ||
134 | - | ||
135 | - // Crio um array multidimensional com as tags e os valores | ||
136 | - foreach ($arrTags as $tagNames) { | ||
137 | - // Essa função garante que só serão retornados caracteres com UTF8 Válido | ||
138 | - $texto = TagValueHelper::UTF8Sanitize(TagValueHelper::getValueFromTags($tagNames, $software)); | ||
139 | - $arrTagsNames[$tagNames] = $texto; | ||
140 | - } | ||
141 | - | ||
142 | - // Para software, cada identificador será uma propriedade | ||
143 | - $softwareName = $arrTagsNames['IDSoftware']; | ||
144 | - | ||
145 | - // Remove o IDSoftware do array | ||
146 | - unset($arrTagsNames['IDSoftware']); | ||
147 | - | ||
148 | - // Armazeno o IDSoftware como Propriedade | ||
149 | - $idClassProperty = $arrCollectsDefClasses[$strCollectType][$strClassName][$softwareName]['idClassProperty']; | ||
150 | - | ||
151 | - // Se o IDSoftware não existir, cria | ||
152 | - if (empty($idClassProperty)) { | ||
153 | - $logger->debug("Software $softwareName não encontrado. Adicionando um novo software"); | ||
154 | - // Pega o Id da classe | ||
155 | - $idClass = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->findOneBy( array('nmClassName'=>$strClassName) ); | ||
156 | - | ||
157 | - $property = new ClassProperty(); | ||
158 | - $property->setNmPropertyName($softwareName); | ||
159 | - $property->setTePropertyDescription($arrTagsNames['DisplayName']); | ||
160 | - | ||
161 | - // Referência à classe | ||
162 | - $property->setIdClass($idClass); | ||
163 | - | ||
164 | - // Grava a propriedade nova | ||
165 | - $this->getDoctrine()->getManager()->persist($property); | ||
166 | - $this->getDoctrine()->getManager()->flush(); | ||
167 | - | ||
168 | - // Retorna o novo ID | ||
169 | - $idClassProperty = $property->getIdClassProperty(); | ||
170 | - } | ||
171 | - | ||
172 | - // Chama função que grava a propriedade | ||
173 | - $this->gerColsSetProperty('IDSoftware', $software, $idClassProperty, $computador); | ||
174 | - | ||
175 | - // Agora gravo todas as propriedades para o software na tabela propriedade_software | ||
176 | - $propriedadeSoftware = $this->getDoctrine()->getRepository('CacicCommonBundle:PropriedadeSoftware')->findOneBy( array('classProperty'=> $idClassProperty, 'computador' => $computador) ); | ||
177 | - $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy( array( 'idClassProperty'=> $idClassProperty ) ); | ||
178 | - | ||
179 | - if (empty($propriedadeSoftware)) { | ||
180 | - | ||
181 | - // Se não tiver nome coloco o ID Software no nome | ||
182 | - if (empty($arrTagsNames['DisplayName'])) { | ||
183 | - $nmSoftware = $softwareName; | ||
184 | - } else { | ||
185 | - $nmSoftware = $arrTagsNames['DisplayName']; | ||
186 | - } | ||
187 | - | ||
188 | - | ||
189 | - $softwareObject = $this->getDoctrine()->getRepository('CacicCommonBundle:Software')->findOneBy( array( 'nmSoftware' => $nmSoftware ) ); | ||
190 | - if (empty($softwareObject)) { | ||
191 | - $softwareObject = new Software(); | ||
192 | - // Grava software recém inserido | ||
193 | - $this->getDoctrine()->getManager()->persist($softwareObject); | ||
194 | - $this->getDoctrine()->getManager()->flush(); | ||
195 | - } | ||
196 | - | ||
197 | - // Depois adiciono as propriedades | ||
198 | - $propriedadeSoftware = new PropriedadeSoftware(); | ||
199 | - | ||
200 | - $propriedadeSoftware->setClassProperty($classPropertyObject); | ||
201 | - $propriedadeSoftware->setComputador($computador); | ||
202 | - | ||
203 | - // Ajusta valores coletados | ||
204 | - $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']); | ||
205 | - $propriedadeSoftware->setDisplayVersion($arrTagsNames['DisplayVersion']); | ||
206 | - $propriedadeSoftware->setURLInfoAbout($arrTagsNames['URLInfoAbout']); | ||
207 | - $propriedadeSoftware->setSoftware($softwareObject); | ||
208 | - | ||
209 | - // Grava no banco de dados | ||
210 | - $this->getDoctrine()->getManager()->persist($propriedadeSoftware); | ||
211 | - $this->getDoctrine()->getManager()->flush(); | ||
212 | - } else { | ||
213 | - // Adiciona referência à tabela de softwares | ||
214 | - $softwareObject = $this->getDoctrine()->getRepository('CacicCommonBundle:Software')->find( $propriedadeSoftware->getSoftware()->getIdSoftware() ); | ||
215 | - | ||
216 | - // Se não tiver nome coloco o ID Software no nome | ||
217 | - if (empty($arrTagsNames['DisplayName'])) { | ||
218 | - $softwareObject->setNmSoftware($softwareName); | ||
219 | - } else { | ||
220 | - $softwareObject->setNmSoftware($arrTagsNames['DisplayName']); | ||
221 | - } | ||
222 | - | ||
223 | - // Grava software recém inserido | ||
224 | - $this->getDoctrine()->getManager()->persist($softwareObject); | ||
225 | - //$this->getDoctrine()->getManager()->flush(); | ||
226 | - | ||
227 | - // Ajusta valores coletados | ||
228 | - $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']); | ||
229 | - $propriedadeSoftware->setDisplayVersion($arrTagsNames['DisplayVersion']); | ||
230 | - $propriedadeSoftware->setURLInfoAbout($arrTagsNames['URLInfoAbout']); | ||
231 | - $propriedadeSoftware->setSoftware($softwareObject); | ||
232 | - | ||
233 | - // Salva valor da coleta | ||
234 | - $this->getDoctrine()->getManager()->persist($propriedadeSoftware); | ||
235 | - $this->getDoctrine()->getManager()->flush(); | ||
236 | - } | ||
237 | - | ||
238 | - } | 108 | + $this->coletaSoftware($strNewClassValues, $arrCollectsDefClasses, $strCollectType, $strClassName, $computador); |
239 | 109 | ||
240 | } elseif (!empty($strNewClassValues)) { | 110 | } elseif (!empty($strNewClassValues)) { |
241 | - // Armazeno todas as propriedades dessa classe enviadas pela requisição | ||
242 | - $arrTagsNames = TagValueHelper::getTagsFromValues($strNewClassValues); | ||
243 | - | ||
244 | - // Agora gravo todas as propriedades dessa classe na tabela de computadores | ||
245 | - foreach ($arrTagsNames as $classPropertyName) { | ||
246 | - $logger->debug("Processando a proriedade WMI $classPropertyName para a classe $strClassName"); | ||
247 | - // Pega classe | ||
248 | - $idClass = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->findOneBy( array('nmClassName'=>$strClassName) ); | ||
249 | - | ||
250 | - // Caso a propriedade ainda não esteja cadastrada no banco, crio na hora | ||
251 | - if (array_key_exists($classPropertyName, $arrCollectsDefClasses[$strCollectType][$strClassName])) { | ||
252 | - // Somente armazeno o valor que já existe | ||
253 | - $idClassProperty = $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName]['idClassProperty']; | ||
254 | - $logger->debug("Propriedade encontrada: $classPropertyName id_class_property = $idClassProperty. Apenas atualizar"); | ||
255 | - } else { | ||
256 | - // Se não existir cria a propriedade | ||
257 | - $logger->info("Criando propriedade $classPropertyName para a classe $strClassName"); | ||
258 | - | ||
259 | - $classPropertyObject = new ClassProperty(); | ||
260 | - $classPropertyObject->setIdClass($idClass); | ||
261 | - $classPropertyObject->setNmPropertyName($classPropertyName); | ||
262 | - $classPropertyObject->setTePropertyDescription('On the fly created Property'); | ||
263 | - | ||
264 | - $this->getDoctrine()->getManager()->persist($classPropertyObject); | ||
265 | - $this->getDoctrine()->getManager()->flush(); | ||
266 | - | ||
267 | - // Finalmente adiciono no array de classes e propriedades | ||
268 | - $idClassProperty = $classPropertyObject->getIdClassProperty(); | ||
269 | - $property = array( | ||
270 | - 'idClassProperty' => $idClassProperty, | ||
271 | - 'nmFunctionPreDb' => null | ||
272 | - ); | ||
273 | - $arrCollectsDefClasses[$strCollectType][$className][$classPropertyName] = $property; | ||
274 | - } | ||
275 | - //error_log("888888888888888888888888888888888888888888888: $strClassName | $idClassProperty | $classPropertyName"); | ||
276 | - | ||
277 | - // Chama função que grava a propriedade | ||
278 | - $this->gerColsSetProperty($classPropertyName, $strNewClassValues, $idClassProperty, $computador); | ||
279 | - } | 111 | + |
112 | + $this->coletaGeral($strNewClassValues, $arrCollectsDefClasses, $strCollectType, $strClassName, $computador); | ||
113 | + | ||
280 | } | 114 | } |
281 | } | 115 | } |
282 | } | 116 | } |
283 | - | ||
284 | - // Caso a string acima não esteja vazia, monto o email para notificação | ||
285 | - // FIXME: Detectar alteração de dispositivos de hardware e notificar o Administrador | ||
286 | - if ($strDeletedItems_Text || $strInsertedItems_Text || $strUpdatedItems_Text ) | ||
287 | - { | ||
288 | - if ($strDeletedItems_Text) | ||
289 | - $strDeletedItems_Text = chr(13) . 'Itens Removidos:' . chr(13) . $strDeletedItems_Text . chr(13); | ||
290 | - | ||
291 | - if ($strInsertedItems_Text) | ||
292 | - $strInsertedItems_Text = chr(13) . 'Itens Inseridos:' . chr(13) . $strInsertedItems_Text . chr(13); | ||
293 | - | ||
294 | - if ($strUpdatedItems_Text) | ||
295 | - $strUpdatedItems_Text = chr(13) . 'Itens Alterados:' . chr(13) . $strUpdatedItems_Text . chr(13); | ||
296 | - | ||
297 | - | ||
298 | - $strCorpoMail = ''; | ||
299 | - $strCorpoMail .= " Prezado Administrador,\n\n"; | ||
300 | - $strCorpoMail .= " uma alteração foi identificada no computador cujos detalhes encontram-se abaixo discriminados:\n\n"; | ||
301 | - $strCorpoMail .= " Nome do Host: ". $computador->getNmComputador() ."\n"; | ||
302 | - $strCorpoMail .= " Endereço IP....: ".$computador->getTeIpComputador() . "\n"; | ||
303 | - $strCorpoMail .= " Local...............: ". $rede['nmLocal']."\n"; | ||
304 | - $strCorpoMail .= " Rede................: ". $rede['nmRede'] . ' (' . $rede['teIpRede'] .")\n\n"; | ||
305 | - $strCorpoMail .= $strDeletedItems_Text . $strInsertedItems_Text . $strUpdatedItems_Text; | ||
306 | - $strCorpoMail .= "\n\nPara visualizar mais informações sobre esse computador, acesse o endereço\nhttp://"; | ||
307 | - $strCorpoMail .= CACIC_PATH . '/relatorios/computador/computador.php?id_computador=' . $computador->getIdComputador(); | ||
308 | - $strCorpoMail .= "\n\n\n________________________________________________\n"; | ||
309 | - $strCorpoMail .= "CACIC - e" . date('d/m/Y H:i') . "h \n"; | ||
310 | -// Manda mail para os administradores. | ||
311 | - //TODO mail($resConfigsLocais['te_notificar_mudancas_emails'], "[Sistema CACIC] Alteração Detectada - " . $arrCollectsDefClasses[$strCollectType], "$strCorpoMail", "From: cacic@{$_SERVER['SERVER_NAME']}"); | ||
312 | - } | ||
313 | } | 117 | } |
314 | $teste_object = $this->gravaTESTES($grava_teste."\nFinal"); | 118 | $teste_object = $this->gravaTESTES($grava_teste."\nFinal"); |
315 | $em = $this->getDoctrine()->getManager(); | 119 | $em = $this->getDoctrine()->getManager(); |
@@ -319,6 +123,11 @@ class ColetaController extends Controller | @@ -319,6 +123,11 @@ class ColetaController extends Controller | ||
319 | $em->flush(); | 123 | $em->flush(); |
320 | //$this->getDoctrine()->getManager()->flush(); //persistencia dos dados no BD | 124 | //$this->getDoctrine()->getManager()->flush(); //persistencia dos dados no BD |
321 | 125 | ||
126 | + $data_fim = new \DateTime('NOW'); | ||
127 | + $tempo = (microtime() - $data); | ||
128 | + $data_fim = $data_fim->format('d/m/Y H:i:s'); | ||
129 | + $logger->debug("%%% Final da operação de coleta: $data_fim. Tempo de execução da coleta: $tempo %%%"); | ||
130 | + | ||
322 | $response = new Response(); | 131 | $response = new Response(); |
323 | $response->headers->set('Content-Type', 'xml'); | 132 | $response->headers->set('Content-Type', 'xml'); |
324 | $cacic_helper = new OldCacicHelper( $this->get('kernel') ); | 133 | $cacic_helper = new OldCacicHelper( $this->get('kernel') ); |
@@ -409,6 +218,7 @@ class ColetaController extends Controller | @@ -409,6 +218,7 @@ class ColetaController extends Controller | ||
409 | } else { | 218 | } else { |
410 | //error_log("444444444444444444444444444444444444444444444444: Criando histórico"); | 219 | //error_log("444444444444444444444444444444444444444444444444: Criando histórico"); |
411 | // Caso exista, registro um histórico e atualiza o valor atual | 220 | // Caso exista, registro um histórico e atualiza o valor atual |
221 | + $coletaOld = "Classe WMI: ".$computadorColeta->getClassProperty()->getIdClass()->getNmClassName()." | "."Propriedade: ".$computadorColeta->getClassProperty()->getNmPropertyName()." | Valor: ".$computadorColeta->getTeClassPropertyValue(); | ||
412 | $computadorColeta->setComputador( $computador ); | 222 | $computadorColeta->setComputador( $computador ); |
413 | // Pega o objeto para gravar | 223 | // Pega o objeto para gravar |
414 | $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy( array( 'idClassProperty'=> $idClassProperty ) ); | 224 | $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy( array( 'idClassProperty'=> $idClassProperty ) ); |
@@ -434,6 +244,10 @@ class ColetaController extends Controller | @@ -434,6 +244,10 @@ class ColetaController extends Controller | ||
434 | 244 | ||
435 | // Commit | 245 | // Commit |
436 | $this->getDoctrine()->getManager()->flush(); | 246 | $this->getDoctrine()->getManager()->flush(); |
247 | + | ||
248 | + // Notifica alteração | ||
249 | + $coletaNew = "Classe WMI: ".$computadorColeta->getClassProperty()->getIdClass()->getNmClassName()." | "."Propriedade: ".$computadorColeta->getClassProperty()->getNmPropertyName()." | Valor: ".$computadorColeta->getTeClassPropertyValue(); | ||
250 | + //$this->notificaAlteracao($coletaOld, $coletaNew, $computador); | ||
437 | } | 251 | } |
438 | } | 252 | } |
439 | 253 | ||
@@ -677,5 +491,263 @@ class ColetaController extends Controller | @@ -677,5 +491,263 @@ class ColetaController extends Controller | ||
677 | 491 | ||
678 | } | 492 | } |
679 | 493 | ||
494 | + /** | ||
495 | + * Cria array de classes e propriedades para coletar | ||
496 | + * | ||
497 | + * @param $detalhesClasses | ||
498 | + * @return array | ||
499 | + */ | ||
500 | + | ||
501 | + public function arrayClasses($detalhesClasses, $arrClassesNames) { | ||
502 | + $logger = $this->get('logger'); | ||
503 | + $output = array(); | ||
504 | + | ||
505 | + foreach ($detalhesClasses as $detalhe) | ||
506 | + { | ||
507 | + // Adiciona classe no Array de classes que estão no banco | ||
508 | + if (!in_array($detalhe['nmClassName'], $arrClassesNames)) { | ||
509 | + array_push($arrClassesNames, $detalhe['nmClassName']); | ||
510 | + } | ||
511 | + // Primeiro cria array com as informações das propriedades | ||
512 | + $property = array( | ||
513 | + 'idClassProperty' => $detalhe['idClassProperty'], | ||
514 | + 'nmFunctionPreDb' => $detalhe['nmFunctionPreDb'] | ||
515 | + ); | ||
516 | + | ||
517 | + | ||
518 | + $nmPropertyName = $detalhe['nmPropertyName']; | ||
519 | + $logger->debug("Adicionando propriedade $nmPropertyName no array de propriedades"); | ||
520 | + // Aqui o array já existe. Só substituo pelo novo valor | ||
521 | + $output[0][$detalhe['nmClassName']][$detalhe['nmPropertyName']] = $property; | ||
522 | + } | ||
523 | + $output[1] = $arrClassesNames; | ||
524 | + | ||
525 | + return $output; | ||
526 | + } | ||
527 | + | ||
528 | + /** | ||
529 | + * Processa parâmetros da coleta de software | ||
530 | + * | ||
531 | + * @param $strNewClassValues | ||
532 | + * @param $arrCollectsDefClasses | ||
533 | + * @param $strCollectType | ||
534 | + * @param $strClassName | ||
535 | + */ | ||
536 | + | ||
537 | + public function coletaSoftware($strNewClassValues, $arrCollectsDefClasses, $strCollectType, $strClassName, $computador) { | ||
538 | + $logger = $this->get('logger'); | ||
539 | + | ||
540 | + // Primeiro preciso pegar todas as tags que forem software | ||
541 | + $arrSoftware = TagValueHelper::getSoftwareTags($strNewClassValues); | ||
542 | + | ||
543 | + // Agora insere cada registro de software individualmente | ||
544 | + foreach ($arrSoftware as $software) { | ||
545 | + // Armazeno todas as propriedades dessa classe enviadas pela requisição | ||
546 | + $arrTags = TagValueHelper::getTagsFromValues($software); | ||
547 | + | ||
548 | + // Crio um array multidimensional com as tags e os valores | ||
549 | + foreach ($arrTags as $tagNames) { | ||
550 | + // Essa função garante que só serão retornados caracteres com UTF8 Válido | ||
551 | + $texto = TagValueHelper::UTF8Sanitize(TagValueHelper::getValueFromTags($tagNames, $software)); | ||
552 | + $arrTagsNames[$tagNames] = $texto; | ||
553 | + } | ||
554 | + | ||
555 | + // Para software, cada identificador será uma propriedade | ||
556 | + $softwareName = $arrTagsNames['IDSoftware']; | ||
557 | + | ||
558 | + // Remove o IDSoftware do array | ||
559 | + unset($arrTagsNames['IDSoftware']); | ||
560 | + | ||
561 | + // Armazeno o IDSoftware como Propriedade | ||
562 | + $idClassProperty = $arrCollectsDefClasses[$strCollectType][$strClassName][$softwareName]['idClassProperty']; | ||
563 | + | ||
564 | + // Se o IDSoftware não existir, cria | ||
565 | + if (empty($idClassProperty)) { | ||
566 | + $logger->debug("Software $softwareName não encontrado. Adicionando um novo software"); | ||
567 | + // Pega o Id da classe | ||
568 | + $idClass = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->findOneBy( array('nmClassName'=>$strClassName) ); | ||
569 | + | ||
570 | + $property = new ClassProperty(); | ||
571 | + $property->setNmPropertyName($softwareName); | ||
572 | + $property->setTePropertyDescription($arrTagsNames['DisplayName']); | ||
573 | + | ||
574 | + // Referência à classe | ||
575 | + $property->setIdClass($idClass); | ||
576 | + | ||
577 | + // Grava a propriedade nova | ||
578 | + $this->getDoctrine()->getManager()->persist($property); | ||
579 | + $this->getDoctrine()->getManager()->flush(); | ||
580 | + | ||
581 | + // Retorna o novo ID | ||
582 | + $idClassProperty = $property->getIdClassProperty(); | ||
583 | + } | ||
584 | + | ||
585 | + // Chama função que grava a propriedade | ||
586 | + $this->gerColsSetProperty('IDSoftware', $software, $idClassProperty, $computador); | ||
587 | + | ||
588 | + // Agora gravo todas as propriedades para o software na tabela propriedade_software | ||
589 | + $propriedadeSoftware = $this->getDoctrine()->getRepository('CacicCommonBundle:PropriedadeSoftware')->findOneBy( array('classProperty'=> $idClassProperty, 'computador' => $computador) ); | ||
590 | + $classPropertyObject = $this->getDoctrine()->getRepository('CacicCommonBundle:ClassProperty')->findOneBy( array( 'idClassProperty'=> $idClassProperty ) ); | ||
591 | + | ||
592 | + if (empty($propriedadeSoftware)) { | ||
593 | + | ||
594 | + // Se não tiver nome coloco o ID Software no nome | ||
595 | + if (empty($arrTagsNames['DisplayName'])) { | ||
596 | + $nmSoftware = $softwareName; | ||
597 | + } else { | ||
598 | + $nmSoftware = $arrTagsNames['DisplayName']; | ||
599 | + } | ||
600 | + | ||
601 | + | ||
602 | + $softwareObject = $this->getDoctrine()->getRepository('CacicCommonBundle:Software')->findOneBy( array( 'nmSoftware' => $nmSoftware ) ); | ||
603 | + if (empty($softwareObject)) { | ||
604 | + $softwareObject = new Software(); | ||
605 | + // Grava software recém inserido | ||
606 | + $this->getDoctrine()->getManager()->persist($softwareObject); | ||
607 | + $this->getDoctrine()->getManager()->flush(); | ||
608 | + } | ||
609 | + | ||
610 | + // Depois adiciono as propriedades | ||
611 | + $propriedadeSoftware = new PropriedadeSoftware(); | ||
612 | + | ||
613 | + $propriedadeSoftware->setClassProperty($classPropertyObject); | ||
614 | + $propriedadeSoftware->setComputador($computador); | ||
615 | + | ||
616 | + // Ajusta valores coletados | ||
617 | + $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']); | ||
618 | + $propriedadeSoftware->setDisplayVersion($arrTagsNames['DisplayVersion']); | ||
619 | + $propriedadeSoftware->setURLInfoAbout($arrTagsNames['URLInfoAbout']); | ||
620 | + $propriedadeSoftware->setSoftware($softwareObject); | ||
621 | + | ||
622 | + // Grava no banco de dados | ||
623 | + $this->getDoctrine()->getManager()->persist($propriedadeSoftware); | ||
624 | + $this->getDoctrine()->getManager()->flush(); | ||
625 | + } else { | ||
626 | + // Adiciona referência à tabela de softwares | ||
627 | + $softwareObject = $this->getDoctrine()->getRepository('CacicCommonBundle:Software')->find( $propriedadeSoftware->getSoftware()->getIdSoftware() ); | ||
628 | + | ||
629 | + // Se não tiver nome coloco o ID Software no nome | ||
630 | + if (empty($arrTagsNames['DisplayName'])) { | ||
631 | + $softwareObject->setNmSoftware($softwareName); | ||
632 | + } else { | ||
633 | + $softwareObject->setNmSoftware($arrTagsNames['DisplayName']); | ||
634 | + } | ||
635 | + | ||
636 | + // Grava software recém inserido | ||
637 | + $this->getDoctrine()->getManager()->persist($softwareObject); | ||
638 | + //$this->getDoctrine()->getManager()->flush(); | ||
639 | + | ||
640 | + // Ajusta valores coletados | ||
641 | + $propriedadeSoftware->setDisplayName($arrTagsNames['DisplayName']); | ||
642 | + $propriedadeSoftware->setDisplayVersion($arrTagsNames['DisplayVersion']); | ||
643 | + $propriedadeSoftware->setURLInfoAbout($arrTagsNames['URLInfoAbout']); | ||
644 | + $propriedadeSoftware->setSoftware($softwareObject); | ||
645 | + | ||
646 | + // Salva valor da coleta | ||
647 | + $this->getDoctrine()->getManager()->persist($propriedadeSoftware); | ||
648 | + $this->getDoctrine()->getManager()->flush(); | ||
649 | + } | ||
650 | + | ||
651 | + } | ||
652 | + } | ||
653 | + | ||
654 | + /** | ||
655 | + * Processa informações de coleta | ||
656 | + * | ||
657 | + * @param $strNewClassValues | ||
658 | + * @param $arrCollectsDefClasses | ||
659 | + * @param $strCollectType | ||
660 | + * @param $strClassName | ||
661 | + * @param $computador | ||
662 | + */ | ||
663 | + | ||
664 | + public function coletaGeral($strNewClassValues, $arrCollectsDefClasses, $strCollectType, $strClassName, $computador) { | ||
665 | + $logger = $this->get('logger'); | ||
666 | + $logger->debug("Processando classe WMI: $strClassName"); | ||
667 | + | ||
668 | + // Armazeno todas as propriedades dessa classe enviadas pela requisição | ||
669 | + $arrTagsNames = TagValueHelper::getTagsFromValues($strNewClassValues); | ||
670 | + | ||
671 | + // Agora gravo todas as propriedades dessa classe na tabela de computadores | ||
672 | + foreach ($arrTagsNames as $classPropertyName) { | ||
673 | + $logger->debug("Processando a proriedade WMI $classPropertyName para a classe $strClassName"); | ||
674 | + // Pega classe | ||
675 | + $idClass = $this->getDoctrine()->getRepository('CacicCommonBundle:Classe')->findOneBy( array('nmClassName'=>$strClassName) ); | ||
676 | + | ||
677 | + // Caso a propriedade ainda não esteja cadastrada no banco, crio na hora | ||
678 | + if (array_key_exists($classPropertyName, $arrCollectsDefClasses[$strCollectType][$strClassName])) { | ||
679 | + // Somente armazeno o valor que já existe | ||
680 | + $idClassProperty = $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName]['idClassProperty']; | ||
681 | + $logger->debug("Propriedade encontrada: $classPropertyName id_class_property = $idClassProperty. Apenas atualizar"); | ||
682 | + } else { | ||
683 | + // Se não existir cria a propriedade | ||
684 | + $logger->info("Criando propriedade $classPropertyName para a classe $strClassName"); | ||
685 | + | ||
686 | + $classPropertyObject = new ClassProperty(); | ||
687 | + $classPropertyObject->setIdClass($idClass); | ||
688 | + $classPropertyObject->setNmPropertyName($classPropertyName); | ||
689 | + $classPropertyObject->setTePropertyDescription('On the fly created Property'); | ||
690 | + | ||
691 | + $this->getDoctrine()->getManager()->persist($classPropertyObject); | ||
692 | + $this->getDoctrine()->getManager()->flush(); | ||
693 | + | ||
694 | + // Finalmente adiciono no array de classes e propriedades | ||
695 | + $idClassProperty = $classPropertyObject->getIdClassProperty(); | ||
696 | + $property = array( | ||
697 | + 'idClassProperty' => $idClassProperty, | ||
698 | + 'nmFunctionPreDb' => null | ||
699 | + ); | ||
700 | + | ||
701 | + $arrCollectsDefClasses[$strCollectType][$strClassName][$classPropertyName] = $property; | ||
702 | + } | ||
703 | + //error_log("888888888888888888888888888888888888888888888: $strClassName | $idClassProperty | $classPropertyName"); | ||
704 | + | ||
705 | + // Chama função que grava a propriedade | ||
706 | + $this->gerColsSetProperty($classPropertyName, $strNewClassValues, $idClassProperty, $computador); | ||
707 | + } | ||
708 | + } | ||
709 | + | ||
710 | + /** | ||
711 | + * Envia notificação de alteração para o administrador do sistema | ||
712 | + * | ||
713 | + * @param $coletaOld | ||
714 | + * @param $coletaNew | ||
715 | + * @param $computador | ||
716 | + */ | ||
717 | + | ||
718 | + public function notificaAlteracao($coletaOld, $coletaNew, $computador) { | ||
719 | + $configuracoes = $this->getDoctrine()->getRepository('CacicCommonBundle:ConfiguracaoLocal')->findBy( array('idLocal' => $computador->getIdRede()->getIdLocal()) ); | ||
720 | + $emailNotificacao = $this->container->getParameter('swiftmailer.sender_address'); | ||
721 | + $organizacao = 'Administradores Cacic'; | ||
722 | + | ||
723 | + foreach ($configuracoes as $detalhe) { | ||
724 | + if ($detalhe->getIdConfiguracao() == 'te_notificar_mudanca_hardware') { | ||
725 | + $emailNotificacao = $detalhe->getVlConfiguracao(); | ||
726 | + } | ||
727 | + | ||
728 | + if ($detalhe->getIdConfiguracao() == 'nm_organizacao') { | ||
729 | + $organizacao = $detalhe->getVlConfiguracao(); | ||
730 | + } | ||
731 | + } | ||
732 | + | ||
733 | + | ||
734 | + $message = \Swift_Message::newInstance() | ||
735 | + ->setSubject("Notificação de alteração de configurações: $organizacao") | ||
736 | + ->setFrom($this->container->getParameter('swiftmailer.sender_address')) | ||
737 | + ->setTo($emailNotificacao) | ||
738 | + ->setBody( | ||
739 | + $this->renderView( | ||
740 | + 'CacicWSBundle:Coleta:alteracaoMail.txt.twig', | ||
741 | + array( | ||
742 | + 'coletaOld' => $coletaOld, | ||
743 | + 'coletaNew' => $coletaNew, | ||
744 | + 'computador' => $computador | ||
745 | + ) | ||
746 | + ) | ||
747 | + ) | ||
748 | + ; | ||
749 | + | ||
750 | + $this->get('mailer')->send($message); | ||
751 | + } | ||
680 | 752 | ||
681 | } | 753 | } |
src/Cacic/WSBundle/Helper/OldCacicHelper.php
@@ -230,4 +230,14 @@ class OldCacicHelper | @@ -230,4 +230,14 @@ class OldCacicHelper | ||
230 | return $intPos; | 230 | return $intPos; |
231 | } | 231 | } |
232 | 232 | ||
233 | + public static function udate($format = 'u', $utimestamp = null) { | ||
234 | + if (is_null($utimestamp)) | ||
235 | + $utimestamp = microtime(true); | ||
236 | + | ||
237 | + $timestamp = floor($utimestamp); | ||
238 | + $milliseconds = round(($utimestamp - $timestamp) * 1000000); | ||
239 | + | ||
240 | + return date(preg_replace('`(?<!\\\\)u`', $milliseconds, $format), $timestamp); | ||
241 | + } | ||
242 | + | ||
233 | } | 243 | } |
src/Cacic/WSBundle/Resources/views/Coleta/alteracaoMail.txt.twig
0 → 100644
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | +Prezado Administrador, | ||
2 | + | ||
3 | +Uma alteração foi identificada no computador cujos detalhes encontram-se abaixo discriminados: | ||
4 | + | ||
5 | +Nome do Host........: {{ computador.getNmComputador() }} | ||
6 | +Endereço IP.........: {{ computador.getTeIpComputador() }} | ||
7 | +Local...............: {{ computador.getIdRede.getIdLocal.getNmLocal() }} | ||
8 | +Rede................: {{ computador.getIdRede.getNmRede() }} ({{ computador.getIdRede.getTeIpRede() }}) | ||
9 | + | ||
10 | +As seguintes alterações foram detectadas: | ||
11 | + | ||
12 | +Coleta Anterior..: {{ coletaOld }} | ||
13 | +Nova Coleta......: {{ coletaNew }} | ||
14 | + | ||
15 | +Para visualizar mais informações sobre esse computador, acesse o seguinte endereço: | ||
16 | +{{ computador.getIdRede.getTeServCacic() }}{{ path('cacic_computador_detalhar') }}/{{ computador.getIdComputador }} | ||
17 | +__________________________________________________________________________ | ||
18 | +Data de envio da notificação: {{ "now"|date('d/m/Y H:i') }} | ||
0 | \ No newline at end of file | 19 | \ No newline at end of file |