예제 #1
0
 /**
  * @param $id
  * @param array $params
  * @return shopCouponPluginCoupon
  */
 public static function gen($id, $params = array())
 {
     $m = new shopCouponModel();
     $tm = new shopCouponPluginTemplateModel();
     if (!($gen = $tm->getById($id))) {
         return new shopCouponPluginCoupon();
     }
     if (!($candidates = self::_candidates($gen))) {
         return new shopCouponPluginCoupon();
     }
     // Кто-то читает код? :)
     // Стоит проверять в цикле, чтоб наверняка?
     //do{
     $exists = $m->select('code')->where('code IN(?)', $candidates)->fetchAll(null, true);
     $candidates = array_diff($candidates, $exists);
     $code = reset($candidates);
     //} while(empty($code));
     $comment = $gen['comment'];
     if (!empty($params['contact_id'])) {
         $contact = new waContact($params['contact_id']);
         if ($contact->exists()) {
             $comment .= "\n" . _wp('for') . ' ' . $contact->getName();
         }
         $comment = trim($comment);
     }
     try {
         $code = mb_substr($code, 0, 32);
         $coupon = array('code' => $code, 'type' => $gen['type'], 'limit' => $gen['limit'], 'value' => $gen['value'], 'comment' => $comment, 'expire_datetime' => $gen['expire_hours'] ? date('Y-m-d H:i:s', time() + $gen['expire_hours'] * 3600) : null, 'create_datetime' => date('Y-m-d H:i:s'), 'create_contact_id' => $gen['create_contact_id']);
         $m->insert($coupon);
     } catch (waDbException $e) {
         $coupon = array();
     }
     return new shopCouponPluginCoupon($coupon);
 }
 /** Using $this->id get waContact and save it in $this->contact;
  * Load vars into $this->view specific to waContact. */
 protected function getContactInfo()
 {
     $system = wa();
     if ($this->id == $system->getUser()->getId()) {
         $this->contact = $system->getUser();
         $this->view->assign('own_profile', true);
     } else {
         $this->contact = new waContact($this->id);
         $this->view->assign('own_profile', false);
     }
     $exists = $this->contact->exists();
     if ($exists) {
         $this->view->assign('contact', $this->contact);
         // who created this contact and when
         $this->view->assign('contact_create_time', waDateTime::format('datetime', $this->contact['create_datetime'], $system->getUser()->getTimezone()));
         if ($this->contact['create_contact_id']) {
             try {
                 $author = new waContact($this->contact['create_contact_id']);
                 if ($author['name']) {
                     $this->view->assign('author', $author);
                 }
             } catch (Exception $e) {
                 // Contact not found. Ignore silently.
             }
         }
         $this->view->assign('top', $this->contact->getTopFields());
         // Main contact editor data
         $fieldValues = $this->contact->load('js', true);
         $m = new waContactModel();
         if (isset($fieldValues['company_contact_id'])) {
             if (!$m->getById($fieldValues['company_contact_id'])) {
                 $fieldValues['company_contact_id'] = 0;
                 $this->contact->save(array('company_contact_id' => 0));
             }
         }
         $contactFields = waContactFields::getInfo($this->contact['is_company'] ? 'company' : 'person', true);
         // Only show fields that are allowed in own profile
         if (!empty($this->params['limited_own_profile'])) {
             $allowed = array();
             foreach (waContactFields::getAll('person') as $f) {
                 if ($f->getParameter('allow_self_edit')) {
                     $allowed[$f->getId()] = true;
                 }
             }
             $fieldValues = array_intersect_key($fieldValues, $allowed);
             $contactFields = array_intersect_key($contactFields, $allowed);
         }
         contactsHelper::normalzieContactFieldValues($fieldValues, $contactFields);
         $this->view->assign('contactFields', $contactFields);
         $this->view->assign('contactFieldsOrder', array_keys($contactFields));
         $this->view->assign('fieldValues', $fieldValues);
         // Contact categories
         $cm = new waContactCategoriesModel();
         $this->view->assign('contact_categories', array_values($cm->getContactCategories($this->id)));
     } else {
         $this->view->assign('contact', array('id' => $this->id));
     }
     return $exists;
 }
 public function execute()
 {
     // only allowed to admin
     if ($this->getRights('backend') <= 1) {
         throw new waRightsException(_w('Access denied'));
     }
     $ids = waRequest::request('ids', array(), 'array_int');
     $collection = new contactsCollection('id/' . implode(',', $ids));
     $collection->orderBy('~data', 'DESC');
     $contacts = $collection->getContacts('*,photo_url_96', 0, 500);
     foreach ($contacts as &$c) {
         $c['name'] = waContactNameField::formatName($c);
     }
     unset($c);
     // Field names
     $fields = array();
     // field id => field name
     foreach (waContactFields::getAll('enabled') as $field_id => $field) {
         $fields[$field_id] = $field->getName();
         // Format data for template if needed
         foreach ($contacts as &$c) {
             if (empty($c[$field_id])) {
                 continue;
             }
             if (!is_array($c[$field_id]) || $this->is_assoc($c[$field_id])) {
                 $c[$field_id] = $field->format($c[$field_id], 'html');
             } else {
                 foreach ($c[$field_id] as &$v) {
                     $v = $field->format($v, 'html');
                 }
                 unset($v);
                 $c[$field_id] = implode(', ', $c[$field_id]);
             }
         }
         unset($c);
     }
     // skip some fields in the list
     $fields = array_diff_key($fields, array('title' => true, 'name' => true, 'photo' => true, 'firstname' => true, 'middlename' => true, 'lastname' => true, 'locale' => true, 'timezone' => true));
     // Initialize 'master_only' key
     foreach ($contacts as &$c) {
         $c['master_only'] = '';
     }
     unset($c);
     // Event to allow other applications to add their data if needed
     $params = array_keys($contacts);
     $links = wa()->event('links', $params);
     $apps = wa()->getApps();
     foreach ($links as $app_id => $app_links) {
         foreach ($app_links as $contact_id => $contact_links) {
             foreach ($contact_links as $l) {
                 // Show information about links
                 $field_name = $apps[$app_id]['name'] . '/' . $l['role'];
                 $fields[$field_name] = $field_name;
                 $contacts[$contact_id][$field_name] = _w("%d link", "%d links", $l['links_number']);
                 // Show warning if this contact cannot be merged into other contacts.
                 if (!empty($l['forbid_merge_reason'])) {
                     if (!empty($contacts[$contact_id]['master_only'])) {
                         $contacts[$contact_id]['master_only'] .= '<br>';
                     } else {
                         $contacts[$contact_id]['master_only'] = '';
                     }
                     $contacts[$contact_id]['master_only'] .= $l['forbid_merge_reason'];
                 }
             }
         }
     }
     // List of contacts that can be safely merged into other contacts
     $slave_ids = array();
     foreach ($contacts as &$c) {
         if ($c['is_user'] > 0) {
             $c['master_only'] = ($c['master_only'] ? $c['master_only'] . '<br>' : '') . _w('Users can not be merged into other contacts.');
         } else {
             if (empty($c['master_only'])) {
                 $slave_ids[] = $c['id'];
             }
         }
         $author = array('name' => '');
         if ($c['create_contact_id']) {
             $author_contact = new waContact($c['create_contact_id']);
             if ($author_contact->exists()) {
                 $author = $author_contact;
             }
         }
         $c['author'] = $author;
     }
     unset($c);
     $this->view->assign('slave_ids', $slave_ids);
     $this->view->assign('contacts', $contacts);
     $this->view->assign('fields', $fields);
 }