You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
9.4 KiB

  1. <section>
  2. {$url = $contact->getPhoto()}
  3. <header class="big"
  4. {if="$url"}
  5. style="background-image: linear-gradient(to bottom, rgba(0,0,0,0.8) 0%, rgba(0,0,0,0.5) 100%), url('{$contact->getPhoto('xxl')}');"
  6. {/if}
  7. >
  8. <ul class="list thick">
  9. <li>
  10. {if="$url"}
  11. <span onclick="MovimUtils.reload('{$c->route('contact', $jid)}')"
  12. class="primary icon bubble color active
  13. {if="$roster && $roster->presence"}status {$roster->presence->presencekey}{/if}
  14. ">
  15. <img src="{$url}">
  16. </span>
  17. {elseif="!$contact->isFromMuc()"}
  18. <span onclick="MovimUtils.reload('{$c->route('contact', $jid)}')"
  19. class="primary icon bubble color {$contact->id|stringToColor} active
  20. {if="$roster && $roster->presence"}status {$roster->presence->presencekey}{/if}
  21. ">
  22. <i class="material-icons">person</i>
  23. </span>
  24. {/if}
  25. {if="!$contact->isFromMuc()"}
  26. <span class="control icon active" onclick="MovimUtils.reload('{$c->route('contact', $contact->id)}')">
  27. <i class="material-icons">person</i>
  28. </span>
  29. {/if}
  30. {if="!$contact->isMe()"}
  31. <span class="control icon active divided" onclick="ContactActions_ajaxChat('{$contact->id|echapJS}')">
  32. <i class="material-icons">comment</i>
  33. </span>
  34. {if="$roster && $roster->presences->count() > 0"}
  35. {loop="$roster->presences"}
  36. {if="$value->capability && $value->capability->isJingleAudio()"}
  37. <span title="{$c->__('button.audio_call')}" class="control icon active"
  38. onclick="VisioLink.openVisio('{$value->jid|echapJS}');">
  39. <i class="material-icons">phone</i>
  40. </span>
  41. {/if}
  42. {if="$value->capability && $value->capability->isJingleVideo()"}
  43. <span title="{$c->__('button.video_call')}" class="control icon active"
  44. onclick="VisioLink.openVisio('{$value->jid|echapJS}', '', true);">
  45. <i class="material-icons">videocam</i>
  46. </span>
  47. {break}
  48. {/if}
  49. {/loop}
  50. {/if}
  51. {/if}
  52. <div>
  53. <p class="line">{$contact->truename}</p>
  54. <p class="line">{$contact->id}</p>
  55. </div>
  56. </li>
  57. </ul>
  58. </header>
  59. {if="$roster && $roster->presences->count() > 0"}
  60. <ul class="list middle">
  61. <li class="subheader">
  62. <div>
  63. <p>{$c->__('clients.title')}</p>
  64. </div>
  65. </li>
  66. {loop="$roster->presences"}
  67. {if="$value->capability"}
  68. <li class="block">
  69. <span class="primary icon gray status {$value->presencekey}">
  70. <i class="material-icons">
  71. {$value->capability->getDeviceIcon()}
  72. </i>
  73. </span>
  74. <div>
  75. <p class="normal line">
  76. {$value->capability->name}
  77. <span class="second">{$value->resource}</span>
  78. </p>
  79. {if="$value->capability->identities()->first() && isset($clienttype[$value->capability->identities()->first()->type])"}
  80. <p class="line">
  81. {$clienttype[$value->capability->identities()->first()->type]}
  82. </p>
  83. {/if}
  84. </div>
  85. </li>
  86. {/if}
  87. {/loop}
  88. </ul>
  89. {/if}
  90. {if="$fingerprints->count() > 0"}
  91. <ul class="list middle">
  92. <li class="subheader">
  93. <div>
  94. <p>{$c->__('omemo.fingerprints')}</p>
  95. </div>
  96. </li>
  97. {loop="$fingerprints"}
  98. <li>
  99. <span class="primary icon gray">
  100. <i class="material-icons">fingerprint</i>
  101. </span>
  102. <div>
  103. <p class="normal">
  104. <span class="fingerprint" title="{$value->bundle_id}">
  105. {$value->fingerprint}
  106. </span>
  107. </p>
  108. </div>
  109. </li>
  110. {/loop}
  111. </ul>
  112. {/if}
  113. <ul class="tabs" id="navtabs"></ul>
  114. <div class="tabelem" title="{$c->__('vcard.title')}" id="contact_info">
  115. <ul class="list middle">
  116. {if="$roster && $roster->presence && $roster->presence->seen"}
  117. <li>
  118. <span class="primary icon gray">
  119. <i class="material-icons">access_time</i>
  120. </span>
  121. <div>
  122. <p>{$c->__('last.title')}</p>
  123. <p>
  124. {$roster->presence->seen|strtotime|prepareDate:true,true}
  125. </p>
  126. </div>
  127. </li>
  128. {/if}
  129. {if="$contact->fn != null"}
  130. <li>
  131. <span class="primary icon gray">{$contact->fn|firstLetterCapitalize}</span>
  132. <div>
  133. <p>{$c->__('general.name')}</p>
  134. <p>{$contact->fn}</p>
  135. </div>
  136. </li>
  137. {/if}
  138. {if="$contact->nickname != null"}
  139. <li>
  140. <span class="primary icon gray">{$contact->nickname|firstLetterCapitalize}</span>
  141. <div>
  142. <p>{$c->__('general.nickname')}</p>
  143. <p>{$contact->nickname}</p>
  144. </div>
  145. </li>
  146. {/if}
  147. {if="$roster && $roster->group"}
  148. <li>
  149. <span class="primary icon gray">
  150. <i class="material-icons">recent_actors</i>
  151. </span>
  152. <div>
  153. <p>{$c->__('edit.group')}</p>
  154. <p>
  155. <span class="tag color {$roster->group|stringToColor}">
  156. {$roster->group}
  157. </span>
  158. </p>
  159. </div>
  160. </li>
  161. {/if}
  162. {if="$contact->url != null"}
  163. <li>
  164. <span class="primary icon gray">
  165. <i class="material-icons">link</i>
  166. </span>
  167. <div>
  168. <p>{$c->__('general.website')}</p>
  169. <p>
  170. {if="filter_var($contact->url, FILTER_VALIDATE_URL)"}
  171. <a href="{$contact->url}" target="_blank">{$contact->url}</a>
  172. {else}
  173. {$contact->url}
  174. {/if}
  175. </p>
  176. </div>
  177. </li>
  178. {/if}
  179. {if="$contact->email != null"}
  180. <li>
  181. <span class="primary icon gray"><i class="material-icons">email</i></span>
  182. <div>
  183. <p>{$c->__('general.email')}</p>
  184. <p><a href="mailto:{$contact->email}">{$contact->email}</a></p>
  185. </div>
  186. </li>
  187. {/if}
  188. {if="$contact->description != null && trim($contact->description) != ''"}
  189. <li>
  190. <span class="primary icon gray"><i class="material-icons">subject</i></span>
  191. <div>
  192. <p>{$c->__('general.about')}</p>
  193. <p class="all">
  194. {autoescape="off"}
  195. {$contact->description|nl2br|addEmojis}
  196. {/autoescape}
  197. </p>
  198. </div>
  199. </li>
  200. {/if}
  201. {if="strtotime($contact->date) != 0"}
  202. <li class="block">
  203. <span class="primary icon gray"><i class="material-icons">cake</i></span>
  204. <div>
  205. <p>{$c->__('general.date_of_birth')}</p>
  206. <p>{$contact->date|strtotime|prepareDate:false}</p>
  207. </div>
  208. </li>
  209. {/if}
  210. </ul>
  211. </div>
  212. {if="$pictures->count() > 0"}
  213. <div class="tabelem" title="{$c->__('general.pictures')}" id="contact_medias">
  214. <ul class="grid active">
  215. {loop="$pictures"}
  216. <li style="background-image: url('{$value->file['uri']|protectPicture}')"
  217. onclick="Preview_ajaxHttpShow('{$value->file['uri']}')">
  218. <i class="material-icons">visibility</i>
  219. </li>
  220. {/loop}
  221. </ul>
  222. </div>
  223. {/if}
  224. <br />
  225. </section>