├── .gitattributes ├── .gitignore ├── .htaccess ├── CONTRIBUTING.md ├── README.md ├── app ├── .htaccess ├── commands │ ├── .gitkeep │ └── Ticket.php ├── config │ ├── app.php │ ├── auth.php │ ├── cache.php │ ├── compile.php │ ├── database.php │ ├── local │ │ ├── app.php │ │ └── database.php │ ├── mail.php │ ├── packages │ │ └── .gitkeep │ ├── queue.php │ ├── remote.php │ ├── services.php │ ├── session.php │ ├── testing │ │ ├── cache.php │ │ └── session.php │ ├── view.php │ └── workbench.php ├── controllers │ ├── .gitkeep │ ├── BaseController.php │ ├── DashboardController.php │ ├── HomeController.php │ └── TicketCreatedHandler.php ├── database │ ├── .gitignore │ ├── migrations │ │ ├── .gitkeep │ │ ├── 2014_07_03_190600_ProjectsModel.php │ │ ├── 2014_07_04_183354_ConvoModel.php │ │ ├── 2014_07_06_075603_TicketsModel.php │ │ └── 2015_01_28_173350_TicketsModel.php │ ├── production.sqlite │ └── seeds │ │ ├── .gitkeep │ │ └── DatabaseSeeder.php ├── filters.php ├── lang │ └── en │ │ ├── pagination.php │ │ ├── reminders.php │ │ └── validation.php ├── libraries │ └── HelperFunc.php ├── models │ ├── ConvoModel.php │ ├── LoginHistory.php │ ├── ProjectMember.php │ ├── ProjectsModel.php │ ├── TicketsModel.php │ └── User.php ├── routes.php ├── start │ ├── artisan.php │ ├── global.php │ └── local.php ├── storage │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── logs │ │ └── .gitignore │ ├── meta │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ └── views │ │ └── .gitignore ├── tests │ ├── ExampleTest.php │ └── TestCase.php └── views │ ├── access_denied.blade.php │ ├── add_project.blade.php │ ├── add_user.blade.php │ ├── admin_email.blade.php │ ├── charts.blade.php │ ├── create_ticket.blade.php │ ├── dashboard.blade.php │ ├── edit_project.blade.php │ ├── edit_ticket.blade.php │ ├── edit_user.blade.php │ ├── email_template │ ├── project_add_member.blade.php │ ├── task_complete.blade.php │ └── task_email.blade.php │ ├── emails │ └── auth │ │ └── reminder.blade.php │ ├── error404.blade.php │ ├── hello.php │ ├── layouts │ ├── master-child.blade.php │ └── master.blade.php │ ├── list_project_member.blade.php │ ├── list_projects.blade.php │ ├── list_tickets.blade.php │ ├── list_users.blade.php │ ├── login.blade.php │ ├── project_member.blade.php │ ├── show_ticket.blade.php │ ├── time_tracking.blade.php │ └── welcome.blade.php ├── artisan ├── bootstrap ├── Untitled-1.html ├── autoload.php ├── paths.php └── start.php ├── composer.json ├── css ├── bootstrap.css ├── bootstrap.min.css ├── css │ ├── font-awesome.css │ └── font-awesome.min.css ├── fonts │ ├── FontAwesome.otf │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ └── fontawesome-webfont.woff ├── fullcalendar.css ├── fullcalendar.print.css ├── login.css └── sb-admin.css ├── favicon.ico ├── images └── ajax-loader.gif ├── index.php ├── js ├── bootstrap.js ├── bootstrap.min.js ├── flot │ ├── chart-data-flot.js │ ├── excanvas.min.js │ ├── jquery.flot.js │ ├── jquery.flot.pie.js │ ├── jquery.flot.resize.js │ └── jquery.flot.tooltip.min.js ├── fullcalendar.js ├── fullcalendar.min.js ├── init.js ├── jquery.min.js ├── moment.min.js ├── morris │ ├── chart-data-morris.js │ └── morris-0.4.3.min.js ├── raphael.min.js └── tablesorter │ ├── tables.js │ └── tablesorter.js ├── packages └── .gitkeep ├── phpunit.xml ├── public ├── .htaccess ├── favicon.ico ├── index.php ├── packages │ └── .gitkeep └── robots.txt ├── readme.md ├── robots.txt └── server.php /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea 2 | /bootstrap/compiled.php 3 | /vendor 4 | composer.phar 5 | composer.lock 6 | .env.*.php 7 | .env.php 8 | .DS_Store 9 | Thumbs.db 10 | -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes... 9 | RewriteRule ^(.*)/$ /$1 [L,R=301] 10 | 11 | # Handle Front Controller... 12 | RewriteCond %{REQUEST_FILENAME} !-d 13 | RewriteCond %{REQUEST_FILENAME} !-f 14 | RewriteRule ^ index.php [L] 15 | 16 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guidelines 2 | 3 | Please submit all issues and pull requests to the [laravel/framework](http://github.com/laravel/framework) repository! 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ticket-management-system 2 | -------------------------------------------------------------------------------- /app/.htaccess: -------------------------------------------------------------------------------- 1 | Deny From All -------------------------------------------------------------------------------- /app/commands/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/app/commands/.gitkeep -------------------------------------------------------------------------------- /app/commands/Ticket.php: -------------------------------------------------------------------------------- 1 | true, 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Application URL 21 | |-------------------------------------------------------------------------- 22 | | 23 | | This URL is used by the console to properly generate URLs when using 24 | | the Artisan command line tool. You should set this to the root of 25 | | your application so that it is used when running Artisan tasks. 26 | | 27 | */ 28 | 29 | 'url' => 'http://localhost/ticket-management-system', 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Application Timezone 34 | |-------------------------------------------------------------------------- 35 | | 36 | | Here you may specify the default timezone for your application, which 37 | | will be used by the PHP date and date-time functions. We have gone 38 | | ahead and set this to a sensible default for you out of the box. 39 | | 40 | */ 41 | 42 | 'timezone' => 'Asia/Karachi', 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Application Locale Configuration 47 | |-------------------------------------------------------------------------- 48 | | 49 | | The application locale determines the default locale that will be used 50 | | by the translation service provider. You are free to set this value 51 | | to any of the locales which will be supported by the application. 52 | | 53 | */ 54 | 55 | 'locale' => 'en', 56 | 57 | /* 58 | |-------------------------------------------------------------------------- 59 | | Application Fallback Locale 60 | |-------------------------------------------------------------------------- 61 | | 62 | | The fallback locale determines the locale to use when the current one 63 | | is not available. You may change the value to correspond to any of 64 | | the language folders that are provided through your application. 65 | | 66 | */ 67 | 68 | 'fallback_locale' => 'en', 69 | 70 | /* 71 | |-------------------------------------------------------------------------- 72 | | Encryption Key 73 | |-------------------------------------------------------------------------- 74 | | 75 | | This key is used by the Illuminate encrypter service and should be set 76 | | to a random, 32 character string, otherwise these encrypted strings 77 | | will not be safe. Please do this before deploying an application! 78 | | 79 | */ 80 | 81 | 'key' => 'YourSecretKey!!!', 82 | 83 | 'cipher' => MCRYPT_RIJNDAEL_128, 84 | 85 | /* 86 | |-------------------------------------------------------------------------- 87 | | Autoloaded Service Providers 88 | |-------------------------------------------------------------------------- 89 | | 90 | | The service providers listed here will be automatically loaded on the 91 | | request to your application. Feel free to add your own services to 92 | | this array to grant expanded functionality to your applications. 93 | | 94 | */ 95 | 96 | 'providers' => array( 97 | 98 | 'Illuminate\Foundation\Providers\ArtisanServiceProvider', 99 | 'Illuminate\Auth\AuthServiceProvider', 100 | 'Illuminate\Cache\CacheServiceProvider', 101 | 'Illuminate\Session\CommandsServiceProvider', 102 | 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider', 103 | 'Illuminate\Routing\ControllerServiceProvider', 104 | 'Illuminate\Cookie\CookieServiceProvider', 105 | 'Illuminate\Database\DatabaseServiceProvider', 106 | 'Illuminate\Encryption\EncryptionServiceProvider', 107 | 'Illuminate\Filesystem\FilesystemServiceProvider', 108 | 'Illuminate\Hashing\HashServiceProvider', 109 | 'Illuminate\Html\HtmlServiceProvider', 110 | 'Illuminate\Log\LogServiceProvider', 111 | 'Illuminate\Mail\MailServiceProvider', 112 | 'Illuminate\Database\MigrationServiceProvider', 113 | 'Illuminate\Pagination\PaginationServiceProvider', 114 | 'Illuminate\Queue\QueueServiceProvider', 115 | 'Illuminate\Redis\RedisServiceProvider', 116 | 'Illuminate\Remote\RemoteServiceProvider', 117 | 'Illuminate\Auth\Reminders\ReminderServiceProvider', 118 | 'Illuminate\Database\SeedServiceProvider', 119 | 'Illuminate\Session\SessionServiceProvider', 120 | 'Illuminate\Translation\TranslationServiceProvider', 121 | 'Illuminate\Validation\ValidationServiceProvider', 122 | 'Illuminate\View\ViewServiceProvider', 123 | 'Illuminate\Workbench\WorkbenchServiceProvider', 124 | 125 | ), 126 | 127 | /* 128 | |-------------------------------------------------------------------------- 129 | | Service Provider Manifest 130 | |-------------------------------------------------------------------------- 131 | | 132 | | The service provider manifest is used by Laravel to lazy load service 133 | | providers which are not needed for each request, as well to keep a 134 | | list of all of the services. Here, you may set its storage spot. 135 | | 136 | */ 137 | 138 | 'manifest' => storage_path().'/meta', 139 | 140 | /* 141 | |-------------------------------------------------------------------------- 142 | | Class Aliases 143 | |-------------------------------------------------------------------------- 144 | | 145 | | This array of class aliases will be registered when this application 146 | | is started. However, feel free to register as many as you wish as 147 | | the aliases are "lazy" loaded so they don't hinder performance. 148 | | 149 | */ 150 | 151 | 'aliases' => array( 152 | 153 | 'App' => 'Illuminate\Support\Facades\App', 154 | 'Artisan' => 'Illuminate\Support\Facades\Artisan', 155 | 'Auth' => 'Illuminate\Support\Facades\Auth', 156 | 'Blade' => 'Illuminate\Support\Facades\Blade', 157 | 'Cache' => 'Illuminate\Support\Facades\Cache', 158 | 'ClassLoader' => 'Illuminate\Support\ClassLoader', 159 | 'Config' => 'Illuminate\Support\Facades\Config', 160 | 'Controller' => 'Illuminate\Routing\Controller', 161 | 'Cookie' => 'Illuminate\Support\Facades\Cookie', 162 | 'Crypt' => 'Illuminate\Support\Facades\Crypt', 163 | 'DB' => 'Illuminate\Support\Facades\DB', 164 | 'Eloquent' => 'Illuminate\Database\Eloquent\Model', 165 | 'Event' => 'Illuminate\Support\Facades\Event', 166 | 'File' => 'Illuminate\Support\Facades\File', 167 | 'Form' => 'Illuminate\Support\Facades\Form', 168 | 'Hash' => 'Illuminate\Support\Facades\Hash', 169 | 'HTML' => 'Illuminate\Support\Facades\HTML', 170 | 'Input' => 'Illuminate\Support\Facades\Input', 171 | 'Lang' => 'Illuminate\Support\Facades\Lang', 172 | 'Log' => 'Illuminate\Support\Facades\Log', 173 | 'Mail' => 'Illuminate\Support\Facades\Mail', 174 | 'Paginator' => 'Illuminate\Support\Facades\Paginator', 175 | 'Password' => 'Illuminate\Support\Facades\Password', 176 | 'Queue' => 'Illuminate\Support\Facades\Queue', 177 | 'Redirect' => 'Illuminate\Support\Facades\Redirect', 178 | 'Redis' => 'Illuminate\Support\Facades\Redis', 179 | 'Request' => 'Illuminate\Support\Facades\Request', 180 | 'Response' => 'Illuminate\Support\Facades\Response', 181 | 'Route' => 'Illuminate\Support\Facades\Route', 182 | 'Schema' => 'Illuminate\Support\Facades\Schema', 183 | 'Seeder' => 'Illuminate\Database\Seeder', 184 | 'Session' => 'Illuminate\Support\Facades\Session', 185 | 'SoftDeletingTrait' => 'Illuminate\Database\Eloquent\SoftDeletingTrait', 186 | 'SSH' => 'Illuminate\Support\Facades\SSH', 187 | 'Str' => 'Illuminate\Support\Str', 188 | 'URL' => 'Illuminate\Support\Facades\URL', 189 | 'Validator' => 'Illuminate\Support\Facades\Validator', 190 | 'View' => 'Illuminate\Support\Facades\View', 191 | 192 | ), 193 | 194 | ); 195 | -------------------------------------------------------------------------------- /app/config/auth.php: -------------------------------------------------------------------------------- 1 | 'eloquent', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Authentication Model 23 | |-------------------------------------------------------------------------- 24 | | 25 | | When using the "Eloquent" authentication driver, we need to know which 26 | | Eloquent model should be used to retrieve your users. Of course, it 27 | | is often just the "User" model but you may use whatever you like. 28 | | 29 | */ 30 | 31 | 'model' => 'User', 32 | 33 | /* 34 | |-------------------------------------------------------------------------- 35 | | Authentication Table 36 | |-------------------------------------------------------------------------- 37 | | 38 | | When using the "Database" authentication driver, we need to know which 39 | | table should be used to retrieve your users. We have chosen a basic 40 | | default value but you may easily change it to any table you like. 41 | | 42 | */ 43 | 44 | 'table' => 'users', 45 | 46 | /* 47 | |-------------------------------------------------------------------------- 48 | | Password Reminder Settings 49 | |-------------------------------------------------------------------------- 50 | | 51 | | Here you may set the settings for password reminders, including a view 52 | | that should be used as your password reminder e-mail. You will also 53 | | be able to set the name of the table that holds the reset tokens. 54 | | 55 | | The "expire" time is the number of minutes that the reminder should be 56 | | considered valid. This security feature keeps tokens short-lived so 57 | | they have less time to be guessed. You may change this as needed. 58 | | 59 | */ 60 | 61 | 'reminder' => array( 62 | 63 | 'email' => 'emails.auth.reminder', 64 | 65 | 'table' => 'password_reminders', 66 | 67 | 'expire' => 60, 68 | 69 | ), 70 | 71 | ); 72 | -------------------------------------------------------------------------------- /app/config/cache.php: -------------------------------------------------------------------------------- 1 | 'file', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | File Cache Location 23 | |-------------------------------------------------------------------------- 24 | | 25 | | When using the "file" cache driver, we need a location where the cache 26 | | files may be stored. A sensible default has been specified, but you 27 | | are free to change it to any other place on disk that you desire. 28 | | 29 | */ 30 | 31 | 'path' => storage_path().'/cache', 32 | 33 | /* 34 | |-------------------------------------------------------------------------- 35 | | Database Cache Connection 36 | |-------------------------------------------------------------------------- 37 | | 38 | | When using the "database" cache driver you may specify the connection 39 | | that should be used to store the cached items. When this option is 40 | | null the default database connection will be utilized for cache. 41 | | 42 | */ 43 | 44 | 'connection' => null, 45 | 46 | /* 47 | |-------------------------------------------------------------------------- 48 | | Database Cache Table 49 | |-------------------------------------------------------------------------- 50 | | 51 | | When using the "database" cache driver we need to know the table that 52 | | should be used to store the cached items. A default table name has 53 | | been provided but you're free to change it however you deem fit. 54 | | 55 | */ 56 | 57 | 'table' => 'cache', 58 | 59 | /* 60 | |-------------------------------------------------------------------------- 61 | | Memcached Servers 62 | |-------------------------------------------------------------------------- 63 | | 64 | | Now you may specify an array of your Memcached servers that should be 65 | | used when utilizing the Memcached cache driver. All of the servers 66 | | should contain a value for "host", "port", and "weight" options. 67 | | 68 | */ 69 | 70 | 'memcached' => array( 71 | 72 | array('host' => '127.0.0.1', 'port' => 11211, 'weight' => 100), 73 | 74 | ), 75 | 76 | /* 77 | |-------------------------------------------------------------------------- 78 | | Cache Key Prefix 79 | |-------------------------------------------------------------------------- 80 | | 81 | | When utilizing a RAM based store such as APC or Memcached, there might 82 | | be other applications utilizing the same cache. So, we'll specify a 83 | | value to get prefixed to all our keys so we can avoid collisions. 84 | | 85 | */ 86 | 87 | 'prefix' => 'laravel', 88 | 89 | ); 90 | -------------------------------------------------------------------------------- /app/config/compile.php: -------------------------------------------------------------------------------- 1 | PDO::FETCH_CLASS, 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Default Database Connection Name 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may specify which of the database connections below you wish 24 | | to use as your default connection for all database work. Of course 25 | | you may use many connections at once using the Database library. 26 | | 27 | */ 28 | 29 | 'default' => 'mysql', 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Database Connections 34 | |-------------------------------------------------------------------------- 35 | | 36 | | Here are each of the database connections setup for your application. 37 | | Of course, examples of configuring each database platform that is 38 | | supported by Laravel is shown below to make development simple. 39 | | 40 | | 41 | | All database work in Laravel is done through the PHP PDO facilities 42 | | so make sure you have the driver for your particular database of 43 | | choice installed on your machine before you begin development. 44 | | 45 | */ 46 | 47 | 'connections' => array( 48 | 49 | 'sqlite' => array( 50 | 'driver' => 'sqlite', 51 | 'database' => __DIR__.'/../database/production.sqlite', 52 | 'prefix' => '', 53 | ), 54 | 55 | 'mysql' => array( 56 | 'driver' => 'mysql', 57 | 'host' => 'localhost', 58 | 'database' => 'tms', 59 | 'username' => 'root', 60 | 'password' => '', 61 | 'charset' => 'utf8', 62 | 'collation' => 'utf8_general_ci', 63 | 'prefix' => '', 64 | ), 65 | 66 | 'pgsql' => array( 67 | 'driver' => 'pgsql', 68 | 'host' => 'localhost', 69 | 'database' => 'forge', 70 | 'username' => 'forge', 71 | 'password' => '', 72 | 'charset' => 'utf8', 73 | 'prefix' => '', 74 | 'schema' => 'public', 75 | ), 76 | 77 | 'sqlsrv' => array( 78 | 'driver' => 'sqlsrv', 79 | 'host' => 'localhost', 80 | 'database' => 'database', 81 | 'username' => 'root', 82 | 'password' => '', 83 | 'prefix' => '', 84 | ), 85 | 86 | ), 87 | 88 | /* 89 | |-------------------------------------------------------------------------- 90 | | Migration Repository Table 91 | |-------------------------------------------------------------------------- 92 | | 93 | | This table keeps track of all the migrations that have already run for 94 | | your application. Using this information, we can determine which of 95 | | the migrations on disk haven't actually been run in the database. 96 | | 97 | */ 98 | 99 | 'migrations' => 'migrations', 100 | 101 | /* 102 | |-------------------------------------------------------------------------- 103 | | Redis Databases 104 | |-------------------------------------------------------------------------- 105 | | 106 | | Redis is an open source, fast, and advanced key-value store that also 107 | | provides a richer set of commands than a typical key-value systems 108 | | such as APC or Memcached. Laravel makes it easy to dig right in. 109 | | 110 | */ 111 | 112 | 'redis' => array( 113 | 114 | 'cluster' => false, 115 | 116 | 'default' => array( 117 | 'host' => '127.0.0.1', 118 | 'port' => 6379, 119 | 'database' => 0, 120 | ), 121 | 122 | ), 123 | 124 | ); 125 | -------------------------------------------------------------------------------- /app/config/local/app.php: -------------------------------------------------------------------------------- 1 | true, 17 | 18 | ); 19 | -------------------------------------------------------------------------------- /app/config/local/database.php: -------------------------------------------------------------------------------- 1 | array( 22 | 23 | 'mysql' => array( 24 | 'driver' => 'mysql', 25 | 'host' => 'localhost', 26 | 'database' => 'tms', 27 | 'username' => 'root', 28 | 'password' => '', 29 | 'charset' => 'utf8', 30 | 'collation' => 'utf8_unicode_ci', 31 | 'prefix' => '', 32 | ), 33 | 34 | 'pgsql' => array( 35 | 'driver' => 'pgsql', 36 | 'host' => 'localhost', 37 | 'database' => 'homestead', 38 | 'username' => 'homestead', 39 | 'password' => 'secret', 40 | 'charset' => 'utf8', 41 | 'prefix' => '', 42 | 'schema' => 'public', 43 | ), 44 | 45 | ), 46 | 47 | ); 48 | -------------------------------------------------------------------------------- /app/config/mail.php: -------------------------------------------------------------------------------- 1 | 'smtp', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | SMTP Host Address 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may provide the host address of the SMTP server used by your 26 | | applications. A default option is provided that is compatible with 27 | | the Mailgun mail service which will provide reliable deliveries. 28 | | 29 | */ 30 | 31 | 'host' => 'smtp.gmail.com', 32 | 33 | /* 34 | |-------------------------------------------------------------------------- 35 | | SMTP Host Port 36 | |-------------------------------------------------------------------------- 37 | | 38 | | This is the SMTP port used by your application to deliver e-mails to 39 | | users of the application. Like the host we have set this value to 40 | | stay compatible with the Mailgun e-mail application by default. 41 | | 42 | */ 43 | 44 | 'port' => 587, 45 | 46 | /* 47 | |-------------------------------------------------------------------------- 48 | | Global "From" Address 49 | |-------------------------------------------------------------------------- 50 | | 51 | | You may wish for all e-mails sent by your application to be sent from 52 | | the same address. Here, you may specify a name and address that is 53 | | used globally for all e-mails that are sent by your application. 54 | | 55 | */ 56 | 57 | 'from' => array('address' => 'NoReplay@webxity.com', 'name' => 'Webxity'), 58 | 59 | /* 60 | |-------------------------------------------------------------------------- 61 | | E-Mail Encryption Protocol 62 | |-------------------------------------------------------------------------- 63 | | 64 | | Here you may specify the encryption protocol that should be used when 65 | | the application send e-mail messages. A sensible default using the 66 | | transport layer security protocol should provide great security. 67 | | 68 | */ 69 | 70 | 'encryption' => 'tls', 71 | 72 | /* 73 | |-------------------------------------------------------------------------- 74 | | SMTP Server Username 75 | |-------------------------------------------------------------------------- 76 | | 77 | | If your SMTP server requires a username for authentication, you should 78 | | set it here. This will get used to authenticate with your server on 79 | | connection. You may also set the "password" value below this one. 80 | | 81 | */ 82 | 83 | 'username' => 'aloneprince595@gmail.com', 84 | 85 | /* 86 | |-------------------------------------------------------------------------- 87 | | SMTP Server Password 88 | |-------------------------------------------------------------------------- 89 | | 90 | | Here you may set the password required by your SMTP server to send out 91 | | messages from your application. This will be given to the server on 92 | | connection so that the application will be able to send messages. 93 | | 94 | */ 95 | 96 | 'password' => 'RAza0324', 97 | 98 | /* 99 | |-------------------------------------------------------------------------- 100 | | Sendmail System Path 101 | |-------------------------------------------------------------------------- 102 | | 103 | | When using the "sendmail" driver to send e-mails, we will need to know 104 | | the path to where Sendmail lives on this server. A default path has 105 | | been provided here, which will work well on most of your systems. 106 | | 107 | */ 108 | 109 | 'sendmail' => '/usr/sbin/sendmail -bs', 110 | 111 | /* 112 | |-------------------------------------------------------------------------- 113 | | Mail "Pretend" 114 | |-------------------------------------------------------------------------- 115 | | 116 | | When this option is enabled, e-mail will not actually be sent over the 117 | | web and will instead be written to your application's logs files so 118 | | you may inspect the message. This is great for local development. 119 | | 120 | */ 121 | 122 | 'pretend' => false, 123 | 124 | ); 125 | -------------------------------------------------------------------------------- /app/config/packages/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/app/config/packages/.gitkeep -------------------------------------------------------------------------------- /app/config/queue.php: -------------------------------------------------------------------------------- 1 | 'sync', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Queue Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may configure the connection information for each server that 26 | | is used by your application. A default configuration has been added 27 | | for each back-end shipped with Laravel. You are free to add more. 28 | | 29 | */ 30 | 31 | 'connections' => array( 32 | 33 | 'sync' => array( 34 | 'driver' => 'sync', 35 | ), 36 | 37 | 'beanstalkd' => array( 38 | 'driver' => 'beanstalkd', 39 | 'host' => 'localhost', 40 | 'queue' => 'default', 41 | 'ttr' => 60, 42 | ), 43 | 44 | 'sqs' => array( 45 | 'driver' => 'sqs', 46 | 'key' => 'your-public-key', 47 | 'secret' => 'your-secret-key', 48 | 'queue' => 'your-queue-url', 49 | 'region' => 'us-east-1', 50 | ), 51 | 52 | 'iron' => array( 53 | 'driver' => 'iron', 54 | 'host' => 'mq-aws-us-east-1.iron.io', 55 | 'token' => 'your-token', 56 | 'project' => 'your-project-id', 57 | 'queue' => 'your-queue-name', 58 | 'encrypt' => true, 59 | ), 60 | 61 | 'redis' => array( 62 | 'driver' => 'redis', 63 | 'queue' => 'default', 64 | ), 65 | 66 | ), 67 | 68 | /* 69 | |-------------------------------------------------------------------------- 70 | | Failed Queue Jobs 71 | |-------------------------------------------------------------------------- 72 | | 73 | | These options configure the behavior of failed queue job logging so you 74 | | can control which database and table are used to store the jobs that 75 | | have failed. You may change them to any database / table you wish. 76 | | 77 | */ 78 | 79 | 'failed' => array( 80 | 81 | 'database' => 'mysql', 'table' => 'failed_jobs', 82 | 83 | ), 84 | 85 | ); 86 | -------------------------------------------------------------------------------- /app/config/remote.php: -------------------------------------------------------------------------------- 1 | 'production', 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Remote Server Connections 21 | |-------------------------------------------------------------------------- 22 | | 23 | | These are the servers that will be accessible via the SSH task runner 24 | | facilities of Laravel. This feature radically simplifies executing 25 | | tasks on your servers, such as deploying out these applications. 26 | | 27 | */ 28 | 29 | 'connections' => array( 30 | 31 | 'production' => array( 32 | 'host' => '', 33 | 'username' => '', 34 | 'password' => '', 35 | 'key' => '', 36 | 'keyphrase' => '', 37 | 'root' => '/var/www', 38 | ), 39 | 40 | ), 41 | 42 | /* 43 | |-------------------------------------------------------------------------- 44 | | Remote Server Groups 45 | |-------------------------------------------------------------------------- 46 | | 47 | | Here you may list connections under a single group name, which allows 48 | | you to easily access all of the servers at once using a short name 49 | | that is extremely easy to remember, such as "web" or "database". 50 | | 51 | */ 52 | 53 | 'groups' => array( 54 | 55 | 'web' => array('production') 56 | 57 | ), 58 | 59 | ); 60 | -------------------------------------------------------------------------------- /app/config/services.php: -------------------------------------------------------------------------------- 1 | array( 18 | 'domain' => '', 19 | 'secret' => '', 20 | ), 21 | 22 | 'mandrill' => array( 23 | 'secret' => '', 24 | ), 25 | 26 | 'stripe' => array( 27 | 'model' => 'User', 28 | 'secret' => '', 29 | ), 30 | 31 | ); 32 | -------------------------------------------------------------------------------- /app/config/session.php: -------------------------------------------------------------------------------- 1 | 'file', 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Session Lifetime 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Here you may specify the number of minutes that you wish the session 27 | | to be allowed to remain idle before it expires. If you want them 28 | | to immediately expire on the browser closing, set that option. 29 | | 30 | */ 31 | 32 | 'lifetime' => 12000000000, 33 | 34 | 'expire_on_close' => false, 35 | 36 | /* 37 | |-------------------------------------------------------------------------- 38 | | Session File Location 39 | |-------------------------------------------------------------------------- 40 | | 41 | | When using the native session driver, we need a location where session 42 | | files may be stored. A default has been set for you but a different 43 | | location may be specified. This is only needed for file sessions. 44 | | 45 | */ 46 | 47 | 'files' => storage_path().'/sessions', 48 | 49 | /* 50 | |-------------------------------------------------------------------------- 51 | | Session Database Connection 52 | |-------------------------------------------------------------------------- 53 | | 54 | | When using the "database" or "redis" session drivers, you may specify a 55 | | connection that should be used to manage these sessions. This should 56 | | correspond to a connection in your database configuration options. 57 | | 58 | */ 59 | 60 | 'connection' => null, 61 | 62 | /* 63 | |-------------------------------------------------------------------------- 64 | | Session Database Table 65 | |-------------------------------------------------------------------------- 66 | | 67 | | When using the "database" session driver, you may specify the table we 68 | | should use to manage the sessions. Of course, a sensible default is 69 | | provided for you; however, you are free to change this as needed. 70 | | 71 | */ 72 | 73 | 'table' => 'sessions', 74 | 75 | /* 76 | |-------------------------------------------------------------------------- 77 | | Session Sweeping Lottery 78 | |-------------------------------------------------------------------------- 79 | | 80 | | Some session drivers must manually sweep their storage location to get 81 | | rid of old sessions from storage. Here are the chances that it will 82 | | happen on a given request. By default, the odds are 2 out of 100. 83 | | 84 | */ 85 | 86 | 'lottery' => array(2, 100), 87 | 88 | /* 89 | |-------------------------------------------------------------------------- 90 | | Session Cookie Name 91 | |-------------------------------------------------------------------------- 92 | | 93 | | Here you may change the name of the cookie used to identify a session 94 | | instance by ID. The name specified here will get used every time a 95 | | new session cookie is created by the framework for every driver. 96 | | 97 | */ 98 | 99 | 'cookie' => 'laravel_session', 100 | 101 | /* 102 | |-------------------------------------------------------------------------- 103 | | Session Cookie Path 104 | |-------------------------------------------------------------------------- 105 | | 106 | | The session cookie path determines the path for which the cookie will 107 | | be regarded as available. Typically, this will be the root path of 108 | | your application but you are free to change this when necessary. 109 | | 110 | */ 111 | 112 | 'path' => '/', 113 | 114 | /* 115 | |-------------------------------------------------------------------------- 116 | | Session Cookie Domain 117 | |-------------------------------------------------------------------------- 118 | | 119 | | Here you may change the domain of the cookie used to identify a session 120 | | in your application. This will determine which domains the cookie is 121 | | available to in your application. A sensible default has been set. 122 | | 123 | */ 124 | 125 | 'domain' => null, 126 | 127 | /* 128 | |-------------------------------------------------------------------------- 129 | | HTTPS Only Cookies 130 | |-------------------------------------------------------------------------- 131 | | 132 | | By setting this option to true, session cookies will only be sent back 133 | | to the server if the browser has a HTTPS connection. This will keep 134 | | the cookie from being sent to you if it can not be done securely. 135 | | 136 | */ 137 | 138 | 'secure' => false, 139 | 140 | ); 141 | -------------------------------------------------------------------------------- /app/config/testing/cache.php: -------------------------------------------------------------------------------- 1 | 'array', 19 | 20 | ); 21 | -------------------------------------------------------------------------------- /app/config/testing/session.php: -------------------------------------------------------------------------------- 1 | 'array', 20 | 21 | ); 22 | -------------------------------------------------------------------------------- /app/config/view.php: -------------------------------------------------------------------------------- 1 | array(__DIR__.'/../views'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Pagination View 21 | |-------------------------------------------------------------------------- 22 | | 23 | | This view will be used to render the pagination link output, and can 24 | | be easily customized here to show any view you like. A clean view 25 | | compatible with Twitter's Bootstrap is given to you by default. 26 | | 27 | */ 28 | 29 | 'pagination' => 'pagination::slider-3', 30 | 31 | ); 32 | -------------------------------------------------------------------------------- /app/config/workbench.php: -------------------------------------------------------------------------------- 1 | '', 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Workbench Author E-Mail Address 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Like the option above, your e-mail address is used when generating new 24 | | workbench packages. The e-mail is placed in your composer.json file 25 | | automatically after the package is created by the workbench tool. 26 | | 27 | */ 28 | 29 | 'email' => '', 30 | 31 | ); 32 | -------------------------------------------------------------------------------- /app/controllers/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/app/controllers/.gitkeep -------------------------------------------------------------------------------- /app/controllers/BaseController.php: -------------------------------------------------------------------------------- 1 | layout)) 13 | { 14 | $this->layout = View::make($this->layout); 15 | } 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /app/controllers/HomeController.php: -------------------------------------------------------------------------------- 1 | role !== 'client' ) 10 | { 11 | 12 | 13 | } 14 | */ 15 | } 16 | 17 | } 18 | 19 | -------------------------------------------------------------------------------- /app/database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | -------------------------------------------------------------------------------- /app/database/migrations/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/app/database/migrations/.gitkeep -------------------------------------------------------------------------------- /app/database/migrations/2014_07_03_190600_ProjectsModel.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->string('project'); 19 | $table->longText('description'); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | // 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /app/database/migrations/2014_07_04_183354_ConvoModel.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | $table->longText('message'); 19 | $table->string('user_name'); 20 | $table->integer('user_id'); 21 | $table->integer('ticket_id'); 22 | $table->timestamps(); 23 | }); 24 | } 25 | 26 | /** 27 | * Reverse the migrations. 28 | * 29 | * @return void 30 | */ 31 | public function down() 32 | { 33 | //Schema::drop('conversations'); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /app/database/migrations/2014_07_06_075603_TicketsModel.php: -------------------------------------------------------------------------------- 1 | increments('id')->unsigned(); 18 | $table->string('title'); 19 | $table->longText('description'); 20 | $table->string('project'); 21 | $table->enum('priority' , array('None','Normal', 'Low' ,'High' , 'Urgent')); 22 | $table->string('url'); 23 | $table->enum('status', array('open', 'close', 'pending')); 24 | $table->timestamps(); 25 | }); 26 | } 27 | 28 | /** 29 | * Reverse the migrations. 30 | * 31 | * @return void 32 | */ 33 | public function down() 34 | { 35 | Schema::drop('tickets'); 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /app/database/migrations/2015_01_28_173350_TicketsModel.php: -------------------------------------------------------------------------------- 1 | increments('id')->unsigned(); 18 | $table->string('title'); 19 | $table->longText('description'); 20 | $table->string('project'); 21 | $table->enum('priority' , array('None','Normal', 'Low' ,'High' , 'Urgent')); 22 | $table->string('url'); 23 | $table->string('developer'); 24 | $table->integer('owner_id'); 25 | $table->date('due_date'); 26 | $table->enum('status', array('open', 'close', 'pending')); 27 | $table->timestamps(); 28 | 29 | 30 | }); 31 | } 32 | 33 | /** 34 | * Reverse the migrations. 35 | * 36 | * @return void 37 | */ 38 | public function down() 39 | { 40 | Schema::table('tickets', function(Blueprint $table) 41 | { 42 | // 43 | Schema::drop('tickets'); 44 | }); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /app/database/production.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/app/database/production.sqlite -------------------------------------------------------------------------------- /app/database/seeds/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/app/database/seeds/.gitkeep -------------------------------------------------------------------------------- /app/database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call('UserTableSeeder'); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/filters.php: -------------------------------------------------------------------------------- 1 | role); 105 | if ( !Request::Ajax() && Auth::user()->role !== 'admin' && Auth::user()->role !== 'client') { 106 | return View::make('access_denied') ; 107 | 108 | } 109 | 110 | }); -------------------------------------------------------------------------------- /app/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 18 | 'next' => 'Next »', 19 | 20 | ); 21 | -------------------------------------------------------------------------------- /app/lang/en/reminders.php: -------------------------------------------------------------------------------- 1 | "Passwords must be at least six characters and match the confirmation.", 17 | 18 | "user" => "We can't find a user with that e-mail address.", 19 | 20 | "token" => "This password reset token is invalid.", 21 | 22 | "sent" => "Password reminder sent!", 23 | 24 | ); 25 | -------------------------------------------------------------------------------- /app/lang/en/validation.php: -------------------------------------------------------------------------------- 1 | "The :attribute must be accepted.", 17 | "active_url" => "The :attribute is not a valid URL.", 18 | "after" => "The :attribute must be a date after :date.", 19 | "alpha" => "The :attribute may only contain letters.", 20 | "alpha_dash" => "The :attribute may only contain letters, numbers, and dashes.", 21 | "alpha_num" => "The :attribute may only contain letters and numbers.", 22 | "array" => "The :attribute must be an array.", 23 | "before" => "The :attribute must be a date before :date.", 24 | "between" => array( 25 | "numeric" => "The :attribute must be between :min and :max.", 26 | "file" => "The :attribute must be between :min and :max kilobytes.", 27 | "string" => "The :attribute must be between :min and :max characters.", 28 | "array" => "The :attribute must have between :min and :max items.", 29 | ), 30 | "confirmed" => "The :attribute confirmation does not match.", 31 | "date" => "The :attribute is not a valid date.", 32 | "date_format" => "The :attribute does not match the format :format.", 33 | "different" => "The :attribute and :other must be different.", 34 | "digits" => "The :attribute must be :digits digits.", 35 | "digits_between" => "The :attribute must be between :min and :max digits.", 36 | "email" => "The :attribute must be a valid email address.", 37 | "exists" => "The selected :attribute is invalid.", 38 | "image" => "The :attribute must be an image.", 39 | "in" => "The selected :attribute is invalid.", 40 | "integer" => "The :attribute must be an integer.", 41 | "ip" => "The :attribute must be a valid IP address.", 42 | "max" => array( 43 | "numeric" => "The :attribute may not be greater than :max.", 44 | "file" => "The :attribute may not be greater than :max kilobytes.", 45 | "string" => "The :attribute may not be greater than :max characters.", 46 | "array" => "The :attribute may not have more than :max items.", 47 | ), 48 | "mimes" => "The :attribute must be a file of type: :values.", 49 | "min" => array( 50 | "numeric" => "The :attribute must be at least :min.", 51 | "file" => "The :attribute must be at least :min kilobytes.", 52 | "string" => "The :attribute must be at least :min characters.", 53 | "array" => "The :attribute must have at least :min items.", 54 | ), 55 | "not_in" => "The selected :attribute is invalid.", 56 | "numeric" => "The :attribute must be a number.", 57 | "regex" => "The :attribute format is invalid.", 58 | "required" => "The :attribute field is required.", 59 | "required_if" => "The :attribute field is required when :other is :value.", 60 | "required_with" => "The :attribute field is required when :values is present.", 61 | "required_with_all" => "The :attribute field is required when :values is present.", 62 | "required_without" => "The :attribute field is required when :values is not present.", 63 | "required_without_all" => "The :attribute field is required when none of :values are present.", 64 | "same" => "The :attribute and :other must match.", 65 | "size" => array( 66 | "numeric" => "The :attribute must be :size.", 67 | "file" => "The :attribute must be :size kilobytes.", 68 | "string" => "The :attribute must be :size characters.", 69 | "array" => "The :attribute must contain :size items.", 70 | ), 71 | "unique" => "The :attribute has already been taken.", 72 | "url" => "The :attribute format is invalid.", 73 | 74 | /* 75 | |-------------------------------------------------------------------------- 76 | | Custom Validation Language Lines 77 | |-------------------------------------------------------------------------- 78 | | 79 | | Here you may specify custom validation messages for attributes using the 80 | | convention "attribute.rule" to name the lines. This makes it quick to 81 | | specify a specific custom language line for a given attribute rule. 82 | | 83 | */ 84 | 85 | 'custom' => array( 86 | 'attribute-name' => array( 87 | 'rule-name' => 'custom-message', 88 | ), 89 | ), 90 | 91 | /* 92 | |-------------------------------------------------------------------------- 93 | | Custom Validation Attributes 94 | |-------------------------------------------------------------------------- 95 | | 96 | | The following language lines are used to swap attribute place-holders 97 | | with something more reader friendly such as E-Mail Address instead 98 | | of "email". This simply helps us make messages a little cleaner. 99 | | 100 | */ 101 | 102 | 'attributes' => array(), 103 | 104 | ); 105 | -------------------------------------------------------------------------------- /app/libraries/HelperFunc.php: -------------------------------------------------------------------------------- 1 | where('id', $id)->first(); 31 | if(count($row) > 0) 32 | { 33 | return $row; 34 | } 35 | else 36 | { 37 | return false; 38 | } 39 | } 40 | 41 | } -------------------------------------------------------------------------------- /app/models/TicketsModel.php: -------------------------------------------------------------------------------- 1 | where('owner_id', $user_id)->get(); 30 | if(count($GetRowsByUserId) > 0) 31 | { 32 | return $GetRowsByUserId; 33 | } 34 | else 35 | { 36 | return false; 37 | } 38 | } 39 | 40 | } -------------------------------------------------------------------------------- /app/models/User.php: -------------------------------------------------------------------------------- 1 | name; 33 | } 34 | 35 | public function getId() 36 | { 37 | return $this->id; 38 | } 39 | 40 | public static function GetUserNameById($user_id) 41 | { 42 | $row = DB::table('users')->where('id', $user_id)->first(); 43 | if(count($row) > 0) 44 | { 45 | return $row; 46 | } 47 | else 48 | { 49 | return false; 50 | } 51 | } 52 | 53 | public static function GetUserName($user_email) 54 | { 55 | $row = DB::table('users')->where('email', $user_email)->first(); 56 | if(count($row) > 0) 57 | { 58 | return $row; 59 | } 60 | else 61 | { 62 | return false; 63 | } 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /app/routes.php: -------------------------------------------------------------------------------- 1 | $value],[ 'url' => 'url' ]); 98 | if ($validator->fails()) { 99 | // The given data did not pass validation 100 | return false; 101 | 102 | } else { 103 | 104 | return true; 105 | } 106 | } 107 | else{ 108 | 109 | $value="http://". $value; 110 | $validator = Validator::make( ['url' => $value],[ 'url' => 'url' ]); 111 | if ($validator->fails()) { 112 | // The given data did not pass validation 113 | return false; 114 | 115 | } else { 116 | 117 | return true; 118 | } 119 | 120 | 121 | } 122 | 123 | }); 124 | 125 | 126 | -------------------------------------------------------------------------------- /app/start/local.php: -------------------------------------------------------------------------------- 1 | client->request('GET', '/'); 13 | 14 | $this->assertTrue($this->client->getResponse()->isOk()); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/tests/TestCase.php: -------------------------------------------------------------------------------- 1 | 5 | 6 |

You do not have the permission to access this area.

7 | 8 | @stop -------------------------------------------------------------------------------- /app/views/add_project.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

Project Management Add Project

8 | 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | @if( Session::pull('submit')) 21 | @if(empty(Session::has('message'))) 22 | @if( $errors->count() > 0 ) 23 |
24 | 25 |

The following errors have occurred:

26 | {{ $errors->first('project', '

:message

') }} 27 |
28 | @else 29 |
30 | 31 | {{ "Project Created Successfully" }} 32 |
33 | @endif 34 | @else 35 |
36 | 37 |

The following errors have occurred:

38 | 41 | 42 |
43 | @endif 44 | @endif 45 | 46 | 47 | 62 | 63 | @stop 64 | 65 | -------------------------------------------------------------------------------- /app/views/add_user.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

User Management Add User

8 | 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | @if( Session::pull('submit')) 21 | @if( $errors->count() > 0 ) 22 |
23 | 24 |

The following errors have occurred:

25 | 32 | 33 |
34 | @else 35 |
36 | 37 | {{ "User Created Successfully" }} 38 |
39 | 40 | @endif 41 | @endif 42 | 43 | 44 | 84 | 85 | @stop 86 | 87 | -------------------------------------------------------------------------------- /app/views/admin_email.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Register - Webxity Ticket Management 9 | 10 | 11 | 12 |
13 | 14 | 17 | 18 |
19 |

{{ $data['creator'] }} registered {{ $data['name'] }} on webxity ticket management system.

20 |
21 | 22 | 23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /app/views/charts.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 |
5 |
6 |

Charts 7 | Display Your Data 8 |

9 | 13 |
14 | 15 | There are two options for charts: Flot 16 | charts and morris.js. 17 | Choose which one best suits your needs, and make sure to master the documentation to get the most out of 18 | these charts! 19 |
20 |
21 |
22 | 23 |
24 |
25 |

Flot Charts

26 | 27 |
28 |
29 |

Line Graph Example with Tooltips

30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | 40 |
41 |
42 |
43 |
44 |

Pie Chart Example with Tooltips

45 |
46 |
47 |
48 |
49 |
50 |
51 | View Details 52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |

Multiple Axes Line Graph Example with 60 | Tooltips and Raw Data

61 |
62 |
63 |
64 |
65 |
66 |
67 | View Details 68 |
69 |
70 |
71 |
72 |
73 | 74 |
75 |
76 |
77 |
78 |

Moving Line Chart

79 |
80 |
81 |
82 |
83 |
84 |
85 | View Details 86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |

Bar Graph with Tooltips

94 |
95 |
96 |
97 |
98 |
99 |
100 | View Details 101 |
102 |
103 |
104 |
105 |
106 | 107 |
108 |
109 |

Additional Flot Chart Information

110 | 111 |

Full documentation for Flot can be found at http://www.flotcharts.org/. 112 | Flot has a lot of different options available, and they have a bunch of plugins as well that allow you to do 113 | neat things. Here we are using the tooltip plugin, the resize plugin, and the pie chart plugin, but there 114 | are many more to choose from. The documentation is a bit more advanced and requires a good deal of 115 | JavaScript knowledge in order to make the charts work for you.

116 | 117 |

NOTE: The charts are responsive, and the Flot charts are redrawn when the window resizes. 118 | The only one that needs a page refresh on a window resize is the pie chart. If you find a way to fix this, 119 | please let me know.

120 |
121 |
122 | 123 |
124 |
125 |

morris.js Charts

126 | 127 |
128 |
129 |

Area Line Graph Example with Tooltips

130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 | 138 |
139 |
140 |
141 |
142 |

Donut Chart Example

143 |
144 |
145 |
146 |
147 | View Details 148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |

Line Graph Example with Tooltips

156 |
157 |
158 |
159 |
160 | View Details 161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |

Bar Graph Example

169 |
170 |
171 |
172 |
173 | View Details 174 |
175 |
176 |
177 |
178 |
179 | 180 |
181 |
182 |

Additional morris.js Information

183 | 184 |

Full documentation for morris.js charts can be found at http://www.oesmith.co.uk/morris.js/. 186 | The chart options for morris.js are line 187 | & area charts, bar charts, and donut charts. The 189 | documentation is pretty straight forward, and you will want to look at it in order to get the most out of 190 | the charts.

191 | 192 |

NOTE: The charts are responsive, but they are drawn when the window loads. If you change the 193 | window size, for instance resizing your brownser window, you will need to refresh the page to redraw the 194 | chart responsively. According to morris.js, automatically redrawing charts on window resizing is being 195 | worked into their next big update. 196 |

197 |
198 | @stop -------------------------------------------------------------------------------- /app/views/create_ticket.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

Ticket Management Create Ticket

8 | 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | @if( Session::pull('submit')) 21 | @if(empty(Session::has('Message'))) 22 |
23 | 24 | {{ Session::get('msg') }} 25 |
26 | @else 27 |
28 | 29 | {{ Session::get('Message') }} 30 |
31 | @endif 32 | @endif 33 | 34 | 35 | 104 | 105 | 106 | 107 | 108 | 111 | 112 | 113 | @stop 114 | 115 | -------------------------------------------------------------------------------- /app/views/dashboard.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 |
5 |
6 |

Dashboard 7 | 8 |

9 | 12 |
13 | 14 | Welcome to Ticket Managment system created by Webxity technologies! 15 |
16 |
17 |
18 | 19 |
20 |
21 |
22 |
23 |

Calendar

24 |
25 |
26 |
27 |
28 |
29 |
30 | 31 |
32 |
33 |
34 |

Recent Tickets

35 |
36 |
37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | @if( count($data['tickets']) > 0 ) 51 | @foreach($data['tickets'] as $tickets) 52 | 53 | 54 | 55 | 56 | 57 | 58 | 65 | 66 | @endforeach 67 | @endif 68 | 69 |
Ticket # Title Status Priority Created At Updated At
{{$tickets->id}}{{{$tickets->title}}}{{{$tickets->status}}}{{{$tickets->priority}}}{{ Webxity\HelperFunc::get_date($tickets->created_at ) }} 59 | @if ( $tickets->created_at != $tickets->updated_at ) 60 | {{ Webxity\HelperFunc::get_date($tickets->updated_at ) }} 61 | @else 62 | Not Updated 63 | @endif 64 |
70 |
71 | 74 |
75 |
76 |
77 | 78 | 79 |
80 |
81 |
82 |

Recent Projects

83 |
84 |
85 |
86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | @if( count($data['projects']) > 0 ) 96 | @foreach($data['projects'] as $projects) 97 | 98 | 99 | 100 | 101 | 102 | @endforeach 103 | @endif 104 | 105 |
Project # Name Started At
{{$projects->id}}{{{$projects->project}}} {{ Webxity\HelperFunc::get_date($projects->created_at ) }}
106 |
107 |
108 | View All Projects 109 |
110 |
111 |
112 |
113 | 114 | 115 |
116 | @stop -------------------------------------------------------------------------------- /app/views/edit_project.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

Project Management Edit Project

8 | 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | @if(isset($msg)) 21 | 22 | 23 | @if($msg == "Record Successfully Updated") 24 |
25 | 26 | {{ $msg }} 27 |
28 | @else 29 |
30 | 31 | {{ $msg }} 32 |
33 | @endif 34 | 35 | @endif 36 | 37 | 38 | 39 | 40 | @if($project) 41 | 42 | 63 | @stop -------------------------------------------------------------------------------- /app/views/edit_ticket.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 | project] = $project->project; 10 | endforeach; 11 | 12 | ?> 13 | 14 |
15 |
16 |

Ticket Management Edit Ticket

17 | 22 |
23 |
24 | 25 | 26 | 27 | 28 | 29 | @if( Session::pull('submit')) 30 | @if(Input::old()) 31 | title = Input::old('title') ; 33 | $ticket->description = Input::old('description') ; 34 | $ticket->status = Input::old('status'); 35 | $ticket->priority = Input::old('priority'); 36 | $ticket->project = Input::old('project'); 37 | $ticket->url = Input::old('url'); 38 | ?> 39 | @endif 40 | @if( $errors->count() > 0 ) 41 |
42 | 43 |

The following errors have occurred:

44 | 49 | 50 |
51 | @else 52 |
53 | 54 | {{ "Ticket Edited Successfully " }} 55 |
56 | 57 | @endif 58 | @endif 59 | 60 | 61 | 62 | 109 | @stop -------------------------------------------------------------------------------- /app/views/edit_user.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 | 6 |
7 |
8 |

User Management Edit User

9 | 14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 | @if( Session::pull('submit')) 22 | @if(Input::old()) 23 | name = Input::old('name') ; 25 | $user->email = Input::old('email') ; 26 | $user->role = Input::old('role'); 27 | $user->passowrd = Input::old('password'); 28 | ?> 29 | @endif 30 | 31 | @if( $errors->count() > 0 ) 32 |
33 | 34 |

The following errors have occurred:

35 | 42 | 43 |
44 | @else 45 |
46 | 47 | {{ "User Edited Successfully" }} 48 |
49 | 50 | @endif 51 | @endif 52 | 53 | 54 | @if($user) 55 | 86 | 87 | 88 | @stop 89 | 90 | -------------------------------------------------------------------------------- /app/views/email_template/project_add_member.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Register - Webxity Ticket Management 9 | 10 | 11 | 12 |
13 | 14 | 17 | 18 |
19 |

20 | {{ $data['creator'] }} added you the project {{ $data['project_id'] }} on webxity ticket management system. 21 |

22 |
23 |
24 | 25 | 26 | -------------------------------------------------------------------------------- /app/views/email_template/task_complete.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Webxity Ticket Management 9 | 10 | 11 | 12 |
13 | 14 | 17 | 18 |
19 |

Hi {{ $data['project_owner_name'] }},

20 |

{{ $data['creator'] }} has been completed this tasks( {{ $data['task'] }} ) in the webxity Ticket Management System.

21 | 22 | 23 | 24 |

visit site

25 |
26 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /app/views/email_template/task_email.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Webxity Ticket Management 9 | 10 | 11 | 12 |
13 | 14 | 17 | 18 |
19 |

Hi {{ $data['developer_name'] }},

20 |

{{ $data['creator'] }} assign tasks in the webxity Ticket Management System.

21 | 22 |

Task Detail

23 |

Project : {{ $data['project'] }}

24 | 25 |

Task : {{ $data['title'] }}

26 | 27 |

Description : {{ $data['desription'] }}

28 | 29 |

visit site

30 |
31 |
32 | 33 | 34 | -------------------------------------------------------------------------------- /app/views/emails/auth/reminder.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |

Password Reset

8 | 9 |
10 | To reset your password, complete this form: {{ URL::to('password/reset', array($token)) }}.
11 | This link will expire in {{ Config::get('auth.reminder.expire', 60) }} minutes. 12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /app/views/error404.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 |

The page isn't found. 404 Not Found

5 | @stop -------------------------------------------------------------------------------- /app/views/hello.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Laravel PHP Framework 6 | 35 | 36 | 37 |
38 | Laravel PHP Framework 39 |

You have arrived.

40 |
41 | 42 | 43 | -------------------------------------------------------------------------------- /app/views/layouts/master-child.blade.php: -------------------------------------------------------------------------------- 1 | @if (!$isAjax) 2 | @extends('layouts.master') 3 | 4 | @section('page-wrapper') 5 | 6 | @stop 7 | @else 8 | @yield('page-wrapper') 9 | @endif -------------------------------------------------------------------------------- /app/views/layouts/master.blade.php: -------------------------------------------------------------------------------- 1 | @if(!$isAjax) 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Dashboard - Webxity 11 | 12 | {{ HTML::style('css/bootstrap.min.css') }} 13 | {{ HTML::style('css/sb-admin.css') }} 14 | {{ HTML::style('css/css/font-awesome.min.css') }} 15 | {{ HTML::style('css/fullcalendar.css') }} 16 | {{ HTML::style('css/fullcalendar.print.css') }} 17 | 18 | 19 | 20 | 21 |
22 | 23 | 123 | 124 |
125 | @section('page-wrapper') 126 | 127 | @show 128 |
129 | 130 | 131 |
132 | 133 | 134 | {{ HTML::script('js/moment.min.js') }} 135 | {{ HTML::script('js/jquery.min.js') }} 136 | {{ HTML::script('js/fullcalendar.min.js') }} 137 | 215 | {{ HTML::script('js/bootstrap.js') }} 216 | 222 | {{ HTML::script('js/tablesorter/tables.js') }} 223 | {{ HTML::script('js/tablesorter/tablesorter.js') }} 224 | {{ HTML::script('js/init.js') }} 225 | 226 | 227 | @endif 228 | -------------------------------------------------------------------------------- /app/views/list_project_member.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

Project Management 8 | List Projects Members 9 |

10 | 15 |
16 |
17 | 18 | 95 | 96 | @stop -------------------------------------------------------------------------------- /app/views/list_projects.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 | 6 |
7 |
8 |

Project Management 9 | List Projects 10 |

11 | 16 |
17 |
18 | 19 | 109 | 110 | @stop -------------------------------------------------------------------------------- /app/views/list_tickets.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 |
5 |
6 |

Ticket Management List Tickets

7 | 12 |
13 |
14 | 15 | 16 | 17 | 18 | @if(Auth::user()->role == 'client') 19 | 72 | @endif 73 | 74 | 75 | 76 | 77 | @elseif(Auth::user()->role == 'admin') 78 | 132 | @endif 133 | 134 | 135 | 136 | 137 | @if(Auth::user()->role == 'developer') 138 | 203 | @endif 204 | 205 | 231 | @stop -------------------------------------------------------------------------------- /app/views/list_users.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

User Management 8 | List Users 9 |

10 | 15 |
16 |
17 | 18 | 114 | @stop -------------------------------------------------------------------------------- /app/views/login.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Please! Sign in 6 | {{ HTML::style('css/bootstrap.min.css') }} 7 | {{ HTML::style('css/login.css') }} 8 | 9 | 10 | 11 |
12 | 15 |
16 | 56 |
57 |
58 | 59 | -------------------------------------------------------------------------------- /app/views/project_member.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

ProjectAdd Member

8 | 13 |
14 |
15 | 16 | @if( Session::pull('submit')) 17 | @if(empty(Session::has('message'))) 18 | @if( $errors->count() > 0 ) 19 |
20 | 21 |

The following errors have occurred:

22 | 25 | 26 |
27 | @else 28 |
29 | 30 | {{ "Developer Added Successfully" }} 31 |
32 | @endif 33 | @else 34 |
35 | 36 |

The following errors have occurred:

37 | 40 | 41 |
42 | @endif 43 | @endif 44 | 45 | 46 | 47 | 60 | 61 | @stop 62 | 63 | -------------------------------------------------------------------------------- /app/views/show_ticket.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

Ticket Management 8 | Show Tickets 9 |

10 | 15 |
16 |
17 | 18 | 103 | @stop -------------------------------------------------------------------------------- /app/views/time_tracking.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.master-child') 2 | 3 | @section('page-wrapper') 4 | 5 |
6 |
7 |

Time Tracking 8 |

9 | 13 |
14 |
15 | 16 | 101 | @stop -------------------------------------------------------------------------------- /app/views/welcome.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Register - Webxity Ticket Management 9 | 10 | 11 | 12 |
13 | 14 | 17 |
18 |

Welcome : {{ $data['name'] }}

19 |

20 | {{ $data['creator'] }} register you on webxity ticket management system.

21 |

Below its your login detail.

22 |

Email : {{ $data['user']['email'] }}

23 |

Password : {{ $data['user']['password'] }}

24 |

Visit site

25 |
26 | 27 |
28 | 29 | 30 | -------------------------------------------------------------------------------- /artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | setRequestForConsoleEnvironment(); 45 | 46 | $artisan = Illuminate\Console\Application::start($app); 47 | 48 | /* 49 | |-------------------------------------------------------------------------- 50 | | Run The Artisan Application 51 | |-------------------------------------------------------------------------- 52 | | 53 | | When we run the console application, the current CLI command will be 54 | | executed in this console and the response sent back to a terminal 55 | | or another output device for the developers. Here goes nothing! 56 | | 57 | */ 58 | 59 | $status = $artisan->run(); 60 | 61 | /* 62 | |-------------------------------------------------------------------------- 63 | | Shutdown The Application 64 | |-------------------------------------------------------------------------- 65 | | 66 | | Once Artisan has finished running. We will fire off the shutdown events 67 | | so that any final work may be done by the application before we shut 68 | | down the process. This is the last thing to happen to the request. 69 | | 70 | */ 71 | 72 | $app->shutdown(); 73 | 74 | exit($status); 75 | -------------------------------------------------------------------------------- /bootstrap/Untitled-1.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Untitled Document 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /bootstrap/autoload.php: -------------------------------------------------------------------------------- 1 | __DIR__.'/../app', 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Public Path 21 | |-------------------------------------------------------------------------- 22 | | 23 | | The public path contains the assets for your web application, such as 24 | | your JavaScript and CSS files, and also contains the primary entry 25 | | point for web requests into these applications from the outside. 26 | | 27 | */ 28 | 29 | 'public' => __DIR__.'/..', 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Base Path 34 | |-------------------------------------------------------------------------- 35 | | 36 | | The base path is the root of the Laravel installation. Most likely you 37 | | will not need to change this value. But, if for some wild reason it 38 | | is necessary you will do so here, just proceed with some caution. 39 | | 40 | */ 41 | 42 | 'base' => __DIR__.'/..', 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Storage Path 47 | |-------------------------------------------------------------------------- 48 | | 49 | | The storage path is used by Laravel to store cached Blade views, logs 50 | | and other pieces of information. You may modify the path here when 51 | | you want to change the location of this directory for your apps. 52 | | 53 | */ 54 | 55 | 'storage' => __DIR__.'/../app/storage', 56 | 57 | ); 58 | -------------------------------------------------------------------------------- /bootstrap/start.php: -------------------------------------------------------------------------------- 1 | detectEnvironment(array( 28 | 29 | 'local' => array('rw'), 30 | 31 | )); 32 | 33 | /* 34 | |-------------------------------------------------------------------------- 35 | | Bind Paths 36 | |-------------------------------------------------------------------------- 37 | | 38 | | Here we are binding the paths configured in paths.php to the app. You 39 | | should not be changing these here. If you need to change these you 40 | | may do so within the paths.php file and they will be bound here. 41 | | 42 | */ 43 | 44 | $app->bindInstallPaths(require __DIR__.'/paths.php'); 45 | 46 | /* 47 | |-------------------------------------------------------------------------- 48 | | Load The Application 49 | |-------------------------------------------------------------------------- 50 | | 51 | | Here we will load this Illuminate application. We will keep this in a 52 | | separate location so we can isolate the creation of an application 53 | | from the actual running of the application with a given request. 54 | | 55 | */ 56 | 57 | $framework = $app['path.base']. 58 | '/vendor/laravel/framework/src'; 59 | 60 | require $framework.'/Illuminate/Foundation/start.php'; 61 | 62 | /* 63 | |-------------------------------------------------------------------------- 64 | | Return The Application 65 | |-------------------------------------------------------------------------- 66 | | 67 | | This script returns the application instance. The instance is given to 68 | | the calling script so we can separate the building of the instances 69 | | from the actual running of the application and sending responses. 70 | | 71 | */ 72 | 73 | return $app; 74 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laravel/laravel", 3 | "description": "The Laravel Framework.", 4 | "keywords": ["framework", "laravel"], 5 | "license": "MIT", 6 | "require": { 7 | "laravel/framework": "4.2.*" 8 | }, 9 | "require-dev": { 10 | "phpunit/phpunit": "4.1.*" 11 | }, 12 | "autoload": { 13 | "classmap": [ 14 | "app/commands", 15 | "app/controllers", 16 | "app/models", 17 | "app/database/migrations", 18 | "app/database/seeds", 19 | "app/tests/TestCase.php", 20 | "app/libraries/HelperFunc.php" 21 | ] 22 | }, 23 | "scripts": { 24 | "post-install-cmd": [ 25 | "php artisan clear-compiled", 26 | "php artisan optimize" 27 | ], 28 | "post-update-cmd": [ 29 | "php artisan clear-compiled", 30 | "php artisan optimize" 31 | ], 32 | "post-create-project-cmd": [ 33 | "php artisan key:generate" 34 | ] 35 | }, 36 | "config": { 37 | "preferred-install": "dist" 38 | }, 39 | "minimum-stability": "stable" 40 | } 41 | -------------------------------------------------------------------------------- /css/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/css/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /css/fullcalendar.print.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * FullCalendar v2.2.5 Print Stylesheet 3 | * Docs & License: http://arshaw.com/fullcalendar/ 4 | * (c) 2013 Adam Shaw 5 | */ 6 | 7 | /* 8 | * Include this stylesheet on your page to get a more printer-friendly calendar. 9 | * When including this stylesheet, use the media='print' attribute of the tag. 10 | * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css. 11 | */ 12 | 13 | .fc { 14 | max-width: 100% !important; 15 | } 16 | 17 | 18 | /* Global Event Restyling 19 | --------------------------------------------------------------------------------------------------*/ 20 | 21 | .fc-event { 22 | background: #fff !important; 23 | color: #000 !important; 24 | page-break-inside: avoid; 25 | } 26 | 27 | .fc-event .fc-resizer { 28 | display: none; 29 | } 30 | 31 | 32 | /* Table & Day-Row Restyling 33 | --------------------------------------------------------------------------------------------------*/ 34 | 35 | th, 36 | td, 37 | hr, 38 | thead, 39 | tbody, 40 | .fc-row { 41 | border-color: #ccc !important; 42 | background: #fff !important; 43 | } 44 | 45 | /* kill the overlaid, absolutely-positioned common components */ 46 | .fc-bg, 47 | .fc-bgevent-skeleton, 48 | .fc-highlight-skeleton, 49 | .fc-helper-skeleton { 50 | display: none; 51 | } 52 | 53 | /* don't force a min-height on rows (for DayGrid) */ 54 | .fc tbody .fc-row { 55 | height: auto !important; /* undo height that JS set in distributeHeight */ 56 | min-height: 0 !important; /* undo the min-height from each view's specific stylesheet */ 57 | } 58 | 59 | .fc tbody .fc-row .fc-content-skeleton { 60 | position: static; /* undo .fc-rigid */ 61 | padding-bottom: 0 !important; /* use a more border-friendly method for this... */ 62 | } 63 | 64 | .fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { /* only works in newer browsers */ 65 | padding-bottom: 1em; /* ...gives space within the skeleton. also ensures min height in a way */ 66 | } 67 | 68 | .fc tbody .fc-row .fc-content-skeleton table { 69 | /* provides a min-height for the row, but only effective for IE, which exaggerates this value, 70 | making it look more like 3em. for other browers, it will already be this tall */ 71 | height: 1em; 72 | } 73 | 74 | 75 | /* Undo month-view event limiting. Display all events and hide the "more" links 76 | --------------------------------------------------------------------------------------------------*/ 77 | 78 | .fc-more-cell, 79 | .fc-more { 80 | display: none !important; 81 | } 82 | 83 | .fc tr.fc-limited { 84 | display: table-row !important; 85 | } 86 | 87 | .fc td.fc-limited { 88 | display: table-cell !important; 89 | } 90 | 91 | .fc-popover { 92 | display: none; /* never display the "more.." popover in print mode */ 93 | } 94 | 95 | 96 | /* TimeGrid Restyling 97 | --------------------------------------------------------------------------------------------------*/ 98 | 99 | /* undo the min-height 100% trick used to fill the container's height */ 100 | .fc-time-grid { 101 | min-height: 0 !important; 102 | } 103 | 104 | /* don't display the side axis at all ("all-day" and time cells) */ 105 | .fc-agenda-view .fc-axis { 106 | display: none; 107 | } 108 | 109 | /* don't display the horizontal lines */ 110 | .fc-slats, 111 | .fc-time-grid hr { /* this hr is used when height is underused and needs to be filled */ 112 | display: none !important; /* important overrides inline declaration */ 113 | } 114 | 115 | /* let the container that holds the events be naturally positioned and create real height */ 116 | .fc-time-grid .fc-content-skeleton { 117 | position: static; 118 | } 119 | 120 | /* in case there are no events, we still want some height */ 121 | .fc-time-grid .fc-content-skeleton table { 122 | height: 4em; 123 | } 124 | 125 | /* kill the horizontal spacing made by the event container. event margins will be done below */ 126 | .fc-time-grid .fc-event-container { 127 | margin: 0 !important; 128 | } 129 | 130 | 131 | /* TimeGrid *Event* Restyling 132 | --------------------------------------------------------------------------------------------------*/ 133 | 134 | /* naturally position events, vertically stacking them */ 135 | .fc-time-grid .fc-event { 136 | position: static !important; 137 | margin: 3px 2px !important; 138 | } 139 | 140 | /* for events that continue to a future day, give the bottom border back */ 141 | .fc-time-grid .fc-event.fc-not-end { 142 | border-bottom-width: 1px !important; 143 | } 144 | 145 | /* indicate the event continues via "..." text */ 146 | .fc-time-grid .fc-event.fc-not-end:after { 147 | content: "..."; 148 | } 149 | 150 | /* for events that are continuations from previous days, give the top border back */ 151 | .fc-time-grid .fc-event.fc-not-start { 152 | border-top-width: 1px !important; 153 | } 154 | 155 | /* indicate the event is a continuation via "..." text */ 156 | .fc-time-grid .fc-event.fc-not-start:before { 157 | content: "..."; 158 | } 159 | 160 | /* time */ 161 | 162 | /* undo a previous declaration and let the time text span to a second line */ 163 | .fc-time-grid .fc-event .fc-time { 164 | white-space: normal !important; 165 | } 166 | 167 | /* hide the the time that is normally displayed... */ 168 | .fc-time-grid .fc-event .fc-time span { 169 | display: none; 170 | } 171 | 172 | /* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */ 173 | .fc-time-grid .fc-event .fc-time:after { 174 | content: attr(data-full); 175 | } 176 | 177 | 178 | /* Vertical Scroller & Containers 179 | --------------------------------------------------------------------------------------------------*/ 180 | 181 | /* kill the scrollbars and allow natural height */ 182 | .fc-scroller, 183 | .fc-day-grid-container, /* these divs might be assigned height, which we need to cleared */ 184 | .fc-time-grid-container { /* */ 185 | overflow: visible !important; 186 | height: auto !important; 187 | } 188 | 189 | /* kill the horizontal border/padding used to compensate for scrollbars */ 190 | .fc-row { 191 | border: 0 !important; 192 | margin: 0 !important; 193 | } 194 | 195 | 196 | /* Button Controls 197 | --------------------------------------------------------------------------------------------------*/ 198 | 199 | .fc-button-group, 200 | .fc button { 201 | display: none; /* don't display any button-related controls */ 202 | } 203 | -------------------------------------------------------------------------------- /css/login.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | .row { 6 | width: 100%; 7 | height: 100%; 8 | position: relative; 9 | } 10 | #login-box { 11 | position: absolute; 12 | margin-top: 10%; 13 | } 14 | #login-box .breadcrumb { 15 | border: 1px solid #ccc; 16 | border-radius: 5px; 17 | } 18 | .breadcrumb { 19 | padding: 15px; 20 | padding-top: 30px; 21 | margin: 0; 22 | } 23 | .page-header { 24 | padding-left: 40px; 25 | border-bottom: none; 26 | background-color: #222; 27 | margin: 0; 28 | } 29 | .page-header h1 { 30 | margin: 0; 31 | padding-top: 10px; 32 | padding-bottom: 10px; 33 | color: #ffffff; 34 | } 35 | @media screen and (min-width:0px) and (max-width: 500px){ 36 | .container { 37 | width: 100%; 38 | } 39 | .page-header { 40 | padding-left: 20px; 41 | 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /css/sb-admin.css: -------------------------------------------------------------------------------- 1 | /* 2 | Author: Start Bootstrap - http://startbootstrap.com 3 | 'SB Admin' HTML Template by Start Bootstrap 4 | 5 | All Start Bootstrap themes are licensed under Apache 2.0. 6 | For more info and more free Bootstrap 3 HTML themes, visit http://startbootstrap.com! 7 | */ 8 | 9 | /* ATTN: This is mobile first CSS - to update 786px and up screen width use the media query near the bottom of the document! */ 10 | 11 | /* Global Styles */ 12 | 13 | body { 14 | margin-top: 50px; 15 | } 16 | 17 | #wrapper { 18 | padding-left: 0; 19 | } 20 | 21 | #page-wrapper { 22 | width: 100%; 23 | padding: 5px 15px; 24 | } 25 | 26 | /* Nav Messages */ 27 | 28 | .messages-dropdown .dropdown-menu .message-preview .avatar, 29 | .messages-dropdown .dropdown-menu .message-preview .name, 30 | .messages-dropdown .dropdown-menu .message-preview .message, 31 | .messages-dropdown .dropdown-menu .message-preview .time { 32 | display: block; 33 | } 34 | 35 | .messages-dropdown .dropdown-menu .message-preview .avatar { 36 | float: left; 37 | margin-right: 15px; 38 | } 39 | 40 | .messages-dropdown .dropdown-menu .message-preview .name { 41 | font-weight: bold; 42 | } 43 | 44 | .messages-dropdown .dropdown-menu .message-preview .message { 45 | font-size: 12px; 46 | } 47 | 48 | .messages-dropdown .dropdown-menu .message-preview .time { 49 | font-size: 12px; 50 | } 51 | 52 | /* Line Break */ 53 | .line-break{ 54 | 55 | max-width:900px; 56 | 57 | } 58 | 59 | /*Conversation Message*/ 60 | 61 | .convo-message { 62 | background-color: rgba(243, 243, 243, 1); 63 | 64 | } 65 | /* Show ticket page */ 66 | 67 | .show-ticket{ 68 | 69 | margin-top:50px; 70 | } 71 | 72 | 73 | /* Nav Announcements */ 74 | 75 | .announcement-heading { 76 | font-size: 50px; 77 | margin: 0; 78 | } 79 | 80 | .announcement-text { 81 | margin: 0; 82 | } 83 | 84 | /* Table Headers */ 85 | 86 | table.tablesorter thead { 87 | cursor: pointer; 88 | } 89 | 90 | table.tablesorter thead tr th:hover { 91 | background-color: #f5f5f5; 92 | } 93 | 94 | /* Flot Chart Containers */ 95 | 96 | .flot-chart { 97 | display: block; 98 | height: 400px; 99 | } 100 | 101 | .flot-chart-content { 102 | width: 100%; 103 | height: 100%; 104 | } 105 | 106 | /* Edit Below to Customize Widths > 768px */ 107 | @media (min-width:768px) { 108 | 109 | /* Wrappers */ 110 | 111 | #wrapper { 112 | padding-left: 225px; 113 | } 114 | 115 | #page-wrapper { 116 | padding: 15px 25px; 117 | } 118 | 119 | /* Side Nav */ 120 | 121 | .side-nav { 122 | margin-left: -225px; 123 | left: 225px; 124 | width: 225px; 125 | position: fixed; 126 | top: 50px; 127 | height: 100%; 128 | border-radius: 0; 129 | border: none; 130 | background-color: #222222; 131 | overflow-y: auto; 132 | } 133 | 134 | /* Bootstrap Default Overrides - Customized Dropdowns for the Side Nav */ 135 | 136 | .side-nav>li.dropdown>ul.dropdown-menu { 137 | position: relative; 138 | min-width: 225px; 139 | margin: 0; 140 | padding: 0; 141 | border: none; 142 | border-radius: 0; 143 | background-color: transparent; 144 | box-shadow: none; 145 | -webkit-box-shadow: none; 146 | } 147 | 148 | .side-nav>li.dropdown>ul.dropdown-menu>li>a { 149 | color: #999999; 150 | padding: 15px 15px 15px 25px; 151 | } 152 | .side-nav>li.dropdown>ul.dropdown-menu>li.active>a { 153 | color: #FFFFFF; 154 | } 155 | 156 | .side-nav>li.dropdown>ul.dropdown-menu>li>a:hover, 157 | .side-nav>li.dropdown>ul.dropdown-menu>li>a.active, 158 | .side-nav>li.dropdown>ul.dropdown-menu>li>a:focus { 159 | color: #fff; 160 | background-color: #080808; 161 | } 162 | 163 | .side-nav>li>a { 164 | width: 225px; 165 | } 166 | 167 | .navbar-inverse .navbar-nav>li>a:hover, 168 | .navbar-inverse .navbar-nav>li>a:focus { 169 | background-color: #080808; 170 | } 171 | 172 | /* Nav Messages */ 173 | 174 | .messages-dropdown .dropdown-menu { 175 | min-width: 300px; 176 | } 177 | 178 | .messages-dropdown .dropdown-menu li a { 179 | white-space: normal; 180 | } 181 | 182 | .navbar-collapse { 183 | padding-left: 15px !important; 184 | padding-right: 15px !important; 185 | } 186 | 187 | } 188 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/favicon.ico -------------------------------------------------------------------------------- /images/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/images/ajax-loader.gif -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | 7 | */ 8 | 9 | /* 10 | |-------------------------------------------------------------------------- 11 | | Register The Auto Loader 12 | |-------------------------------------------------------------------------- 13 | | 14 | | Composer provides a convenient, automatically generated class loader 15 | | for our application. We just need to utilize it! We'll require it 16 | | into the script here so that we do not have to worry about the 17 | | loading of any our classes "manually". Feels great to relax. 18 | | 19 | */ 20 | 21 | require __DIR__.'/bootstrap/autoload.php'; 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Turn On The Lights 26 | |-------------------------------------------------------------------------- 27 | | 28 | | We need to illuminate PHP development, so let's turn on the lights. 29 | | This bootstraps the framework and gets it ready for use, then it 30 | | will load up this application so that we can run it and send 31 | | the responses back to the browser and delight these users. 32 | | 33 | */ 34 | 35 | $app = require_once __DIR__.'/bootstrap/start.php'; 36 | 37 | /* 38 | |-------------------------------------------------------------------------- 39 | | Run The Application 40 | |-------------------------------------------------------------------------- 41 | | 42 | | Once we have the application, we can simply call the run method, 43 | | which will execute the request and send the response back to 44 | | the client's browser allowing them to enjoy the creative 45 | | and wonderful application we have whipped up for them. 46 | | 47 | */ 48 | 49 | $app->run(); 50 | -------------------------------------------------------------------------------- /js/flot/jquery.flot.resize.js: -------------------------------------------------------------------------------- 1 | /* Flot plugin for automatically redrawing plots as the placeholder resizes. 2 | 3 | Copyright (c) 2007-2013 IOLA and Ole Laursen. 4 | Licensed under the MIT license. 5 | 6 | It works by listening for changes on the placeholder div (through the jQuery 7 | resize event plugin) - if the size changes, it will redraw the plot. 8 | 9 | There are no options. If you need to disable the plugin for some plots, you 10 | can just fix the size of their placeholders. 11 | 12 | */ 13 | 14 | /* Inline dependency: 15 | * jQuery resize event - v1.1 - 3/14/2010 16 | * http://benalman.com/projects/jquery-resize-plugin/ 17 | * 18 | * Copyright (c) 2010 "Cowboy" Ben Alman 19 | * Dual licensed under the MIT and GPL licenses. 20 | * http://benalman.com/about/license/ 21 | */ 22 | 23 | (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this); 24 | 25 | (function ($) { 26 | var options = { }; // no options 27 | 28 | function init(plot) { 29 | function onResize() { 30 | var placeholder = plot.getPlaceholder(); 31 | 32 | // somebody might have hidden us and we can't plot 33 | // when we don't have the dimensions 34 | if (placeholder.width() == 0 || placeholder.height() == 0) 35 | return; 36 | 37 | plot.resize(); 38 | plot.setupGrid(); 39 | plot.draw(); 40 | } 41 | 42 | function bindEvents(plot, eventHolder) { 43 | plot.getPlaceholder().resize(onResize); 44 | } 45 | 46 | function shutdown(plot, eventHolder) { 47 | plot.getPlaceholder().unbind("resize", onResize); 48 | } 49 | 50 | plot.hooks.bindEvents.push(bindEvents); 51 | plot.hooks.shutdown.push(shutdown); 52 | } 53 | 54 | $.plot.plugins.push({ 55 | init: init, 56 | options: options, 57 | name: 'resize', 58 | version: '1.0' 59 | }); 60 | })(jQuery); -------------------------------------------------------------------------------- /js/flot/jquery.flot.tooltip.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * jquery.flot.tooltip 3 | * 4 | * description: easy-to-use tooltips for Flot charts 5 | * version: 0.6.2 6 | * author: Krzysztof Urbas @krzysu [myviews.pl] 7 | * website: https://github.com/krzysu/flot.tooltip 8 | * 9 | * build on 2013-09-30 10 | * released under MIT License, 2012 11 | */ 12 | (function(t){var o={tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(){}}},i=function(t){this.tipPosition={x:0,y:0},this.init(t)};i.prototype.init=function(o){function i(t){var o={};o.x=t.pageX,o.y=t.pageY,s.updateTooltipPosition(o)}function e(t,o,i){var e=s.getDomElement();if(i){var n;n=s.stringFormat(s.tooltipOptions.content,i),e.html(n),s.updateTooltipPosition({x:o.pageX,y:o.pageY}),e.css({left:s.tipPosition.x+s.tooltipOptions.shifts.x,top:s.tipPosition.y+s.tooltipOptions.shifts.y}).show(),"function"==typeof s.tooltipOptions.onHover&&s.tooltipOptions.onHover(i,e)}else e.hide().html("")}var s=this;o.hooks.bindEvents.push(function(o,n){s.plotOptions=o.getOptions(),s.plotOptions.tooltip!==!1&&void 0!==s.plotOptions.tooltip&&(s.tooltipOptions=s.plotOptions.tooltipOpts,s.getDomElement(),t(o.getPlaceholder()).bind("plothover",e),t(n).bind("mousemove",i))}),o.hooks.shutdown.push(function(o,s){t(o.getPlaceholder()).unbind("plothover",e),t(s).unbind("mousemove",i)})},i.prototype.getDomElement=function(){var o;return t("#flotTip").length>0?o=t("#flotTip"):(o=t("
").attr("id","flotTip"),o.appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&o.css({background:"#fff","z-index":"100",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"none","white-space":"nowrap"})),o},i.prototype.updateTooltipPosition=function(o){var i=t("#flotTip").outerWidth()+this.tooltipOptions.shifts.x,e=t("#flotTip").outerHeight()+this.tooltipOptions.shifts.y;o.x-t(window).scrollLeft()>t(window).innerWidth()-i&&(o.x-=i),o.y-t(window).scrollTop()>t(window).innerHeight()-e&&(o.y-=e),this.tipPosition.x=o.x,this.tipPosition.y=o.y},i.prototype.stringFormat=function(t,o){var i=/%p\.{0,1}(\d{0,})/,e=/%s/,s=/%x\.{0,1}(?:\d{0,})/,n=/%y\.{0,1}(?:\d{0,})/;return"function"==typeof t&&(t=t(o.series.label,o.series.data[o.dataIndex][0],o.series.data[o.dataIndex][1],o)),o.series.percent!==void 0&&(t=this.adjustValPrecision(i,t,o.series.percent)),o.series.label!==void 0&&(t=t.replace(e,o.series.label)),this.isTimeMode("xaxis",o)&&this.isXDateFormat(o)&&(t=t.replace(s,this.timestampToDate(o.series.data[o.dataIndex][0],this.tooltipOptions.xDateFormat))),this.isTimeMode("yaxis",o)&&this.isYDateFormat(o)&&(t=t.replace(n,this.timestampToDate(o.series.data[o.dataIndex][1],this.tooltipOptions.yDateFormat))),"number"==typeof o.series.data[o.dataIndex][0]&&(t=this.adjustValPrecision(s,t,o.series.data[o.dataIndex][0])),"number"==typeof o.series.data[o.dataIndex][1]&&(t=this.adjustValPrecision(n,t,o.series.data[o.dataIndex][1])),o.series.xaxis.tickFormatter!==void 0&&(t=t.replace(s,o.series.xaxis.tickFormatter(o.series.data[o.dataIndex][0],o.series.xaxis))),o.series.yaxis.tickFormatter!==void 0&&(t=t.replace(n,o.series.yaxis.tickFormatter(o.series.data[o.dataIndex][1],o.series.yaxis))),t},i.prototype.isTimeMode=function(t,o){return o.series[t].options.mode!==void 0&&"time"===o.series[t].options.mode},i.prototype.isXDateFormat=function(){return this.tooltipOptions.xDateFormat!==void 0&&null!==this.tooltipOptions.xDateFormat},i.prototype.isYDateFormat=function(){return this.tooltipOptions.yDateFormat!==void 0&&null!==this.tooltipOptions.yDateFormat},i.prototype.timestampToDate=function(o,i){var e=new Date(o);return t.plot.formatDate(e,i)},i.prototype.adjustValPrecision=function(t,o,i){var e,s=o.match(t);return null!==s&&""!==RegExp.$1&&(e=RegExp.$1,i=i.toFixed(e),o=o.replace(t,i)),o};var e=function(t){new i(t)};t.plot.plugins.push({init:e,options:o,name:"tooltip",version:"0.6.1"})})(jQuery); -------------------------------------------------------------------------------- /js/init.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Rw. 3 | * @author Rw 4 | * @year 2014 5 | */ 6 | 7 | (function ($) { 8 | 9 | // extend object with other object 10 | var _extend = function (defaults, options) { 11 | if (typeof defaults !== "object" || typeof options !== "object") { 12 | return {}; 13 | } 14 | 15 | for (var i in options) { 16 | if (options.hasOwnProperty(i)) { 17 | for (var x in defaults) { 18 | if (x !== i) { 19 | defaults[i] = options[i]; 20 | } 21 | } 22 | } 23 | } 24 | 25 | return defaults; 26 | }, 27 | // Check given variable is array 28 | isArray = function(__var) { 29 | if (Object.prototype.toString.call(__var) === '[object Array]') { 30 | return true; 31 | } 32 | return false; 33 | }; 34 | 35 | // Pushify 36 | var pushify = function (pushed) { 37 | var self = $(this), 38 | pushed = pushed || true, 39 | re = new RegExp(location.origin + '\/'); 40 | 41 | $('.navbar-nav li').removeClass('active'); 42 | self.closest('li').addClass('active'); 43 | 44 | var anchorURL = ($(this).attr('href') || location.href); 45 | 46 | if (anchorURL.indexOf(location.origin) < 0) { 47 | location.href = anchorURL; 48 | } 49 | 50 | if (pushed != "false") { 51 | history.pushState(null, null, anchorURL); 52 | } 53 | 54 | var data = { 55 | requested: location.href, 56 | _token: __tmsOBJ._token 57 | }; 58 | 59 | if (self.data('action')) { 60 | data.action = self.data('action'); 61 | } 62 | 63 | $.ajax({ 64 | type: 'GET', 65 | url: __tmsOBJ.__tmsBaseURI + '/ajax', 66 | data: data, 67 | error: function(jqxhr, status, data) { 68 | switch (jqxhr.status) { 69 | case 401: 70 | window.location.replace(__tmsOBJ.__tmsBaseURI + '/login'); 71 | break; 72 | default: 73 | break; 74 | } 75 | }, 76 | complete: function (data) { 77 | try { 78 | var jsonData = JSON.parse(data.responseText); 79 | switch (jsonData.action) { 80 | case 'logout': 81 | history.pushState(null, null, __tmsOBJ.__tmsBaseURI + '/login'); 82 | document.write(jsonData.template); 83 | break; 84 | default: 85 | break; 86 | } 87 | } catch (e) { 88 | $('#page-wrapper').empty().html(data.responseText); 89 | } 90 | tableSorter() 91 | } 92 | }); 93 | }; 94 | 95 | $(document).on('click', 'a', function (e) { 96 | e.preventDefault(); 97 | 98 | var self = $(this), 99 | invalidhref = [ 100 | "#", 101 | "javascript", 102 | "file", 103 | "ftp", 104 | "sftp" 105 | ], 106 | determineInvalid = false; 107 | 108 | invalidhref.map(function(value) { 109 | if (self.prop('href').indexOf(value) > -1) { 110 | determineInvalid = true; 111 | return false; 112 | } 113 | }); 114 | 115 | if (determineInvalid === false) { 116 | pushify.call(this); 117 | } 118 | }); 119 | 120 | $(window).bind('popstate', function(e) { 121 | pushify.call(this, "false"); 122 | }); 123 | 124 | // Script for table sort plugin// 125 | function tableSorter() { 126 | $("table").tablesorter(); 127 | } 128 | 129 | tableSorter(); 130 | 131 | ///// Script for handling delete /// 132 | $(document).on("click", "#project-table .btn.btn-danger", function(e) { 133 | 134 | e.preventDefault(); 135 | var self = $(this); 136 | 137 | $.post( 138 | __tmsOBJ.__tmsBaseURI + '/delete-record', 139 | { 140 | "_token": $( this ).attr( 'data-session-id' ) , 141 | "id": $( this ).attr( 'data-delete-id' ) , 142 | "page" : $( this ).attr( 'data-page' ) 143 | }, function() { 144 | self.closest('tr').remove(); 145 | }); 146 | 147 | }); 148 | 149 | 150 | 151 | ///// Script for handling Convo Messages /// 152 | $(document).on("click", "#convo-message", function(e) { 153 | 154 | e.preventDefault(); 155 | var self = $(this); 156 | 157 | var ticket_id = $("#ticket-id").val() ; 158 | var msg = $("#text-box").val() ; 159 | var _token = $("input[name='_token']").val() ; 160 | var user_id = $("#user-id").val() ; 161 | $.post( 162 | __tmsOBJ.__tmsBaseURI + '/convo-message', 163 | { 164 | "_token":_token , 165 | "msg":msg , 166 | "ticket_id" : ticket_id, 167 | "user_id" : user_id 168 | }, function(data) { 169 | 170 | if(data!=="invalid input") 171 | { 172 | var obj = $.parseJSON(data) ; 173 | 174 | var html = '

' + 175 | obj.msg +'.

'+ ' By ' + obj.name + ' At ' + obj.time +'
'; 176 | 177 | $( "#convo-box" ).append(html); 178 | $("#not-available").remove(); 179 | } else { $( "#error-msg" ).show(); } 180 | }); 181 | 182 | 183 | }); 184 | 185 | var alreadyOpened = false; 186 | $("#ticket_bread").click(function(){ 187 | if (!alreadyOpened) { 188 | alreadyOpened = false; 189 | $("ul.side-nav").children().eq(1).toggleClass("open"); 190 | 191 | } else { 192 | alreadyOpened = true; 193 | //$("ul.side-nav").children().eq(1).removeClass("open"); 194 | } 195 | }); 196 | 197 | 198 | 199 | 200 | /*var select = document.getElementById("components"); 201 | select.onchange = function(){ 202 | var selected_value = select.options[select.selectedIndex].value; 203 | 204 | if(selected_value=="empty") { 205 | // $("#privatecourse").val('no');} 206 | 207 | } 208 | } 209 | */ 210 | }(jQuery)); -------------------------------------------------------------------------------- /js/morris/chart-data-morris.js: -------------------------------------------------------------------------------- 1 | // First Chart Example - Area Line Chart 2 | 3 | Morris.Area({ 4 | // ID of the element in which to draw the chart. 5 | element: 'morris-chart-area', 6 | // Chart data records -- each entry in this array corresponds to a point on 7 | // the chart. 8 | data: [ 9 | { d: '2012-10-01', visits: 802 }, 10 | { d: '2012-10-02', visits: 783 }, 11 | { d: '2012-10-03', visits: 820 }, 12 | { d: '2012-10-04', visits: 839 }, 13 | { d: '2012-10-05', visits: 792 }, 14 | { d: '2012-10-06', visits: 859 }, 15 | { d: '2012-10-07', visits: 790 }, 16 | { d: '2012-10-08', visits: 1680 }, 17 | { d: '2012-10-09', visits: 1592 }, 18 | { d: '2012-10-10', visits: 1420 }, 19 | { d: '2012-10-11', visits: 882 }, 20 | { d: '2012-10-12', visits: 889 }, 21 | { d: '2012-10-13', visits: 819 }, 22 | { d: '2012-10-14', visits: 849 }, 23 | { d: '2012-10-15', visits: 870 }, 24 | { d: '2012-10-16', visits: 1063 }, 25 | { d: '2012-10-17', visits: 1192 }, 26 | { d: '2012-10-18', visits: 1224 }, 27 | { d: '2012-10-19', visits: 1329 }, 28 | { d: '2012-10-20', visits: 1329 }, 29 | { d: '2012-10-21', visits: 1239 }, 30 | { d: '2012-10-22', visits: 1190 }, 31 | { d: '2012-10-23', visits: 1312 }, 32 | { d: '2012-10-24', visits: 1293 }, 33 | { d: '2012-10-25', visits: 1283 }, 34 | { d: '2012-10-26', visits: 1248 }, 35 | { d: '2012-10-27', visits: 1323 }, 36 | { d: '2012-10-28', visits: 1390 }, 37 | { d: '2012-10-29', visits: 1420 }, 38 | { d: '2012-10-30', visits: 1529 }, 39 | { d: '2012-10-31', visits: 1892 }, 40 | ], 41 | // The name of the data record attribute that contains x-visitss. 42 | xkey: 'd', 43 | // A list of names of data record attributes that contain y-visitss. 44 | ykeys: ['visits'], 45 | // Labels for the ykeys -- will be displayed when you hover over the 46 | // chart. 47 | labels: ['Visits'], 48 | // Disables line smoothing 49 | smooth: false, 50 | }); 51 | 52 | Morris.Donut({ 53 | element: 'morris-chart-donut', 54 | data: [ 55 | {label: "Referral", value: 42.7}, 56 | {label: "Direct", value: 8.3}, 57 | {label: "Social", value: 12.8}, 58 | {label: "Organic", value: 36.2} 59 | ], 60 | formatter: function (y) { return y + "%" ;} 61 | }); 62 | 63 | Morris.Line({ 64 | // ID of the element in which to draw the chart. 65 | element: 'morris-chart-line', 66 | // Chart data records -- each entry in this array corresponds to a point on 67 | // the chart. 68 | data: [ 69 | { d: '2012-10-01', visits: 802 }, 70 | { d: '2012-10-02', visits: 783 }, 71 | { d: '2012-10-03', visits: 820 }, 72 | { d: '2012-10-04', visits: 839 }, 73 | { d: '2012-10-05', visits: 792 }, 74 | { d: '2012-10-06', visits: 859 }, 75 | { d: '2012-10-07', visits: 790 }, 76 | { d: '2012-10-08', visits: 1680 }, 77 | { d: '2012-10-09', visits: 1592 }, 78 | { d: '2012-10-10', visits: 1420 }, 79 | { d: '2012-10-11', visits: 882 }, 80 | { d: '2012-10-12', visits: 889 }, 81 | { d: '2012-10-13', visits: 819 }, 82 | { d: '2012-10-14', visits: 849 }, 83 | { d: '2012-10-15', visits: 870 }, 84 | { d: '2012-10-16', visits: 1063 }, 85 | { d: '2012-10-17', visits: 1192 }, 86 | { d: '2012-10-18', visits: 1224 }, 87 | { d: '2012-10-19', visits: 1329 }, 88 | { d: '2012-10-20', visits: 1329 }, 89 | { d: '2012-10-21', visits: 1239 }, 90 | { d: '2012-10-22', visits: 1190 }, 91 | { d: '2012-10-23', visits: 1312 }, 92 | { d: '2012-10-24', visits: 1293 }, 93 | { d: '2012-10-25', visits: 1283 }, 94 | { d: '2012-10-26', visits: 1248 }, 95 | { d: '2012-10-27', visits: 1323 }, 96 | { d: '2012-10-28', visits: 1390 }, 97 | { d: '2012-10-29', visits: 1420 }, 98 | { d: '2012-10-30', visits: 1529 }, 99 | { d: '2012-10-31', visits: 1892 }, 100 | ], 101 | // The name of the data record attribute that contains x-visitss. 102 | xkey: 'd', 103 | // A list of names of data record attributes that contain y-visitss. 104 | ykeys: ['visits'], 105 | // Labels for the ykeys -- will be displayed when you hover over the 106 | // chart. 107 | labels: ['Visits'], 108 | // Disables line smoothing 109 | smooth: false, 110 | }); 111 | 112 | Morris.Bar ({ 113 | element: 'morris-chart-bar', 114 | data: [ 115 | {device: 'iPhone', geekbench: 136}, 116 | {device: 'iPhone 3G', geekbench: 137}, 117 | {device: 'iPhone 3GS', geekbench: 275}, 118 | {device: 'iPhone 4', geekbench: 380}, 119 | {device: 'iPhone 4S', geekbench: 655}, 120 | {device: 'iPhone 5', geekbench: 1571} 121 | ], 122 | xkey: 'device', 123 | ykeys: ['geekbench'], 124 | labels: ['Geekbench'], 125 | barRatio: 0.4, 126 | xLabelAngle: 35, 127 | hideHover: 'auto' 128 | }); 129 | -------------------------------------------------------------------------------- /js/tablesorter/tables.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $("table").tablesorter({debug: true}); 3 | }); 4 | -------------------------------------------------------------------------------- /packages/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/packages/.gitkeep -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 15 | ./app/tests/ 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes... 9 | RewriteRule ^(.*)/$ /$1 [L,R=301] 10 | 11 | # Handle Front Controller... 12 | RewriteCond %{REQUEST_FILENAME} !-d 13 | RewriteCond %{REQUEST_FILENAME} !-f 14 | RewriteRule ^ index.php [L] 15 | 16 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/public/favicon.ico -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | 7 | */ 8 | 9 | /* 10 | |-------------------------------------------------------------------------- 11 | | Register The Auto Loader 12 | |-------------------------------------------------------------------------- 13 | | 14 | | Composer provides a convenient, automatically generated class loader 15 | | for our application. We just need to utilize it! We'll require it 16 | | into the script here so that we do not have to worry about the 17 | | loading of any our classes "manually". Feels great to relax. 18 | | 19 | */ 20 | 21 | require __DIR__.'/../bootstrap/autoload.php'; 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Turn On The Lights 26 | |-------------------------------------------------------------------------- 27 | | 28 | | We need to illuminate PHP development, so let's turn on the lights. 29 | | This bootstraps the framework and gets it ready for use, then it 30 | | will load up this application so that we can run it and send 31 | | the responses back to the browser and delight these users. 32 | | 33 | */ 34 | 35 | $app = require_once __DIR__.'/../bootstrap/start.php'; 36 | 37 | /* 38 | |-------------------------------------------------------------------------- 39 | | Run The Application 40 | |-------------------------------------------------------------------------- 41 | | 42 | | Once we have the application, we can simply call the run method, 43 | | which will execute the request and send the response back to 44 | | the client's browser allowing them to enjoy the creative 45 | | and wonderful application we have whipped up for them. 46 | | 47 | */ 48 | 49 | $app->run(); 50 | -------------------------------------------------------------------------------- /public/packages/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/public/packages/.gitkeep -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Webxity/ticket-management-system/3d8ee10d13b347b14e7e0b94c6549fe4b36d58aa/readme.md -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 |