示例#1
0
    function run($args, $options) {

        Bootstrap::connect();

        switch ($args['action']) {
            case 'import':
                // Properly detect Macintosh style line endings
                ini_set('auto_detect_line_endings', true);

                if (!$options['file'])
                    $this->fail('CSV file to import users from is required!');
                elseif (!($this->stream = fopen($options['file'], 'rb')))
                    $this->fail("Unable to open input file [{$options['file']}]");

                $extras = array();
                if ($options['org']) {
                    if (!($org = Organization::lookup($options['org'])))
                        $this->fail($options['org'].': Unknown organization ID');
                    $extras['org_id'] = $options['org'];
                }
                $status = User::importCsv($this->stream, $extras);
                if (is_numeric($status))
                    $this->stderr->write("Successfully imported $status clients\n");
                else
                    $this->fail($status);
                break;

            case 'export':
                $stream = $options['file'] ?: 'php://stdout';
                if (!($this->stream = fopen($stream, 'c')))
                    $this->fail("Unable to open output file [{$options['file']}]");

                fputcsv($this->stream, array('Name', 'Email'));
                foreach (User::objects() as $user)
                    fputcsv($this->stream,
                            array((string) $user->getName(), $user->getEmail()));
                break;
            default:
                $this->stderr->write('Unknown action!');
        }
        @fclose($this->stream);
    }
示例#2
0
 /**
  * Cooperates with the cron system to automatically find content that is
  * not index in the _search table and add it to the index.
  */
 function IndexOldStuff()
 {
     $class = get_class();
     $auto_create = function ($db_error) use($class) {
         if ($db_error != 1146) {
             // Perform the standard error handling
             return true;
         }
         // Create the search table automatically
         $class::__init();
     };
     // THREADS ----------------------------------
     $sql = "SELECT A1.`id`, A1.`title`, A1.`body`, A1.`format` FROM `" . TICKET_THREAD_TABLE . "` A1\n            LEFT JOIN `" . TABLE_PREFIX . "_search` A2 ON (A1.`id` = A2.`object_id` AND A2.`object_type`='H')\n            WHERE A2.`object_id` IS NULL AND (A1.poster <> 'SYSTEM')\n            AND (LENGTH(A1.`title`) + LENGTH(A1.`body`) > 0)\n            ORDER BY A1.`id` DESC";
     if (!($res = db_query_unbuffered($sql, $auto_create))) {
         return false;
     }
     while ($row = db_fetch_row($res)) {
         $body = ThreadBody::fromFormattedText($row[2], $row[3]);
         $body = $body->getSearchable();
         $title = Format::searchable($row[1]);
         if (!$body && !$title) {
             continue;
         }
         $record = array('H', $row[0], $title, $body);
         if (!$this->__index($record)) {
             return;
         }
     }
     // TICKETS ----------------------------------
     $sql = "SELECT A1.`ticket_id` FROM `" . TICKET_TABLE . "` A1\n            LEFT JOIN `" . TABLE_PREFIX . "_search` A2 ON (A1.`ticket_id` = A2.`object_id` AND A2.`object_type`='T')\n            WHERE A2.`object_id` IS NULL\n            ORDER BY A1.`ticket_id` DESC";
     if (!($res = db_query_unbuffered($sql, $auto_create))) {
         return false;
     }
     while ($row = db_fetch_row($res)) {
         $ticket = Ticket::lookup($row[0]);
         $cdata = $ticket->loadDynamicData();
         $content = array();
         foreach ($cdata as $k => $a) {
             if ($k != 'subject' && ($v = $a->getSearchable())) {
                 $content[] = $v;
             }
         }
         $record = array('T', $ticket->getId(), Format::searchable($ticket->getNumber() . ' ' . $ticket->getSubject()), implode("\n", $content));
         if (!$this->__index($record)) {
             return;
         }
     }
     // USERS ------------------------------------
     $sql = "SELECT A1.`id` FROM `" . USER_TABLE . "` A1\n            LEFT JOIN `" . TABLE_PREFIX . "_search` A2 ON (A1.`id` = A2.`object_id` AND A2.`object_type`='U')\n            WHERE A2.`object_id` IS NULL\n            ORDER BY A1.`id` DESC";
     if (!($res = db_query_unbuffered($sql, $auto_create))) {
         return false;
     }
     while ($row = db_fetch_row($res)) {
         $user = User::lookup($row[0]);
         $cdata = $user->getDynamicData();
         $content = array();
         foreach ($user->emails as $e) {
             $content[] = $e->address;
         }
         foreach ($cdata as $e) {
             foreach ($e->getAnswers() as $a) {
                 if ($c = $a->getSearchable()) {
                     $content[] = $c;
                 }
             }
         }
         $record = array('U', $user->getId(), Format::searchable($user->getFullName()), trim(implode("\n", $content)));
         if (!$this->__index($record)) {
             return;
         }
     }
     // ORGANIZATIONS ----------------------------
     $sql = "SELECT A1.`id` FROM `" . ORGANIZATION_TABLE . "` A1\n            LEFT JOIN `" . TABLE_PREFIX . "_search` A2 ON (A1.`id` = A2.`object_id` AND A2.`object_type`='O')\n            WHERE A2.`object_id` IS NULL\n            ORDER BY A1.`id` DESC";
     if (!($res = db_query_unbuffered($sql, $auto_create))) {
         return false;
     }
     while ($row = db_fetch_row($res)) {
         $org = Organization::lookup($row[0]);
         $cdata = $org->getDynamicData();
         $content = array();
         foreach ($cdata as $e) {
             foreach ($e->getAnswers() as $a) {
                 if ($c = $a->getSearchable()) {
                     $content[] = $c;
                 }
             }
         }
         $record = array('O', $org->getId(), Format::searchable($org->getName()), trim(implode("\n", $content)));
         if (!$this->__index($record)) {
             return null;
         }
     }
     // KNOWLEDGEBASE ----------------------------
     require_once INCLUDE_DIR . 'class.faq.php';
     $sql = "SELECT A1.`faq_id` FROM `" . FAQ_TABLE . "` A1\n            LEFT JOIN `" . TABLE_PREFIX . "_search` A2 ON (A1.`faq_id` = A2.`object_id` AND A2.`object_type`='K')\n            WHERE A2.`object_id` IS NULL\n            ORDER BY A1.`faq_id` DESC";
     if (!($res = db_query_unbuffered($sql, $auto_create))) {
         return false;
     }
     while ($row = db_fetch_row($res)) {
         $faq = FAQ::lookup($row[0]);
         $q = $faq->getQuestion();
         if ($k = $faq->getKeywords()) {
             $q = $k . ' ' . $q;
         }
         $record = array('K', $faq->getId(), Format::searchable($q), $faq->getSearchableAnswer());
         if (!$this->__index($record)) {
             return;
         }
     }
     // FILES ------------------------------------
     // Flush non-full batch of records
     $this->__index(null, true);
     if (!$this->_reindexed) {
         // Stop rebuilding the index
         $this->getConfig()->set('reindex', 0);
     }
 }
 function updateOrg($id, $orgId = 0)
 {
     global $thisstaff;
     if (!$thisstaff) {
         Http::response(403, 'Login Required');
     } elseif (!($user = User::lookup($id))) {
         Http::response(404, 'Unknown customer');
     }
     $info = array();
     $info['title'] = 'Organization for ' . Format::htmlchars($user->getName());
     $info['action'] = '#users/' . $user->getId() . '/org';
     $info['onselect'] = 'ajax.php/users/' . $user->getId() . '/org';
     if ($_POST) {
         if ($_POST['orgid']) {
             //Existing org.
             if (!($org = Organization::lookup($_POST['orgid']))) {
                 $info['error'] = 'Unknown organization selected';
             }
         } else {
             //Creating new org.
             $form = OrganizationForm::getDefaultForm()->getForm($_POST);
             if (!($org = Organization::fromForm($form))) {
                 $info['error'] = 'Unable to create organization - try again!';
             }
         }
         if ($org && $user->setOrganization($org)) {
             Http::response(201, $org->to_json());
         } elseif (!$info['error']) {
             $info['error'] = 'Unable to add organization - try again!';
         }
     } elseif ($orgId) {
         $org = Organization::lookup($orgId);
     } elseif ($org = $user->getOrganization()) {
         $info['title'] = sprintf('%s &mdash; %s', Format::htmlchars($user->getName()), 'Organization');
         $info['action'] = $info['onselect'] = '';
         $tmpl = 'org.tmpl.php';
     }
     if ($org && $user->getOrgId() && $org->getId() != $user->getOrgId()) {
         $info['warning'] = 'Are you sure you want to change customer\'s organization?';
     }
     $tmpl = $tmpl ?: 'org-lookup.tmpl.php';
     ob_start();
     include STAFFINC_DIR . "templates/{$tmpl}";
     $resp = ob_get_contents();
     ob_end_clean();
     return $resp;
 }
示例#4
0
文件: users.php 项目: gizur/osticket
             if (($acct = $U->getAccount()) && $acct->sendResetEmail()) {
                 $count++;
             }
         }
         break;
     case 'register':
         foreach ($users as $U) {
             if (($acct = $U->getAccount()) && $acct->sendConfirmEmail()) {
                 $count++;
             } elseif ($acct = UserAccount::register($U, array('sendemail' => true), $errors)) {
                 $count++;
             }
         }
         break;
     case 'setorg':
         if (!($org = Organization::lookup($_POST['org_id']))) {
             $errors['err'] = __('Unknown action - get technical help.');
         }
         foreach ($users as $U) {
             if ($U->setOrganization($org)) {
                 $count++;
             }
         }
         break;
     default:
         $errors['err'] = __('Unknown action - get technical help.');
 }
 if (!$errors['err'] && !$count) {
     $errors['err'] = __('Unable to manage any of the selected end users');
 } elseif ($_POST['count'] && $count != $_POST['count']) {
     $warn = __('Not all selected items were updated');
 function updateForms($org_id)
 {
     global $thisstaff;
     if (!$thisstaff) {
         Http::response(403, "Login required");
     } elseif (!($org = Organization::lookup($org_id))) {
         Http::response(404, "No such ticket");
     } elseif (!isset($_POST['forms'])) {
         Http::response(422, "Send updated forms list");
     }
     // Add new forms
     $forms = DynamicFormEntry::forOrganization($org_id);
     foreach ($_POST['forms'] as $sort => $id) {
         $found = false;
         foreach ($forms as $e) {
             if ($e->get('form_id') == $id) {
                 $e->set('sort', $sort);
                 $e->save();
                 $found = true;
                 break;
             }
         }
         // New form added
         if (!$found && ($new = DynamicForm::lookup($id))) {
             $org->addForm($new, $sort);
         }
     }
     // Deleted forms
     foreach ($forms as $idx => $e) {
         if (!in_array($e->get('form_id'), $_POST['forms'])) {
             $e->delete();
         }
     }
     Http::response(201, 'Successfully managed');
 }
示例#6
0
 static function fromForm($form)
 {
     if (!$form) {
         return null;
     }
     //Validate the form
     $valid = true;
     if (!$form->isValid()) {
         $valid = false;
     }
     //Make sure the email is not in-use
     if (($field = $form->getField('name')) && $field->getClean() && Organization::lookup(array('name' => $field->getClean()))) {
         $field->addError('Organization with the same name already exists');
         $valid = false;
     }
     return $valid ? self::fromVars($form->getClean()) : null;
 }
示例#7
0
    Peter Rotich <*****@*****.**>
    Jared Hancock <*****@*****.**>
    Copyright (c)  2006-2014 osTicket
    http://www.osticket.com

    Released under the GNU General Public License WITHOUT ANY WARRANTY.
    See LICENSE.TXT for details.

    vim: expandtab sw=4 ts=4 sts=4:
**********************************************************************/
require 'staff.inc.php';
require_once INCLUDE_DIR . 'class.note.php';
$org = null;
if ($_REQUEST['id'] || $_REQUEST['org_id']) {
    $org = Organization::lookup($_REQUEST['org_id'] ?: $_REQUEST['id']);
}
if ($_POST) {
    switch ($_REQUEST['a']) {
        case 'import-users':
            if (!$org) {
                $errors['err'] = 'Organization ID must be specified for import';
                break;
            }
            $status = User::importFromPost($_FILES['import'] ?: $_POST['pasted'], array('org_id' => $org->getId()));
            if (is_numeric($status)) {
                $msg = "Successfully imported {$status} clients";
            } else {
                $errors['err'] = $status;
            }
            break;