Commit f1165d314ce3ab97bbad6dc313e9c9fe9d66fffd

Authored by Bruno Menezes
2 parents fbb600b2 e1973678
Exists in master and in 1 other branch 3.1

Merge branch 'master' of https://github.com/lightbase/cacic

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
@@ -22,5 +22,6 @@ monolog: @@ -22,5 +22,6 @@ monolog:
22 assetic: 22 assetic:
23 use_controller: true 23 use_controller: true
24 24
25 -#swiftmailer:  
26 -# delivery_address: me@example.com 25 +swiftmailer:
  26 + delivery_address: www-data@localhost
  27 + sender_address: cacic@localhost
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
@@ -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