/**
  * Render a social network identity
  *
  * @param  string $content
  * @return string
  */
 public function render($content)
 {
     $element = $this->getElement();
     if (!$element instanceof \Rexmac\Zyndax\Form\Element\SocialNetworkIdentity) {
         return $content;
     }
     $view = $element->getView();
     if (null === $view || !$view instanceof Zend_View_Interface) {
         return $content;
     }
     $name = $element->getFullyQualifiedName();
     $options = array();
     $networks = SocialNetworkService::find();
     foreach ($networks as $network) {
         $options[$network->getId()] = array('label' => $network->getName(), 'class' => 'icon-' . strtolower($network->getAbbrev()));
     }
     $identityName = $element->getIdentityName();
     $network = $element->getNetwork();
     $markup = $view->formText($name . '[name]', $identityName, array()) . '  ' . $view->formSelect($name . '[network]', $network, array('class' => 'socialNetworkMenu'), $options);
     if ($this->getOption('link')) {
         $markup .= '<a href="javascript:;" class="addSocialNetworkFieldLink" title="Add another social network identity">[Add another]</a><br>';
     }
     switch ($this->getPlacement()) {
         case self::PREPEND:
             return $markup . $this->getSeparator() . $content;
         case self::APPEND:
         default:
             return $content . $this->getSeparator() . $markup;
     }
 }
Exemple #2
0
 /**
  * Update user
  *
  * @param User $user User to be updated
  * @param array $data User data to be updated
  * @throws Exception
  * @return bool True if changes were made
  */
 private function _updateUser(User $user, array $data)
 {
     Logger::debug(__METHOD__ . '::' . var_export($data, true));
     #if(isset($data['email']) && '' != $data['email'] && $data['email'] != $user->getEmail()) {
     #  $user->setEmail($data['email']);
     #}
     $profile = $user->getProfile();
     $social = $profile->getSocialNetworkIdentities();
     // Track changes
     $changes = array(PROFILE_EDIT => array(), SOCIAL_EDIT => array(), USER_EDIT => array());
     foreach ($data as $key => $newValue) {
         Logger::debug(__METHOD__ . ":: {$key}");
         if (in_array($key, array('firstName', 'lastName', 'phone'))) {
             Logger::debug(__METHOD__ . ':: Profile key');
             $type = PROFILE_EDIT;
             $oldValue = $profile->{'get' . ucfirst($key)}();
         } elseif (preg_match('/^social(\\d+)$/', $key, $matches)) {
             Logger::debug(__METHOD__ . ':: Social key: social' . $matches[1]);
             $type = SOCIAL_EDIT;
             $oldValue = $social[$matches[1] - 1];
         } else {
             Logger::debug(__METHOD__ . ':: User key');
             $type = USER_EDIT;
             $oldValue = $user->{'get' . ucfirst($key)}();
         }
         Logger::debug(__METHOD__ . ":: OLD => " . (is_object($oldValue) ? get_class($oldValue) : var_export($oldValue, true)));
         Logger::debug(__METHOD__ . ":: NEW => " . (is_object($newValue) ? get_class($newValue) : var_export($newValue, true)));
         // Only update changed properties, and keep track of the changes as well
         if ($this->_valueChanged($oldValue, $newValue)) {
             Logger::debug(__METHOD__ . ":: {$key} has changed");
             Logger::debug(__METHOD__ . ":: OLD => " . (is_object($oldValue) ? get_class($oldValue) : var_export($oldValue, true)));
             Logger::debug(__METHOD__ . ":: NEW => " . (is_object($newValue) ? get_class($newValue) : var_export($newValue, true)));
             $oldVal = $oldValue;
             $newVal = $newValue;
             if ($newValue instanceof Rexmac\Zyndax\Form\Element\SocialNetworkIdentity && $oldValue instanceof Rexmac\Zyndax\Entity\UserSocialNetworkIdentity) {
                 $newVal = $newValue->getIdentityName() . '@' . SocialNetworkService::findOneById($newValue->getNetwork())->getName();
                 $oldVal = $oldValue->getName() . '@' . $oldValue->getSocialNetwork()->getName();
             } elseif (is_object($newValue)) {
                 if (isset($oldValue)) {
                     $oldVal = $oldValue->getName();
                 } else {
                     $oldVal = '';
                 }
                 $newVal = $newValue->getName();
             } elseif (is_object($oldValue)) {
                 $oldVal = $oldValue->getName();
             }
             $changes[$type][] = array('item' => $key, 'oldValue' => $oldVal, 'newValue' => $newVal);
             // Set new value
             if ($type === SOCIAL_EDIT) {
                 if ('' === $newValue->getIdentityName()) {
                     $removed = $profile->removeSocialNetworkIdentity($oldValue);
                     Logger::debug(__METHOD__ . ':: Removed? ' . var_export($removed, true));
                     UserSocialNetworkIdentityService::delete($oldValue);
                     #$profile->setSocialNetworkIdentities(UserSocialNetworkIdentityService::findBy(array('userProfile', $profile->getId())));
                 } else {
                     $oldValue->setSocialNetwork(SocialNetworkService::findOneById($newValue->getNetwork()));
                     $oldValue->setName($newValue->getIdentityName());
                 }
             } elseif ($type === PROFILE_EDIT) {
                 $profile->{'set' . ucfirst($key)}($newValue);
             } else {
                 $user->{'set' . ucfirst($key)}($newValue);
             }
         }
     }
     UserService::update();
     UserProfileService::update();
     UserSocialNetworkIdentityService::update();
     // Any changes to record?
     $changed = false;
     foreach (array(PROFILE_EDIT, SOCIAL_EDIT, USER_EDIT) as $type) {
         Logger::debug(__METHOD__ . ':: Examining ' . $type . ' changes...');
         if (count($changes[$type]) > 0) {
             Logger::debug(__METHOD__ . ':: changes[\'' . $type . '\'] = ' . var_export($changes[$type], true));
             $description = '';
             foreach ($changes[$type] as $change) {
                 Logger::debug(__METHOD__ . ':: change = ' . var_export($change, true));
                 $description .= sprintf('%s changed from "%s" to "%s".', $change['item'], $change['oldValue'] === 0 ? '0' : $change['oldValue'], $change['newValue']) . PHP_EOL;
                 Logger::debug(__METHOD__ . ':: description = ' . $description);
             }
             UserEditEventService::create(array('user' => $user, 'editor' => $this->_user, 'ip' => $this->getRequest()->getServer('REMOTE_ADDR'), 'date' => new DateTime(), 'description' => rtrim($description)));
             $changed = true;
         }
     }
     return $changed;
 }